X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Froutines2.c;h=b414b47315af0d21e67df9361cb1c29940cb156b;hb=1e656d277fe91b7c4f5d73eab4a0dd0b7a173145;hp=3687f06eafbd9419b862e0cd484eea56d11a9d23;hpb=2e3adea803856b592b7994fad8fcbc818cc0705c;p=citadel.git diff --git a/citadel/routines2.c b/citadel/routines2.c index 3687f06ea..b414b4731 100644 --- a/citadel/routines2.c +++ b/citadel/routines2.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "sysdep.h" #include "citadel.h" #include "citadel_ipc.h" @@ -37,7 +38,6 @@ #include "routines2.h" #include "routines.h" #include "commands.h" -#include "tools.h" #include "messages.h" #ifndef HAVE_SNPRINTF #include "snprintf.h" @@ -51,7 +51,7 @@ extern char temp[]; extern char tempdir[]; -extern char *axdefs[7]; +extern char *axdefs[8]; extern long highest_msg_read; extern long maxmsgnum; extern unsigned room_flags; @@ -451,6 +451,11 @@ int val_user(CtdlIPC *ipc, char *user, int do_validate) if (a == 11) scr_printf("%s\n", buf); } while (!IsEmptyStr(resp)); + +/* TODODRW: discrepancy here. Parts of the code refer to axdefs[7] as the highest + * but most of it limits it to axdefs[6]. + * Webcit limits to 6 as does the code here but there are 7 in axdefs.h + */ scr_printf("Current access level: %d (%s)\n", ax, axdefs[ax]); } else { scr_printf("%s\n%s\n", user, &cmd[4]); @@ -638,815 +643,4 @@ void read_bio(CtdlIPC *ipc) } -/* - * General system configuration command - */ -void do_system_configuration(CtdlIPC *ipc) -{ - -#define NUM_CONFIGS 58 - - char buf[256]; - char sc[NUM_CONFIGS][256]; - char *resp = NULL; - struct ExpirePolicy *site_expirepolicy = NULL; - struct ExpirePolicy *mbx_expirepolicy = NULL; - int a; - int logpages = 0; - int r; /* IPC response code */ - int server_configs = 0; - - /* Clear out the config buffers */ - memset(&sc[0][0], 0, sizeof(sc)); - - /* Fetch the current config */ - r = CtdlIPCGetSystemConfig(ipc, &resp, buf); - if (r / 100 == 1) { - server_configs = num_tokens(resp, '\n'); - for (a=0; aServInfo.supports_ldap) { - a = strlen(&sc[32][0]); - a = (a ? 1 : 0); /* Set only to 1 or 0 */ - a = boolprompt("Connect this Citadel to an LDAP directory", a); - if (a) { - strprompt("Host name of LDAP server", - &sc[32][0], 127); - strprompt("Port number of LDAP service", - &sc[33][0], 5); - strprompt("Base DN", &sc[34][0], 255); - strprompt("Bind DN", &sc[35][0], 255); - strprompt("Password for bind DN", &sc[36][0], 255); - } - else { - strcpy(&sc[32][0], ""); - } - } - - /* Expiry settings */ - strprompt("Default user purge time (days)", &sc[16][0], 5); - strprompt("Default room purge time (days)", &sc[17][0], 5); - - /* Angels and demons dancing in my head... */ - do { - snprintf(buf, sizeof buf, "%d", site_expirepolicy->expire_mode); - strprompt("System default message expire policy (? for list)", - buf, 1); - if (buf[0] == '?') { - scr_printf("\n" - "1. Never automatically expire messages\n" - "2. Expire by message count\n" - "3. Expire by message age\n"); - } - } while ((buf[0] < '1') || (buf[0] > '3')); - site_expirepolicy->expire_mode = buf[0] - '0'; - - /* ...lunatics and monsters underneath my bed */ - if (site_expirepolicy->expire_mode == 2) { - snprintf(buf, sizeof buf, "%d", site_expirepolicy->expire_value); - strprompt("Keep how many messages online?", buf, 10); - site_expirepolicy->expire_value = atol(buf); - } - if (site_expirepolicy->expire_mode == 3) { - snprintf(buf, sizeof buf, "%d", site_expirepolicy->expire_value); - strprompt("Keep messages for how many days?", buf, 10); - site_expirepolicy->expire_value = atol(buf); - } - - /* Media messiahs preying on my fears... */ - do { - snprintf(buf, sizeof buf, "%d", mbx_expirepolicy->expire_mode); - strprompt("Mailbox default message expire policy (? for list)", - buf, 1); - if (buf[0] == '?') { - scr_printf("\n" - "0. Go with the system default\n" - "1. Never automatically expire messages\n" - "2. Expire by message count\n" - "3. Expire by message age\n"); - } - } while ((buf[0] < '0') || (buf[0] > '3')); - mbx_expirepolicy->expire_mode = buf[0] - '0'; - - /* ...Pop culture prophets playing in my ears */ - if (mbx_expirepolicy->expire_mode == 2) { - snprintf(buf, sizeof buf, "%d", mbx_expirepolicy->expire_value); - strprompt("Keep how many messages online?", buf, 10); - mbx_expirepolicy->expire_value = atol(buf); - } - if (mbx_expirepolicy->expire_mode == 3) { - snprintf(buf, sizeof buf, "%d", mbx_expirepolicy->expire_value); - strprompt("Keep messages for how many days?", buf, 10); - mbx_expirepolicy->expire_value = atol(buf); - } - - strprompt("How often to run network jobs (in seconds)", &sc[28][0], 5); - strprompt("Hour to run purges (0-23)", &sc[31][0], 2); - snprintf(sc[42], sizeof sc[42], "%d", (boolprompt( - "Enable full text search index (warning: resource intensive)", - atoi(&sc[42][0])))); - - snprintf(sc[46], sizeof sc[46], "%d", (boolprompt( - "Perform journaling of email messages", - atoi(&sc[46][0])))); - snprintf(sc[47], sizeof sc[47], "%d", (boolprompt( - "Perform journaling of non-email messages", - atoi(&sc[47][0])))); - if ( (atoi(&sc[46][0])) || (atoi(&sc[47][0])) ) { - strprompt("Email destination of journalized messages", - &sc[48][0], 127); - } - - /* Funambol push stuff */ - strprompt("Funambol server (blank to disable)", &sc[53][0], 63); - strprompt("Funambol server port", &sc[54][0], 5); - strprompt("Funambol sync source", &sc[55][0], 63); - strprompt("Funambol authentication details (user:pass in Base64)", &sc[56][0],63); - - /* Save it */ - scr_printf("Save this configuration? "); - if (yesno()) { - r = 1; - for (a = 0; a < NUM_CONFIGS; a++) - r += 1 + strlen(sc[a]); - resp = (char *)calloc(1, r); - if (!resp) { - err_printf("Can't save config - out of memory!\n"); - logoff(ipc, 1); - } - for (a = 0; a < NUM_CONFIGS; a++) { - strcat(resp, sc[a]); - strcat(resp, "\n"); - } - r = CtdlIPCSetSystemConfig(ipc, resp, buf); - if (r / 100 != 4) { - err_printf("%s\n", buf); - } - free(resp); - - r = CtdlIPCSetMessageExpirationPolicy(ipc, 2, site_expirepolicy, buf); - if (r / 100 != 2) { - err_printf("%s\n", buf); - } - - r = CtdlIPCSetMessageExpirationPolicy(ipc, 3, mbx_expirepolicy, buf); - if (r / 100 != 2) { - err_printf("%s\n", buf); - } - - } - if (site_expirepolicy) free(site_expirepolicy); - if (mbx_expirepolicy) free(mbx_expirepolicy); -} - - -/* - * support function for do_internet_configuration() - */ -void get_inet_rec_type(CtdlIPC *ipc, char *buf) { - int sel; - - keyopt(" <1> localhost (Alias for this computer)\n"); - keyopt(" <2> gateway domain (Domain for all Citadel systems)\n"); - keyopt(" <3> smart-host (Forward all outbound mail to this host)\n"); - keyopt(" <4> directory (Consult the Global Address Book)\n"); - keyopt(" <5> SpamAssassin (Address of SpamAssassin server)\n"); - keyopt(" <6> RBL (domain suffix of spam hunting RBL)\n"); - keyopt(" <7> masq domains (Domains as which users are allowed to masquerade)\n"); - sel = intprompt("Which one", 1, 1, 6); - switch(sel) { - case 1: strcpy(buf, "localhost"); - return; - case 2: strcpy(buf, "gatewaydomain"); - return; - case 3: strcpy(buf, "smarthost"); - return; - case 4: strcpy(buf, "directory"); - return; - case 5: strcpy(buf, "spamassassin"); - return; - case 6: strcpy(buf, "rbl"); - return; - case 7: strcpy(buf, "masqdomain"); - return; - } -} - - -/* - * Internet mail configuration - */ -void do_internet_configuration(CtdlIPC *ipc) -{ - char buf[256]; - char *resp = NULL; - int num_recs = 0; - char **recs = NULL; - char ch; - int badkey; - int i, j; - int quitting = 0; - int modified = 0; - int r; - - r = CtdlIPCGetSystemConfigByType(ipc, INTERNETCFG, &resp, buf); - if (r / 100 == 1) { - while (!IsEmptyStr(resp)) { - extract_token(buf, resp, 0, '\n', sizeof buf); - remove_token(resp, 0, '\n'); - ++num_recs; - if (num_recs == 1) recs = malloc(sizeof(char *)); - else recs = realloc(recs, (sizeof(char *)) * num_recs); - recs[num_recs-1] = malloc(strlen(buf) + 1); - strcpy(recs[num_recs-1], buf); - } - } - if (resp) free(resp); - - do { - scr_printf("\n"); - color(BRIGHT_WHITE); - scr_printf("### Host or domain Record type \n"); - color(DIM_WHITE); - scr_printf("--- -------------------------------------------------- --------------------\n"); - for (i=0; idd|elete|ave|uit"); - switch(ch) { - case 'a': - newprompt("Enter host name: ", - buf, 50); - striplt(buf); - if (!IsEmptyStr(buf)) { - ++num_recs; - if (num_recs == 1) - recs = malloc(sizeof(char *)); - else recs = realloc(recs, - (sizeof(char *)) * num_recs); - strcat(buf, "|"); - get_inet_rec_type(ipc, - &buf[strlen(buf)]); - recs[num_recs-1] = strdup(buf); - } - modified = 1; - break; - case 'd': - i = intprompt("Delete which one", - 1, 1, num_recs) - 1; - free(recs[i]); - --num_recs; - for (j=i; j 0) { - do { - e_ex_code = 0; - b = ka_wait(&e_ex_code); - } while ((b != editor_pid) && (b >= 0)); - editor_pid = (-1); - stty_ctdl(0); - screen_set(); - } - - if (file_checksum(filename) == cksum) { - err_printf("*** No changes to save.\n"); - e_ex_code = 1; - } - - if (e_ex_code == 0) { /* Save changes */ - changefp = fopen(changefile, "w"); - - /* Load all netconfig entries that are *not* of the type we are editing */ - r = CtdlIPCGetRoomNetworkConfig(ipc, &listing, buf); - if (r / 100 == 1) { - while(listing && !IsEmptyStr(listing)) { - extract_token(buf, listing, 0, '\n', sizeof buf); - remove_token(listing, 0, '\n'); - extract_token(instr, buf, 0, '|', sizeof instr); - if (strcasecmp(instr, entrytype)) { - fprintf(changefp, "%s\n", buf); - } - } - } - if (listing) { - free(listing); - listing = NULL; - } - - /* ...and merge that with the data we just edited */ - tempfp = fopen(filename, "r"); - while (fgets(buf, sizeof buf, tempfp) != NULL) { - for (i=0; idd|elete|ave|uit"); - switch(ch) { - case 'a': - ++num_recs; - if (num_recs == 1) - recs = malloc(sizeof(char *)); - else recs = realloc(recs, - (sizeof(char *)) * num_recs); - newprompt("Enter node name : ", buf, 16); - strcat(buf, "|"); - newprompt("Enter shared secret: ", - &buf[strlen(buf)], 18); - strcat(buf, "|"); - newprompt("Enter host or IP : ", - &buf[strlen(buf)], 32); - strcat(buf, "|504"); - strprompt("Enter port number : ", - &buf[strlen(buf)-3], 5); - recs[num_recs-1] = strdup(buf); - modified = 1; - break; - case 'd': - i = intprompt("Delete which one", - 1, 1, num_recs) - 1; - free(recs[i]); - --num_recs; - for (j=i; jdd|elete|ave|uit"); - switch(ch) { - case 'a': - ++num_recs; - if (num_recs == 1) - recs = malloc(sizeof(char *)); - else recs = realloc(recs, - (sizeof(char *)) * num_recs); - newprompt("Enter user name: ", buf, 28); - strcat(buf, "|"); - newprompt("Enter room name: ", - &buf[strlen(buf)], 28); - strcat(buf, "|"); - newprompt("Enter node name: ", - &buf[strlen(buf)], 16); - strcat(buf, "|"); - recs[num_recs-1] = strdup(buf); - modified = 1; - break; - case 'd': - i = intprompt("Delete which one", - 1, 1, num_recs) - 1; - free(recs[i]); - --num_recs; - for (j=i; j