#include "user_ops.h"
#include "housekeeping.h"
#include "svn_revision.h"
-#include "citadel_dirs.c"
+#include "citadel_dirs.h"
+
+#include "context.h"
#include "modules_init.h"
#include "ecrash.h"
const char *CitadelServiceTCP="citadel-TCP";
-extern struct CitContext masterCC;
-
void go_threading(void);
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
*/
running_as_daemon = 1;
}
+ /* run a few stats if -s was specified */
+ else if (!strncmp(argv[a], "-s", 2)) {
+ statcount = atoi(&argv[a][2]);
+ }
+
/* -x specifies the desired logging level */
else if (!strncmp(argv[a], "-x", 2)) {
verbosity = atoi(&argv[a][2]);
else
safestrncpy(relhome, &argv[a][2],
sizeof relhome);
- home_specified = 1;
home=1;
}
CtdlLogPrintf(CTDL_EMERG, "citserver: usage: "
"citserver "
"[-lLogFacility] "
- "[-d] [-D] "
+ "[-d] [-D] [-s]"
" [-tTraceFile]"
" [-xLogLevel] [-hHomeDir]\n");
exit(1);
get_config();
config.c_ipgm_secret = rand();
+ /* get_control() MUST MUST MUST be called BEFORE the databases are opened!! */
CtdlLogPrintf(CTDL_INFO, "Acquiring control record\n");
get_control();
*/
master_startup();
+ /*
+ * Check that the control record is correct and place sensible values if it isn't
+ */
+ check_control();
-/*
- * Initialise the user 0 to have a name. It would be nice to do it in InitializeMasterCC
- * since it is contained within the MasterCC but we can't because the DB isn't available
- * at that time so we do it seperate.
+ /*
+ * Run any upgrade entry points
+ */
+ CtdlLogPrintf(CTDL_INFO, "Upgrading modules.\n");
+ upgrade_modules();
+
+/**
+ * Load the user for the masterCC or create them if they don't exist
*/
- /** Give user 0 a name and create them if necessary */
- if (getuser(&masterCC.user, "Citadel"))
+ if (CtdlGetUser(&masterCC.user, "SYS_Citadel"))
{
- getuserbynumber(&masterCC.user, 0);
- strcpy (masterCC.user.fullname, "Citadel");
- putuser(&masterCC.user);
+ /** User doesn't exist. We can't use create user here as the user number needs to be 0 */
+ strcpy (masterCC.user.fullname, "SYS_Citadel") ;
+ CtdlPutUser(&masterCC.user);
+ CtdlGetUser(&masterCC.user, "SYS_Citadel"); /** Just to be safe */
}
/*
CitadelServiceTCP);
- /*
- * Run any upgrade entry points
- */
- CtdlLogPrintf(CTDL_INFO, "Upgrading modules.\n");
- upgrade_modules();
/*
start_chkpwd_daemon();
}
+
+ /*
+ * check, whether we're fired up another time after a crash.
+ * if, post an aide message, so the admin has a chance to react.
+ */
+ checkcrash ();
+
+
/*
* Now that we've bound the sockets, change to the Citadel user id and its
* corresponding group ids