summaryrefslogtreecommitdiffstats
path: root/usr.sbin/smtpd/queue_fsqueue.c
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2012-01-13 21:58:35 +0000
committereric <eric@openbsd.org>2012-01-13 21:58:35 +0000
commit569b4302375d1dab0ad7510655a5516bcd10dba8 (patch)
treece694a9792ba5d50a0005a9957c294a24c58f220 /usr.sbin/smtpd/queue_fsqueue.c
parentSimplify function wsfont_map_unichar. (diff)
downloadwireguard-openbsd-569b4302375d1dab0ad7510655a5516bcd10dba8.tar.xz
wireguard-openbsd-569b4302375d1dab0ad7510655a5516bcd10dba8.zip
queue_message_purge() and queue_message_delete() are actually the same
thing. Remove queue_message_purge() in favor of queue_message_delete and simplify fsqueue_message_delete() implementation to move the message dir to purge/ ok gilles@
Diffstat (limited to 'usr.sbin/smtpd/queue_fsqueue.c')
-rw-r--r--usr.sbin/smtpd/queue_fsqueue.c76
1 files changed, 8 insertions, 68 deletions
diff --git a/usr.sbin/smtpd/queue_fsqueue.c b/usr.sbin/smtpd/queue_fsqueue.c
index 04b89bbaa54..3732b05ba8f 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.28 2012/01/12 17:00:56 eric Exp $ */
+/* $OpenBSD: queue_fsqueue.c,v 1.29 2012/01/13 21:58:35 eric Exp $ */
/*
* Copyright (c) 2011 Gilles Chehade <gilles@openbsd.org>
@@ -53,7 +53,6 @@ static int fsqueue_message_commit(enum queue_kind, u_int32_t);
static int fsqueue_message_fd_r(enum queue_kind, u_int32_t);
static int fsqueue_message_fd_rw(enum queue_kind, u_int32_t);
static int fsqueue_message_delete(enum queue_kind, u_int32_t);
-static int fsqueue_message_purge(enum queue_kind, u_int32_t);
static int fsqueue_message_corrupt(enum queue_kind, u_int32_t);
static void fsqueue_envelope_path(enum queue_kind, u_int64_t, char *, size_t);
@@ -360,75 +359,19 @@ static int
fsqueue_message_delete(enum queue_kind qkind, u_int32_t msgid)
{
char rootdir[MAXPATHLEN];
- char evpdir[MAXPATHLEN];
- char msgpath[MAXPATHLEN];
- DIR *dirp;
- struct dirent *dp;
-
- if (qkind == Q_QUEUE) {
- if (! bsnprintf(rootdir, sizeof(rootdir), "%s/%03x/%08x", PATH_QUEUE,
- msgid & 0xfff, msgid))
- fatal("fsqueue_message_delete: snprintf");
- }
-
- if (! bsnprintf(evpdir, sizeof(evpdir), "%s%s", rootdir,
- PATH_ENVELOPES))
- fatal("fsqueue_message_delete: snprintf");
-
- dirp = opendir(evpdir);
- if (dirp) {
- char envelope[MAXPATHLEN];
-
- while ((dp = readdir(dirp)) != NULL) {
- if (! bsnprintf(envelope, MAXPATHLEN, "%s/%s",
- evpdir, dp->d_name))
- fatal("fsqueue_message_delete: truncated evp");
- unlink(envelope);
- }
- closedir(dirp);
- }
-
- if (! bsnprintf(msgpath, sizeof(msgpath), "%s/message", rootdir))
- fatal("fsqueue_message_delete: snprintf");
-
- if (unlink(msgpath) == -1) {
- if (errno != ENOENT)
- fatal("fsqueue_message_delete: unlink");
- }
-
- if (rmdir(evpdir) == -1) {
- /* It is ok to fail rmdir with ENOENT here
- * because upon successful delivery of the
- * last envelope, we remove the directory.
- */
- if (errno != ENOENT)
- fatal("fsqueue_message_delete: rmdir");
- }
-
- if (rmdir(rootdir) == -1)
- fatal("#2 fsqueue_message_delete: rmdir");
-
if (qkind == Q_QUEUE) {
- if (! bsnprintf(rootdir, sizeof(rootdir), "%s/%03x", PATH_QUEUE, msgid & 0xffff))
+ if (! bsnprintf(rootdir, sizeof(rootdir), "%s/%03x/%08x",
+ fsqueue_getpath(qkind), msgid & 0xfff, msgid))
fatal("fsqueue_message_delete: snprintf");
- rmdir(rootdir);
+ } else {
+ if (! bsnprintf(rootdir, sizeof(rootdir), "%s/%08x",
+ fsqueue_getpath(qkind), msgid))
+ fatalx("fsqueue_message_delete: snprintf");
}
- return 1;
-}
-
-static int
-fsqueue_message_purge(enum queue_kind qkind, u_int32_t msgid)
-{
- char rootdir[MAXPATHLEN];
-
- if (! bsnprintf(rootdir, sizeof(rootdir), "%s/%08x",
- fsqueue_getpath(qkind), msgid))
- fatalx("fsqueue_message_purge: snprintf");
-
if (mvpurge(rootdir, PATH_PURGE) == -1)
- fatal("fsqueue_message_purge: mvpurge");
+ fatal("fsqueue_message_delete: mvpurge");
return 1;
}
@@ -496,9 +439,6 @@ fsqueue_message(enum queue_kind qkind, enum queue_op qop, u_int32_t *msgid)
case QOP_FD_RW:
return fsqueue_message_fd_rw(qkind, *msgid);
- case QOP_PURGE:
- return fsqueue_message_purge(qkind, *msgid);
-
case QOP_CORRUPT:
return fsqueue_message_corrupt(qkind, *msgid);