]> code.citadel.org Git - citadel.git/blobdiff - citadel/routines2.c
* Shut off hostname resolution when dealing with Unix domain sockets
[citadel.git] / citadel / routines2.c
index 77f740b5c4c92940cf2e8a6233fabab8c17d399e..d4e07c9292291e75c1eb6eb69ff50c53bb732e7f 100644 (file)
@@ -36,7 +36,6 @@ int inkey(void);
 void serv_write(char *buf, int nbytes);
 int haschar(char *st, int ch);
 void progress(long int curr, long int cmax);
-void citedit(FILE * fp, long int base_pos);
 int yesno(void);
 
 extern char temp[];
@@ -624,7 +623,7 @@ void read_bio(void)
 void do_system_configuration(void)
 {
        char buf[256];
-       char sc[21][256];
+       char sc[25][256];
        int expire_mode = 0;
        int expire_value = 0;
        int a;
@@ -638,7 +637,7 @@ void do_system_configuration(void)
        if (buf[0] == '1') {
                a = 0;
                while (serv_gets(buf), strcmp(buf, "000")) {
-                       if (a < 21)
+                       if (a < 25)
                                strcpy(&sc[a][0], buf);
                        ++a;
                }
@@ -652,42 +651,58 @@ void do_system_configuration(void)
                expire_mode = extract_int(&buf[4], 0);
                expire_value = extract_int(&buf[4], 1);
        }
+
+
+       /* Identification parameters */
+
        strprompt("Node name", &sc[0][0], 15);
        strprompt("Fully qualified domain name", &sc[1][0], 63);
        strprompt("Human readable node name", &sc[2][0], 20);
        strprompt("Modem dialup number", &sc[3][0], 15);
+       strprompt("Geographic location of this system", &sc[12][0], 31);
+       strprompt("Name of system administrator", &sc[13][0], 25);
+       strprompt("Paginator prompt", &sc[10][0], 79);
 
-       sprintf(&sc[4][0], "%d", (boolprompt(
-                                                   "Automatically give room aide privs to a user who creates a private room",
-                                                   atoi(&sc[4][0]))));
 
-       strprompt("Server connection idle timeout (in seconds)", &sc[5][0], 4);
-       strprompt("Initial access level for new users", &sc[6][0], 1);
-       strprompt("Access level required to create rooms", &sc[19][0], 1);
+       /* Security parameters */
 
        sprintf(&sc[7][0], "%d", (boolprompt(
                                    "Require registration for new users",
                                                    atoi(&sc[7][0]))));
+       strprompt("Initial access level for new users", &sc[6][0], 1);
+       strprompt("Access level required to create rooms", &sc[19][0], 1);
+       sprintf(&sc[4][0], "%d", (boolprompt(
+                                                   "Automatically give room aide privs to a user who creates a private room",
+                                                   atoi(&sc[4][0]))));
 
        sprintf(&sc[8][0], "%d", (boolprompt(
                 "Automatically move problem user messages to twit room",
                                                    atoi(&sc[8][0]))));
 
        strprompt("Name of twit room", &sc[9][0], ROOMNAMELEN);
-       strprompt("Paginator prompt", &sc[10][0], 79);
-
        sprintf(&sc[11][0], "%d", (boolprompt(
              "Restrict Internet mail to only those with that privilege",
                                                     atoi(&sc[11][0]))));
 
-       strprompt("Geographic location of this system", &sc[12][0], 31);
-       strprompt("Name of system administrator", &sc[13][0], 25);
+       strprompt("Name of room to log pages", &sc[18][0], ROOMNAMELEN);
+
+
+       /* Server tuning */
+
+       strprompt("Server connection idle timeout (in seconds)", &sc[5][0], 4);
        strprompt("Maximum concurrent sessions", &sc[14][0], 4);
+       strprompt("Maximum message length", &sc[20][0], 20);
+       strprompt("Minimum number of worker threads", &sc[21][0], 3);
+       strprompt("Maximum number of worker threads", &sc[22][0], 3);
        strprompt("Server-to-server networking password", &sc[15][0], 19);
+       strprompt("POP3 server port (-1 to disable)", &sc[23][0], 5);
+       strprompt("SMTP server port (-1 to disable)", &sc[24][0], 5);
+
+
+       /* Expiry settings */
+
        strprompt("Default user purge time (days)", &sc[16][0], 5);
        strprompt("Default room purge time (days)", &sc[17][0], 5);
-       strprompt("Name of room to log pages", &sc[18][0], ROOMNAMELEN);
-       strprompt("Maximum message length", &sc[20][0], 20);
 
        /* Angels and demons dancing in my head... */
        do {
@@ -720,7 +735,7 @@ void do_system_configuration(void)
                serv_puts("CONF set");
                serv_gets(buf);
                if (buf[0] == '4') {
-                       for (a = 0; a < 21; ++a)
+                       for (a = 0; a < 25; ++a)
                                serv_puts(&sc[a][0]);
                        serv_puts("000");
                }
@@ -730,3 +745,124 @@ void do_system_configuration(void)
                serv_gets(buf);
        }
 }
