Officially declare war on LHFS
[citadel.git] / citadel / server_main.c
index 9bd9be89e8ebfd21468f6bc1a95b2ad5f6a61604..ece0e3cb85e2db1df6e249ed514f1b3b73d9adb2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * citserver's main() function lives here.
  * 
- * Copyright (c) 1987-2019 by the citadel.org team
+ * Copyright (c) 1987-2021 by the citadel.org team
  *
  * This program is open source software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 3.
@@ -93,18 +93,26 @@ int main(int argc, char **argv)
        InitializeMasterTSD();
 
        /* parse command-line arguments */
-       while ((a=getopt(argc, argv, "l:dh:x:t:B:Dru:s:")) != EOF) switch(a) {
+       while ((a=getopt(argc, argv, "cl:dh:x:t:B:Dru:s:")) != EOF) switch(a) {
 
+               // test this binary for compatibility and exit
+               case 'c':
+                       fprintf(stderr, "%s: binary compatibility confirmed\n", argv[0]);
+                       exit(0);
+                       break;
+
+               // identify the desired syslog facility
                case 'l':
                        safestrncpy(facility, optarg, sizeof(facility));
                        syslog_facility = SyslogFacility(facility);
                        break;
 
-               /* run in the background if -d was specified */
+               // run in the background if -d was specified
                case 'd':
                        running_as_daemon = 1;
                        break;
 
+               // specify the data directory
                case 'h':
                        relh = optarg[0] != '/';
                        if (!relh) {
@@ -116,13 +124,17 @@ int main(int argc, char **argv)
                        home=1;
                        break;
 
+               // identify the desired logging severity level
                case 'x':
                        max_log_level = atoi(optarg);
                        break;
 
-               case 't':       /* deprecated */
+               // deprecated
+               case 't':
                        break;
-                case 'B': /* Basesize */
+
+               // basesize (what is this?)
+                case 'B':
                         basesize = atoi(optarg);
                         break;
 
@@ -130,14 +142,13 @@ int main(int argc, char **argv)
                        dbg = 1;
                        break;
 
-               /* -r tells the server not to drop root permissions.
-                * Don't use this unless you know what you're doing.
-                */
+               // -r tells the server not to drop root permissions.
+               // Don't use this unless you know what you're doing.
                case 'r':
                        drop_root_perms = 0;
                        break;
 
-               /* -u tells the server what uid to run under... */
+               // -u tells the server what uid to run under...
                case 'u':
                        u = atoi(optarg);
                        if (u > 0) {
@@ -154,13 +165,13 @@ int main(int argc, char **argv)
                        }
                        break;
 
-               /* -s tells the server to behave differently during sanity checks */
+               // -s tells the server to behave differently during sanity checks
                case 's':
                        sanity_diag_mode = atoi(optarg);
                        break;
 
+               // any other parameter makes it crash and burn
                default:
-               /* any other parameter makes it crash and burn */
                        fprintf(stderr, "citserver: usage: "
                                        "citserver "
                                        "[-l LogFacility] "
@@ -213,7 +224,7 @@ int main(int argc, char **argv)
        syslog(LOG_INFO, " ");
        syslog(LOG_INFO, "*** Citadel server engine ***\n");
        syslog(LOG_INFO, "Version %d (build %s) ***", REV_LEVEL, svn_revision());
-       syslog(LOG_INFO, "Copyright (C) 1987-2019 by the Citadel development team.");
+       syslog(LOG_INFO, "Copyright (C) 1987-2021 by the Citadel development team.");
        syslog(LOG_INFO, " ");
        syslog(LOG_INFO, "This program is open source software: you can redistribute it and/or");
        syslog(LOG_INFO, "modify it under the terms of the GNU General Public License, version 3.");
@@ -225,34 +236,18 @@ int main(int argc, char **argv)
        syslog(LOG_INFO, " ");
        syslog(LOG_INFO, "%s", libcitadel_version_string());
 
-#ifdef HAVE_RUN_DIR
-       /* on some dists rundir gets purged on startup. so we need to recreate it. */
-
-       if (stat(ctdl_run_dir, &filestats) == -1) {
-#ifdef HAVE_GETPWUID_R
-#ifdef SOLARIS_GETPWUID
-               pwp = getpwuid_r(ctdluid, &pw, pwbuf, sizeof(pwbuf));
-#else // SOLARIS_GETPWUID
-               getpwuid_r(ctdluid, &pw, pwbuf, sizeof(pwbuf), &pwp);
-#endif // SOLARIS_GETPWUID
-#else // HAVE_GETPWUID_R
-               pwp = NULL;
-#endif // HAVE_GETPWUID_R
-
-               if ((mkdir(ctdl_run_dir, 0755) != 0) && (errno != EEXIST)) {
-                       syslog(LOG_ERR, "main: unable to create run directory [%s]: %m", ctdl_run_dir);
-               }
+       if ((mkdir(ctdl_run_dir, 0755) != 0) && (errno != EEXIST)) {
+               syslog(LOG_ERR, "main: unable to create run directory [%s]: %m", ctdl_run_dir);
+       }
 
-               if (chown(ctdl_run_dir, ctdluid, (pwp==NULL)?-1:pw.pw_gid) != 0) {
-                       syslog(LOG_ERR, "main: unable to set the access rights for [%s]: %m", ctdl_run_dir);
-               }
+       if (chown(ctdl_run_dir, ctdluid, (pwp==NULL)?-1:pw.pw_gid) != 0) {
+               syslog(LOG_ERR, "main: unable to set the access rights for [%s]: %m", ctdl_run_dir);
        }
-#endif
 
        ctdl_lockfile(1);
        init_sysdep();                                          // Initialize...
        master_startup();                                       // Do non system dependent startup functions
-       check_control();                                        // Check, sanitize, initialize the control record
+       check_control();                                        // Check/sanitize/initialize control record, fix user indexes
        syslog(LOG_INFO, "main: upgrading modules");            // Run any upgrade entry points
        upgrade_modules();
 
@@ -359,6 +354,7 @@ int main(int argc, char **argv)
        int exit_code = master_cleanup(exit_signal);
        ctdl_lockfile(0);
        if (restart_server) {
+               syslog(LOG_INFO, "main:    *** CITADEL SERVER IS RESTARTING ***");
                execv(argv[0], argv);
        }
        return(exit_code);