summaryrefslogtreecommitdiffstats
path: root/usr.sbin/smtpd/queue_backend.c
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2013-07-19 11:14:08 +0000
committereric <eric@openbsd.org>2013-07-19 11:14:08 +0000
commit11d04e02dd0ded9fe216e260fb9ae0ed84198b9c (patch)
treec78bf14ba2c09ce0b231495e3398c2cde15163b2 /usr.sbin/smtpd/queue_backend.c
parentunused variable (diff)
downloadwireguard-openbsd-11d04e02dd0ded9fe216e260fb9ae0ed84198b9c.tar.xz
wireguard-openbsd-11d04e02dd0ded9fe216e260fb9ae0ed84198b9c.zip
Get rid of env->sc_pw and env->sc_pwqueue. Early queue initialization
now happens in queue_init(), and backends take the queue passwd as parameter in their init function. Remove useless SMTPD_FILTER_USER while there.
Diffstat (limited to 'usr.sbin/smtpd/queue_backend.c')
-rw-r--r--usr.sbin/smtpd/queue_backend.c28
1 files changed, 25 insertions, 3 deletions
diff --git a/usr.sbin/smtpd/queue_backend.c b/usr.sbin/smtpd/queue_backend.c
index 5fc1cd1994d..bed293ef237 100644
--- a/usr.sbin/smtpd/queue_backend.c
+++ b/usr.sbin/smtpd/queue_backend.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: queue_backend.c,v 1.44 2013/05/24 17:03:14 eric Exp $ */
+/* $OpenBSD: queue_backend.c,v 1.45 2013/07/19 11:14:08 eric Exp $ */
/*
* Copyright (c) 2011 Gilles Chehade <gilles@poolp.org>
@@ -23,6 +23,7 @@
#include <sys/stat.h>
#include <ctype.h>
+#include <err.h>
#include <errno.h>
#include <event.h>
#include <fcntl.h>
@@ -92,7 +93,14 @@ queue_message_incoming_path(uint32_t msgid, char *buf, size_t len)
int
queue_init(const char *name, int server)
{
- int r;
+ struct passwd *pwq;
+ int r;
+
+ pwq = getpwnam(SMTPD_QUEUE_USER);
+ if (pwq == NULL)
+ pwq = getpwnam(SMTPD_USER);
+ if (pwq == NULL)
+ errx(1, "unknown user %s", SMTPD_USER);
if (!strcmp(name, "fs"))
backend = &queue_backend_fs;
@@ -106,7 +114,21 @@ queue_init(const char *name, int server)
return (0);
}
- r = backend->init(server);
+ if (server) {
+ 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");
+ }
+
+ r = backend->init(pwq, server);
log_trace(TRACE_QUEUE, "queue-backend: queue_init(%i) -> %i", server, r);