+
+
+/*
+ * support function for do_internet_configuration()
+ */
+void get_inet_rec_type(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");
+       sel = intprompt("Which one", 1, 1, 3);
+       switch(sel) {
+               case 1: strcpy(buf, "localhost");
+                       return;
+               case 2: strcpy(buf, "gatewaydomain");
+                       return;
+               case 3: strcpy(buf, "smarthost");
+                       return;
+       }
+}
+
+
+/*
+ * Internet mail configuration
+ */
+void do_internet_configuration(void) {
+       char buf[256];
+       int num_recs = 0;
+       char **recs = NULL;
+       char ch;
+       int badkey;
+       int i, j;
+       int quitting = 0;
+       
+
+       sprintf(buf, "CONF getsys|%s", INTERNETCFG);
+       serv_puts(buf);
+       serv_gets(buf);
+       if (buf[0] == '1') while (serv_gets(buf), strcmp(buf, "000")) {
+               ++num_recs;
+               if (num_recs == 1) recs = malloc(sizeof(char *));
+               else recs = realloc(recs, (sizeof(char *)) * num_recs);
+               recs[num_recs-1] = malloc(256);
+               strcpy(recs[num_recs-1], buf);
+       }
+
+       do {
+               printf("\n");
+               color(BRIGHT_WHITE);
+               printf("### ");
+               printf("                   Host or domain                  ");
+               printf("   Record type      \n");
+               color(DIM_WHITE);
+               printf("--- ");
+               printf("-------------------------------------------------- ");
+               printf("--------------------\n");
+               for (i=0; i<num_recs; ++i) {
+               color(DIM_WHITE);
+               printf("%3d ", i+1);
+               extract(buf, recs[i], 0);
+               color(BRIGHT_CYAN);
+               printf("%-50s ", buf);
+               extract(buf, recs[i], 1);
+               color(BRIGHT_MAGENTA);
+               printf("%-20s\n", buf);
+               color(DIM_WHITE);
+               }
+
+               ch = keymenu("", "<A>dd|<D>elete|<S>ave|<Q>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 host name: ",
+                                       buf, 50);
+                               strcat(buf, "|");
+                               get_inet_rec_type(&buf[strlen(buf)]);
+                               recs[num_recs-1] = strdup(buf);
+                               break;
+                       case 'd':
+                               i = intprompt("Delete which one",
+                                       1, 1, num_recs) - 1;
+                               free(recs[i]);
+                               --num_recs;
+                               for (j=i; j<num_recs; ++j)
+                                       recs[j] = recs[j+1];
+                               break;
+                       case 's':
+                               sprintf(buf, "CONF putsys|%s",
+                                       INTERNETCFG);
+                               serv_puts(buf);
+                               serv_gets(buf);
+                               if (buf[0] == '4') {
+                                       for (i=0; i<num_recs; ++i) {
+                                               serv_puts(recs[i]);
+                                       }
+                                       serv_puts("000");
+                               }
+                               else {
+                                       printf("%s\n", &buf[4]);
+                               }
+                               quitting = 1;
+                               break;
+                       case 'q':
+                               quitting = boolprompt(
+                                       "Quit without saving", 0);
+                               break;
+                       default:
+                               badkey = 1;
+               }
+       } while (quitting == 0);
+
+       if (recs != NULL) {
+               for (i=0; i<num_recs; ++i) free(recs[i]);
+               free(recs);
+       }
+}