]> code.citadel.org Git - citadel.git/blobdiff - citadel/routines2.c
fix build for Solaris
[citadel.git] / citadel / routines2.c
index fbfeb4e6a8ad7af6c8cd44f76b79daa01868c585..374464cbbc91c95579ad9b7f9faa3f8c9374a357 100644 (file)
@@ -29,7 +29,6 @@
 
 #include <signal.h>
 #include <pwd.h>
-#include <setjmp.h>
 #include <errno.h>
 #include <stdarg.h>
 #include "citadel.h"
 #endif
 #include "screen.h"
 
+/* work around solaris include files */
+#ifdef reg
+#undef reg
+#endif
+
 extern char temp[];
 extern char tempdir[];
 extern char *axdefs[7];
@@ -190,14 +194,18 @@ void updatels(CtdlIPC *ipc)
        int r;                          /* IPC response code */
 
        if (rc_alt_semantics) {
-               if (maxmsgnum == highest_msg_read == 0) {
-                       /* err_printf("maxmsgnum == highest_msg_read == 0\n"); */
+               if (maxmsgnum == 0 && highest_msg_read == 0) {
                        return;
                }
                r = CtdlIPCSetLastRead(ipc, (maxmsgnum > highest_msg_read) ?
                                 maxmsgnum : highest_msg_read, buf);
        } else {
-               r = CtdlIPCSetLastRead(ipc, 0, buf);
+               r = CtdlIPCSetLastRead(ipc, (maxmsgnum > highest_msg_read) ?
+                                maxmsgnum : highest_msg_read, buf);
+/*             r = CtdlIPCSetLastRead(ipc, maxmsgnum, buf); */
+/* This is a quick-and-dirty fix to all msgs becoming new in Mail>.
+ * It will need to be rethought when messages.c is rewritten.
+ */
        }
        if (r / 100 != 2)
                scr_printf("%s\n", buf);
@@ -396,17 +404,19 @@ void upload(CtdlIPC *ipc, int c)
 }
 
 /* 
- * validate a user
+ * validate a user (returns 0 for successful validation, nonzero if quitting)
  */
-void val_user(CtdlIPC *ipc, char *user, int do_validate)
+int val_user(CtdlIPC *ipc, char *user, int do_validate)
 {
        int a;
        char cmd[SIZ];
        char buf[SIZ];
        char *resp = NULL;
        int ax = 0;
+       char answer[2];
        int r;                          /* IPC response code */
 
+       scr_printf("\n");
        r = CtdlIPCGetUserRegistration(ipc, user, &resp, cmd);
        if (r / 100 == 1) {
                a = 0;
@@ -445,12 +455,31 @@ void val_user(CtdlIPC *ipc, char *user, int do_validate)
 
        if (do_validate) {
                /* now set the access level */
-               ax = intprompt("Access level", ax, 0, 6);
-               r = CtdlIPCValidateUser(ipc, user, ax, cmd);
-               if (r / 100 != 2)
-                       scr_printf("%s\n", cmd);
+               while(1) {
+                       sprintf(answer, "%d", ax);
+                       strprompt("New access level (? for help, q to quit)",
+                               answer, 1);
+                       if ((answer[0] >= '0') && (answer[0] <= '6')) {
+                               ax = atoi(answer);
+                               r = CtdlIPCValidateUser(ipc, user, ax, cmd);
+                               if (r / 100 != 2)
+                               scr_printf("%s\n\n", cmd);
+                               return(0);
+                       }
+                       if (tolower(answer[0]) == 'q') {
+                               scr_printf("*** Aborted.\n\n");
+                               return(1);
+                       }
+                       if (answer[0] == '?') {
+                               scr_printf("Available access levels:\n");
+                               for (a=0; a<7; ++a) {
+                                       scr_printf("%d - %s\n",
+                                               a, axdefs[a]);
+                               }
+                       }
+               }
        }
-       scr_printf("\n");
+       return(0);
 }
 
 
@@ -469,7 +498,7 @@ void validate(CtdlIPC *ipc)
                        scr_printf("%s\n", cmd);
                if (r / 100 == 3) {
                        extract(buf, cmd, 0);
-                       val_user(ipc, buf, 1);
+                       if (val_user(ipc, buf, 1) != 0) finished = 1;
                }
        } while (finished == 0);
 }
@@ -675,7 +704,7 @@ void do_system_configuration(CtdlIPC *ipc)
        snprintf(sc[26], sizeof sc[26], "%d", (boolprompt(
              "Allow Aides to Zap (forget) rooms",
                                                     atoi(&sc[26][0]))));
-       snprintf(sc[30], sizeof sc[29], "%d", (boolprompt(
+       snprintf(sc[30], sizeof sc[30], "%d", (boolprompt(
              "Allow system Aides access to user mailboxes",
                                                     atoi(&sc[30][0]))));
 
@@ -703,9 +732,19 @@ void do_system_configuration(CtdlIPC *ipc)
        */
 
        strprompt("How often to run network jobs (in seconds)", &sc[28][0], 5);
-       strprompt("SMTP server port (-1 to disable)", &sc[24][0], 5);
        strprompt("POP3 server port (-1 to disable)", &sc[23][0], 5);
        strprompt("IMAP server port (-1 to disable)", &sc[27][0], 5);
+       strprompt("SMTP server port (-1 to disable)", &sc[24][0], 5);
+
+       /* This logic flips the question around, because it's one of those
+        * situations where 0=yes and 1=no
+        */
+       a = atoi(sc[25]);
+       a = (a ? 0 : 1);
+       a = boolprompt("Correct forged From: lines during authenticated SMTP",
+               a);
+       a = (a ? 0 : 1);
+       snprintf(sc[25], sizeof sc[25], "%d", a);
 
        /* Expiry settings */
        strprompt("Default user purge time (days)", &sc[16][0], 5);
@@ -876,7 +915,7 @@ void do_internet_configuration(CtdlIPC *ipc)
                                        err_printf("Can't save config - out of memory!\n");
                                        logoff(ipc, 1);
                                }
-                               for (i = 0; i < num_recs; i++) {
+                               if (num_recs) for (i = 0; i < num_recs; i++) {
                                        strcat(resp, recs[i]);
                                        strcat(resp, "\n");
                                }