summaryrefslogtreecommitdiffstats
path: root/usr.sbin/smtpd/queue_fsqueue.c
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2012-01-11 17:46:36 +0000
committereric <eric@openbsd.org>2012-01-11 17:46:36 +0000
commit591aa05bcf29157ab2fbe85f77273fb04b0ff699 (patch)
tree007b61f0369a8161caad29f2ea034a52ab314655 /usr.sbin/smtpd/queue_fsqueue.c
parentPut an splsoftassert(IPL_SOFTNET) into in_pcbdetach(). (diff)
downloadwireguard-openbsd-591aa05bcf29157ab2fbe85f77273fb04b0ff699.tar.xz
wireguard-openbsd-591aa05bcf29157ab2fbe85f77273fb04b0ff699.zip
Simplify runner/queue by getting rid of Q_PURGE. Instead, let smtpd
periodically clear the purge/ directory. At init time, the fsqueue backend simply moves the existing incoming/ dir in purge/ to discard aborted sessions. ok gilles@ chl@
Diffstat (limited to 'usr.sbin/smtpd/queue_fsqueue.c')
-rw-r--r--usr.sbin/smtpd/queue_fsqueue.c27
1 files changed, 7 insertions, 20 deletions
diff --git a/usr.sbin/smtpd/queue_fsqueue.c b/usr.sbin/smtpd/queue_fsqueue.c
index 75c3c76a8ee..a94380eb2f3 100644
--- a/usr.sbin/smtpd/queue_fsqueue.c
+++ b/usr.sbin/smtpd/queue_fsqueue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: queue_fsqueue.c,v 1.25 2011/12/27 17:13:05 eric Exp $ */
+/* $OpenBSD: queue_fsqueue.c,v 1.26 2012/01/11 17:46:36 eric Exp $ */
/*
* Copyright (c) 2011 Gilles Chehade <gilles@openbsd.org>
@@ -69,7 +69,6 @@ void fsqueue_qwalk_close(void *);
#define PATH_INCOMING "/incoming"
#define PATH_QUEUE "/queue"
-#define PATH_PURGE "/purge"
#define PATH_CORRUPT "/corrupt"
#define PATH_MESSAGE "/message"
@@ -95,9 +94,6 @@ fsqueue_getpath(enum queue_kind kind)
case Q_QUEUE:
return (PATH_QUEUE);
- case Q_PURGE:
- return (PATH_PURGE);
-
case Q_CORRUPT:
return (PATH_CORRUPT);
@@ -399,11 +395,6 @@ fsqueue_message_delete(enum queue_kind qkind, u_int32_t msgid)
msgid & 0xfff, msgid))
fatal("fsqueue_message_delete: snprintf");
}
- else if (qkind == Q_PURGE) {
- if (! bsnprintf(rootdir, sizeof(rootdir), "%s/%08x", PATH_PURGE,
- msgid))
- fatal("fsqueue_message_delete: snprintf");
- }
if (! bsnprintf(evpdir, sizeof(evpdir), "%s%s", rootdir,
PATH_ENVELOPES))
@@ -456,18 +447,13 @@ static int
fsqueue_message_purge(enum queue_kind qkind, u_int32_t msgid)
{
char rootdir[MAXPATHLEN];
- char purgedir[MAXPATHLEN];
if (! bsnprintf(rootdir, sizeof(rootdir), "%s/%08x",
fsqueue_getpath(qkind), msgid))
fatalx("fsqueue_message_purge: snprintf");
- if (! bsnprintf(purgedir, sizeof(purgedir), "%s/%08x",
- fsqueue_getpath(Q_PURGE), msgid))
- fatalx("fsqueue_message_purge: snprintf");
-
- if (rename(rootdir, purgedir) == -1)
- fatal("fsqueue_message_purge: rename");
+ if (mvpurge(rootdir, PATH_PURGE) == -1)
+ fatal("fsqueue_message_purge: mvpurge");
return 1;
}
@@ -497,11 +483,12 @@ int
fsqueue_init(void)
{
unsigned int n;
- char *paths[] = { PATH_INCOMING, PATH_QUEUE,
- PATH_PURGE, PATH_CORRUPT };
+ char *paths[] = { PATH_INCOMING, PATH_QUEUE, PATH_CORRUPT };
char path[MAXPATHLEN];
int ret;
+ mvpurge(PATH_SPOOL PATH_INCOMING, PATH_SPOOL PATH_PURGE);
+
ret = 1;
for (n = 0; n < nitems(paths); n++) {
strlcpy(path, PATH_SPOOL, sizeof(path));
@@ -626,7 +613,7 @@ fsqueue_qwalk_new(enum queue_kind kind, u_int32_t msgid)
if (kind == Q_QUEUE)
q->filefn = walk_queue;
- if (kind == Q_INCOMING || kind == Q_PURGE)
+ if (kind == Q_INCOMING)
q->filefn = walk_queue_nobucket;
q->dirs[q->level] = opendir(q->path);