diff options
Diffstat (limited to 'smtpd/smtpd.c')
-rw-r--r-- | smtpd/smtpd.c | 33 |
1 files changed, 5 insertions, 28 deletions
diff --git a/smtpd/smtpd.c b/smtpd/smtpd.c index 9de53a8c..7874aded 100644 --- a/smtpd/smtpd.c +++ b/smtpd/smtpd.c @@ -589,7 +589,6 @@ main(int argc, char *argv[]) struct event ev_sigchld; struct event ev_sighup; struct timeval tv; - struct passwd *pwq; env = &smtpd; @@ -716,31 +715,6 @@ main(int argc, char *argv[]) if (geteuid()) errx(1, "need root privileges"); - if ((env->sc_pw = getpwnam(SMTPD_USER)) == NULL) - errx(1, "unknown user %s", SMTPD_USER); - if ((env->sc_pw = pw_dup(env->sc_pw)) == NULL) - err(1, NULL); - - env->sc_pwqueue = getpwnam(SMTPD_QUEUE_USER); - if (env->sc_pwqueue) - pwq = env->sc_pwqueue = pw_dup(env->sc_pwqueue); - else - pwq = env->sc_pwqueue = pw_dup(env->sc_pw); - if (env->sc_pwqueue == NULL) - err(1, NULL); - - if (ckdir(PATH_SPOOL, 0711, 0, 0, 1) == 0) - errx(1, "error in spool directory setup"); - if (ckdir(PATH_SPOOL PATH_OFFLINE, 01777, 0, 0, 1) == 0) - errx(1, "error in offline directory setup"); - if (ckdir(PATH_SPOOL PATH_PURGE, 0700, pwq->pw_uid, 0, 1) == 0) - errx(1, "error in purge directory setup"); - - mvpurge(PATH_SPOOL PATH_TEMPORARY, PATH_SPOOL PATH_PURGE); - - if (ckdir(PATH_SPOOL PATH_TEMPORARY, 0700, pwq->pw_uid, 0, 1) == 0) - errx(1, "error in purge directory setup"); - if (!queue_init(backend_queue, 1)) errx(1, "could not initialize queue backend"); @@ -926,6 +900,7 @@ child_add(pid_t pid, int type, const char *title) static void purge_task(int fd, short ev, void *arg) { + struct passwd *pw; DIR *d; int n; uid_t uid; @@ -947,12 +922,14 @@ purge_task(int fd, short ev, void *arg) log_warn("warn: purge_task: fork"); break; case 0: + if ((pw = getpwnam(SMTPD_USER)) == NULL) + fatalx("unknown user " SMTPD_USER); if (chroot(PATH_SPOOL PATH_PURGE) == -1) fatal("smtpd: chroot"); if (chdir("/") == -1) fatal("smtpd: chdir"); - uid = env->sc_pw->pw_uid; - gid = env->sc_pw->pw_gid; + uid = pw->pw_uid; + gid = pw->pw_gid; if (setgroups(1, &gid) || setresgid(gid, gid, gid) || setresuid(uid, uid, uid)) |