]> code.citadel.org Git - citadel.git/blobdiff - citadel/citadel.c
* support autoconf 2.53
[citadel.git] / citadel / citadel.c
index 4ce0f8ec13d660f2c27b5c2af1f92dadbb4b793f..09961d8ebbf31df8eb48ef653693096a90f1bc43 100644 (file)
@@ -689,13 +689,10 @@ void check_screen_dims(void)
                unsigned short ypixels;         /* pixels */
        } xwinsz;
 
-       if (scr_set_windowsize())
-               return;
-
        if (have_xterm) {       /* dynamically size screen if on an xterm */
                if (ioctl(0, TIOCGWINSZ, &xwinsz) == 0) {
                        if (xwinsz.height)
-                               screenheight = (int) xwinsz.height;
+                               screenheight = is_curses_enabled() ? (int)xwinsz.height - 1 : (int) xwinsz.height;
                        if (xwinsz.width)
                                screenwidth = (int) xwinsz.width;
                }
@@ -802,6 +799,13 @@ void who_is_online(int longlist)
        time_t timenow = 0;
        time_t idletime, idlehours, idlemins, idlesecs;
        int last_session = (-1);
+    int skipidle = 0;
+    
+    if (longlist == 2)
+      {
+        longlist = 0;
+        skipidle = 1;
+      }
 
        serv_puts("TIME");
        serv_gets(tbuf);
@@ -822,6 +826,7 @@ void who_is_online(int longlist)
        serv_gets(buf);
        if (buf[0] == '1') {
                while (serv_gets(buf), strcmp(buf, "000")) {
+               int isidle = 0;
                        extract(username, buf, 1);
                        extract(roomname, buf, 2);
                        extract(fromhost, buf, 3);
@@ -838,6 +843,8 @@ void who_is_online(int longlist)
                                        strcat(roomname, " ");
                                }
                                strcpy(&roomname[14], "[idle]");
+                       if (skipidle)
+                  isidle = 1;
                        }
 
                        if (longlist) {
@@ -867,24 +874,26 @@ void who_is_online(int longlist)
                                pprintf("\n");
 
                        } else {
-                               if (extract_int(buf, 0) == last_session) {
-                                       pprintf("        ");
-                               } else {
-                                       color(BRIGHT_MAGENTA);
-                                       pprintf("%-3s ", flags);
-                                       color(DIM_WHITE);
-                                       pprintf("%-3d ", extract_int(buf, 0));
-                               }
-                               last_session = extract_int(buf, 0);
-                               color(BRIGHT_CYAN);
-                               pprintf("%-25s ", username);
-                               color(BRIGHT_MAGENTA);
-                               roomname[20] = 0;
-                               pprintf("%-20s ", roomname);
-                               color(BRIGHT_CYAN);
-                               fromhost[24] = '\0';
-                               pprintf("%-24s\n", fromhost);
-                               color(DIM_WHITE);
+                   if (isidle == 0) {
+                               if (extract_int(buf, 0) == last_session) {
+                                       pprintf("        ");
+                               } else {
+                                       color(BRIGHT_MAGENTA);
+                                       pprintf("%-3s ", flags);
+                                       color(DIM_WHITE);
+                                       pprintf("%-3d ", extract_int(buf, 0));
+                               }
+                               last_session = extract_int(buf, 0);
+                               color(BRIGHT_CYAN);
+                               pprintf("%-25s ", username);
+                               color(BRIGHT_MAGENTA);
+                               roomname[20] = 0;
+                               pprintf("%-20s ", roomname);
+                               color(BRIGHT_CYAN);
+                               fromhost[24] = '\0';
+                               pprintf("%-24s\n", fromhost);
+                               color(DIM_WHITE);
+                       }
                        }
                }
        }
@@ -909,6 +918,11 @@ int shift(int argc, char **argv, int start, int count) {
        return argc;
 }
 
+static void statusHook(char *s) {
+       sln_printf(s);
+       sln_flush();
+}
+
 /*
  * main
  */
@@ -923,6 +937,10 @@ int main(int argc, char **argv)
        char hexstring[MD5_HEXSTRING_SIZE];
        int stored_password = 0;
        char password[SIZ];
+
+       setIPCDeathHook(screen_delete);
+       setIPCErrorPrintf(err_printf);
+       setCryptoStatusHook(statusHook);
        
        /* Permissions sanity check - don't run citadel setuid/setgid */
        if (getuid() != geteuid()) {
@@ -938,9 +956,14 @@ int main(int argc, char **argv)
        sttybbs(SB_NO_INTR);    /* Install the new ones */
        signal(SIGHUP, dropcarr);       /* Cleanup gracefully if carrier is dropped */
        signal(SIGTERM, dropcarr);      /* Cleanup gracefully if terminated */
-       signal(SIGCONT, catch_sigcont);         /* Catch SIGCONT so we can reset terminal */
+       signal(SIGCONT, catch_sigcont); /* Catch SIGCONT so we can reset terminal */
+#ifdef SIGWINCH
+       signal(SIGWINCH, scr_winch);    /* Window resize signal */
+#endif
 
+#ifdef HAVE_OPENSSL
        arg_encrypt = RC_DEFAULT;
+#endif
 #ifdef HAVE_CURSES_H
        arg_screen = RC_DEFAULT;
 #endif
@@ -955,12 +978,19 @@ int main(int argc, char **argv)
                        argc = shift(argc, argv, a, 2);
                }
                if (!strcmp(argv[a], "-x")) {
+#ifdef HAVE_OPENSSL
                        arg_encrypt = RC_NO;
+#endif
                        argc = shift(argc, argv, a, 1);
                }
                if (!strcmp(argv[a], "-X")) {
+#ifdef HAVE_OPENSSL
                        arg_encrypt = RC_YES;
-                       argc = shift(argc, argv, a, 1);
+                        argc = shift(argc, argv, a, 1);
+#else
+                       fprintf(stderr, "Not compiled with encryption support");
+                       return 1;
+#endif
                }
                if (!strcmp(argv[a], "-s")) {
 #ifdef HAVE_CURSES_H
@@ -1070,7 +1100,7 @@ GSTA:     /* See if we have a username and password on disk */
                        serv_gets(aaa);
                        if (nonce[0])
                        {
-                               sprintf(aaa, "PAS2 %s", make_apop_string(password, nonce, hexstring));
+                               snprintf(aaa, sizeof aaa, "PAS2 %s", make_apop_string(password, nonce, hexstring, sizeof hexstring));
                        }
                        else    /* Else no APOP */
                        {
@@ -1128,11 +1158,11 @@ GSTA:   /* See if we have a username and password on disk */
 
        if (nonce[0])
        {
-               sprintf(aaa, "PAS2 %s", make_apop_string(password, nonce, hexstring));
+               snprintf(aaa, sizeof aaa, "PAS2 %s", make_apop_string(password, nonce, hexstring, sizeof hexstring));
        }
        else    /* Else no APOP */
        {
-                       snprintf(aaa, sizeof(aaa)-1, "PASS %s", password);
+               snprintf(aaa, sizeof aaa, "PASS %s", password);
        }
        
        serv_puts(aaa);
@@ -1525,6 +1555,10 @@ PWOK:
                                do_ignet_configuration();
                                break;
 
+                       case 92:
+                               do_filterlist_configuration();
+                               break;
+
                        case 6:
                                if (rc_alt_semantics)
                                        updatelsa();
@@ -1558,6 +1592,10 @@ PWOK:
                                who_is_online(1);
                                break;
 
+            case 91:
+                who_is_online(2);
+                break;
+                
                        case 80:
                                do_system_configuration();
                                break;