]> code.citadel.org Git - citadel.git/blobdiff - citadel/server_main.c
Began removing $Id$ tags. This will be an ongoing process.
[citadel.git] / citadel / server_main.c
index 66093245cb933332acf6f1a2c30c67a9ec41960c..d4558f86d5299c3061406adbe70a3d869d474ceb 100644 (file)
@@ -1,7 +1,21 @@
 /*
  * citserver's main() function lives here.
+ * 
+ * Copyright (c) 1987-2010 by the citadel.org team
  *
- * $Id$
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #include "sysdep.h"
@@ -90,6 +104,8 @@ int main(int argc, char **argv)
        int relh=0;
        int home=0;
        int dbg=0;
+       int have_log=0;
+       int have_minus_x=0;
        char relhome[PATH_MAX]="";
        char ctdldir[PATH_MAX]=CTDLDIR;
 #ifdef HAVE_RUN_DIR
@@ -99,6 +115,13 @@ int main(int argc, char **argv)
        eCrashParameters params;
 //     eCrashSymbolTable symbol_table;
 #endif
+
+#ifdef HAVE_GC
+       GC_INIT();
+       GC_find_leak = 1;
+#endif
+
+
        /* initialise semaphores here. Patch by Matt and davew
         * its called here as they are needed by CtdlLogPrintf for thread safety
         */
@@ -129,6 +152,7 @@ int main(int argc, char **argv)
                /* -x specifies the desired logging level */
                else if (!strncmp(argv[a], "-x", 2)) {
                        verbosity = atoi(&argv[a][2]);
+                       have_minus_x = 1;
                }
 
                else if (!strncmp(argv[a], "-h", 2)) {
@@ -142,7 +166,15 @@ int main(int argc, char **argv)
                }
 
                else if (!strncmp(argv[a], "-t", 2)) {
-                       freopen(&argv[a][2], "w", stderr);
+                       if (freopen(&argv[a][2], "w", stderr) != stderr)
+                       {
+                               CtdlLogPrintf(CTDL_EMERG, 
+                                             "unable to open your trace log [%s]: %s", 
+                                             &argv[a][2], 
+                                             strerror(errno));
+                               exit(1);
+                       }
+                       have_log = 1;
                }
 
                else if (!strncmp(argv[a], "-D", 2)) {
@@ -168,6 +200,9 @@ int main(int argc, char **argv)
 
        }
 
+       if (have_minus_x && running_as_daemon && have_log)
+               print_to_logfile = 1;
+
        calc_dirs_n_files(relh, home, relhome, ctdldir, dbg);
        /* daemonize, if we were asked to */
        if (running_as_daemon) {
@@ -207,7 +242,7 @@ int main(int argc, char **argv)
        CtdlLogPrintf(CTDL_NOTICE,
                "*** Citadel server engine v%d.%02d (build %s) ***\n",
                (REV_LEVEL/100), (REV_LEVEL%100), svn_revision());
-       CtdlLogPrintf(CTDL_NOTICE, "Copyright (C) 1987-2008 by the Citadel development team.\n");
+       CtdlLogPrintf(CTDL_NOTICE, "Copyright (C) 1987-2010 by the Citadel development team.\n");
        CtdlLogPrintf(CTDL_NOTICE, "This program is distributed under the terms of the GNU "
                                        "General Public License.\n");
        CtdlLogPrintf(CTDL_NOTICE, "\n");
@@ -238,8 +273,16 @@ int main(int argc, char **argv)
 #else // HAVE_GETPWUID_R
                pwp = NULL;
 #endif // HAVE_GETPWUID_R
-               mkdir(ctdl_run_dir, 0755);
-               chown(ctdl_run_dir, config.c_ctdluid, (pwp==NULL)?-1:pw.pw_gid);
+
+               if ((mkdir(ctdl_run_dir, 0755) != 0) && (errno != EEXIST))
+                       CtdlLogPrintf(CTDL_EMERG, 
+                                     "unable to create run directory [%s]: %s", 
+                                     ctdl_run_dir, strerror(errno));
+
+               if (chown(ctdl_run_dir, config.c_ctdluid, (pwp==NULL)?-1:pw.pw_gid) != 0)
+                       CtdlLogPrintf(CTDL_EMERG, 
+                                     "unable to set the access rights for [%s]: %s", 
+                                     ctdl_run_dir, strerror(errno));
        }