]> andersk Git - moira.git/blobdiff - server/mr_main.c
added passwd.sh
[moira.git] / server / mr_main.c
index 9e589be37f2f35ea53c38d0eda8ec3d000f1fcf8..4a9c2ceda76dd729fab5230d667f2fadb380952d 100644 (file)
@@ -45,7 +45,6 @@ extern char buf1[BUFSIZ];
 extern char *takedown;
 extern int errno;
 extern FILE *journal;
-#define JOURNAL "/u1/sms/journal"
 
 extern char *malloc();
 extern int free();
@@ -107,19 +106,24 @@ main(argc, argv)
        gdb_debug(0); /* this can be patched, if necessary, to enable */
                      /* GDB level debugging .. */
        krb_realm = malloc(REALM_SZ);
-       get_krbrlm(krb_realm, 1);
+       krb_get_lrealm(krb_realm, 1);
        
        /*
-        * Database initialization.
+        * Database initialization.  Only init if database should be open.
         */
 
-       if ((status = sms_open_database()) != 0) {
+       if (stat(SMS_MOTD_FILE, &stbuf) != 0) {
+           if ((status = sms_open_database()) != 0) {
                com_err(whoami, status, " when trying to open database.");
                exit(1);
+           }
+           sanity_check_database();
+       } else {
+           dormant = ASLEEP;
+           com_err(whoami, 0, "sleeping, not opening database");
        }
        
        sanity_check_queries();
-       sanity_check_database();
 
        /*
         * Set up client array handler.
@@ -127,21 +131,7 @@ main(argc, argv)
        nclients = 0;
        clients = (client **) malloc(0);
        
-       /*
-        * Signal handlers
-        *      There should probably be a few more of these. This is
-        *      duplicated on the next page, be sure to also add any
-        *      additional handlers there.
-        */
-       
-       if ((((int)signal (SIGTERM, sigshut)) < 0) ||
-           (((int)signal (SIGCHLD, reapchild)) < 0) ||
-           (((int)signal (SIGUSR1, godormant)) < 0) ||
-           (((int)signal (SIGUSR2, gowakeup)) < 0) ||
-           (((int)signal (SIGHUP, sigshut)) < 0)) {
-               com_err(whoami, errno, " Unable to establish signal handlers.");
-               exit(1);
-       }
+       sms_setup_signals();
        
        journal = fopen(JOURNAL, "a");
        if (journal == NULL) {
@@ -162,7 +152,10 @@ main(argc, argv)
        
        com_err(whoami, 0, "started (pid %d)", getpid());
        com_err(whoami, 0, rcsid_sms_main_c);
-       send_zgram("SMS", "server started");
+       if (dormant != ASLEEP)
+         send_zgram("SMS", "server started");
+       else
+         send_zgram("SMS", "server started, but database closed");
 
        /*
         * Run until shut down.
@@ -178,20 +171,13 @@ main(argc, argv)
                if (dormant == SLEEPY) {
                    sms_close_database();
                    com_err(whoami, 0, "database closed");
+                   sms_setup_signals();
                    send_zgram("SMS", "database closed");
                    dormant = ASLEEP;
                } else if (dormant == GROGGY) {
                    sms_open_database();
                    com_err(whoami, 0, "database open");
-                   if ((((int)signal (SIGTERM, sigshut)) < 0) ||
-                       (((int)signal (SIGCHLD, reapchild)) < 0) ||
-                       (((int)signal (SIGUSR1, godormant)) < 0) ||
-                       (((int)signal (SIGUSR2, gowakeup)) < 0) ||
-                       (((int)signal (SIGHUP, sigshut)) < 0)) {
-                       com_err(whoami, errno,
-                               " Unable to reestablish signal handlers.");
-                       exit(1);
-                   }
+                   sms_setup_signals();
                    send_zgram("SMS", "database open again");
                    dormant = AWAKE;
                }
@@ -202,7 +188,8 @@ main(argc, argv)
                                       (fd_set *)NULL, (struct timeval *)NULL);
 
                if (status == -1) {
-                       com_err(whoami, errno, " error from op_select");
+                       if (errno != EINTR)
+                         com_err(whoami, errno, " error from op_select");
                        continue;
                } else if (status != -2) {
                        com_err(whoami, 0, " wrong return from op_select_any");
@@ -340,7 +327,7 @@ new_connection()
        cp->con = newconn;
        cp->id = counter++;
        cp->args = NULL;
-       cp->clname = NULL;
+       cp->clname[0] = NULL;
        cp->reply.sms_argv = NULL;
        cp->first = NULL;
        cp->last = NULL;
@@ -489,12 +476,8 @@ void reapchild()
     union wait status;
     int pid;
 
-    if (takedown || dormant == ASLEEP)
-      return;
     while ((pid = wait3(&status, WNOHANG, (struct rusage *)0)) > 0) {
-       if  (status.w_termsig == 0 && status.w_retcode == 0)
-         com_err(whoami, 0, "child exited successfully");
-       else
+       if  (!takedown && (status.w_termsig != 0 || status.w_retcode != 0))
          com_err(whoami, 0, "%d: child exits with signal %d status %d",
                  pid, status.w_termsig, status.w_retcode);
     }
@@ -533,3 +516,18 @@ void gowakeup()
     }
     dormant = GROGGY;
 }
+
+       
+sms_setup_signals()
+{
+    /* There should probably be a few more of these. */
+       
+    if ((((int)signal (SIGTERM, sigshut)) < 0) ||
+       (((int)signal (SIGCHLD, reapchild)) < 0) ||
+       (((int)signal (SIGUSR1, godormant)) < 0) ||
+       (((int)signal (SIGUSR2, gowakeup)) < 0) ||
+       (((int)signal (SIGHUP, sigshut)) < 0)) {
+       com_err(whoami, errno, " Unable to establish signal handlers.");
+       exit(1);
+    }
+}
This page took 0.048904 seconds and 4 git commands to generate.