#include "config.h"
#include "control.h"
#include "database.h"
+#include "user_ops.h"
#include "housekeeping.h"
#include "tools.h"
#include "citadel_dirs.c"
+#include "modules_init.h"
+
+
#ifdef HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
{
char facility[32];
int a, i; /* General-purpose variables */
- struct passwd *pw;
+ struct passwd pw, *pwp = NULL;
+ char pwbuf[SIZ];
int drop_root_perms = 1;
size_t size;
int relh=0;
* facilities when we need to...
*/
if (enable_syslog) {
- if (running_as_daemon) {
- openlog("citadel", LOG_NDELAY, 0);
- }
- else {
- openlog("citadel", LOG_PERROR|LOG_NDELAY, 0);
- }
+ openlog("citadel", LOG_NDELAY, 0);
setlogmask(LOG_UPTO(verbosity));
}
/* on some dists rundir gets purged on startup. so we need to recreate it. */
if (stat(ctdl_run_dir, &filestats)==-1){
- pw=getpwuid(config.c_ctdluid);
+#ifdef SOLARIS_GETPWUID
+ pwp = getpwuid_r(config.c_ctdluid, &pw, pwbuf, sizeof(pwbuf));
+#else
+ getpwuid_r(config.c_ctdluid, &pw, pwbuf, sizeof(pwbuf), &pwp);
+#endif
mkdir(ctdl_run_dir, 0755);
- chown(ctdl_run_dir, config.c_ctdluid, (pw==NULL)?-1:pw->pw_gid);
-
+ chown(ctdl_run_dir, config.c_ctdluid, (pwp==NULL)?-1:pw.pw_gid);
}
*/
lprintf(CTDL_INFO, "Initializing server extensions\n");
size = strlen(ctdl_home_directory) + 9;
+
+/*
initialize_server_extensions();
+*/
+
+ initialise_modules();
+
+
+
+ /*
+ * If we need host auth, start our chkpwd daemon.
+ */
+ if (config.c_auth_mode == 1) {
+ start_chkpwd_daemon();
+ }
/*
* Now that we've bound the sockets, change to the Citadel user id and its
* corresponding group ids
*/
if (drop_root_perms) {
- if ((pw = getpwuid(CTDLUID)) == NULL)
+ cdb_chmod_data(); /* make sure we own our data files */
+
+#ifdef SOLARIS_GETPWUID
+ pwp = getpwuid_r(config.c_ctdluid, &pw, pwbuf, sizeof(pwbuf));
+#else
+ getpwuid_r(config.c_ctdluid, &pw, pwbuf, sizeof(pwbuf), &pwp);
+#endif
+ if (pwp == NULL)
lprintf(CTDL_CRIT, "WARNING: getpwuid(%ld): %s\n"
"Group IDs will be incorrect.\n", (long)CTDLUID,
strerror(errno));
else {
- initgroups(pw->pw_name, pw->pw_gid);
- if (setgid(pw->pw_gid))
- lprintf(CTDL_CRIT, "setgid(%ld): %s\n", (long)pw->pw_gid,
+ initgroups(pw.pw_name, pw.pw_gid);
+ if (setgid(pw.pw_gid))
+ lprintf(CTDL_CRIT, "setgid(%ld): %s\n", (long)pw.pw_gid,
strerror(errno));
}
lprintf(CTDL_INFO, "Changing uid to %ld\n", (long)CTDLUID);