summaryrefslogtreecommitdiff
path: root/usr.sbin/smtpd
diff options
context:
space:
mode:
authorSunil Nimmagadda <sunil@cvs.openbsd.org>2015-12-10 07:49:59 +0000
committerSunil Nimmagadda <sunil@cvs.openbsd.org>2015-12-10 07:49:59 +0000
commit6e5336b1ba17cac7536cd919a7fab5607aec4696 (patch)
treed85b6faf6af3bc688dd14f849cfa2269b4ab80ce /usr.sbin/smtpd
parentdab147b29cfe5df31a6f56ffbd80d90ebae3f3e4 (diff)
While listing envelopes using mailq(or smtpctl show queue), pass
the data between processes by dumping to and loading from a buffer which is shorter compared to transferring a structure. Also fixes mailq on platforms where PATH_MAX is way larger than on OpenBSD thus exceeding max imsg. Ok jung@ millert@
Diffstat (limited to 'usr.sbin/smtpd')
-rw-r--r--usr.sbin/smtpd/queue.c12
-rw-r--r--usr.sbin/smtpd/smtpctl.c12
2 files changed, 19 insertions, 5 deletions
diff --git a/usr.sbin/smtpd/queue.c b/usr.sbin/smtpd/queue.c
index 83624dc79d7..44a3acba7d0 100644
--- a/usr.sbin/smtpd/queue.c
+++ b/usr.sbin/smtpd/queue.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: queue.c,v 1.172 2015/11/23 06:54:21 sunil Exp $ */
+/* $OpenBSD: queue.c,v 1.173 2015/12/10 07:49:58 sunil Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -72,8 +72,9 @@ queue_imsg(struct mproc *p, struct imsg *imsg)
uint64_t reqid, evpid, holdq;
uint32_t msgid;
time_t nexttry;
- size_t n_evp;
+ size_t buflen, id_sz, n_evp;
int fd, mta_ext, ret, v, flags, code;
+ char buf[sizeof(evp)];
memset(&bounce, 0, sizeof(struct delivery_bounce));
if (p->proc == PROC_PONY) {
@@ -328,8 +329,13 @@ queue_imsg(struct mproc *p, struct imsg *imsg)
*/
evp.lasttry = nexttry;
}
+
+ id_sz = sizeof evp.id;
+ (void)memcpy(buf, &evp.id, id_sz);
+ buflen = envelope_dump_buffer(&evp, buf + id_sz,
+ sizeof(buf) - id_sz);
m_compose(p_control, IMSG_CTL_LIST_ENVELOPES,
- imsg->hdr.peerid, 0, -1, &evp, sizeof evp);
+ imsg->hdr.peerid, 0, -1, buf, id_sz + buflen + 1);
return;
}
}
diff --git a/usr.sbin/smtpd/smtpctl.c b/usr.sbin/smtpd/smtpctl.c
index e5414340bf5..8757518ae60 100644
--- a/usr.sbin/smtpd/smtpctl.c
+++ b/usr.sbin/smtpd/smtpctl.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtpctl.c,v 1.138 2015/12/07 12:29:19 sunil Exp $ */
+/* $OpenBSD: smtpctl.c,v 1.139 2015/12/10 07:49:58 sunil Exp $ */
/*
* Copyright (c) 2013 Eric Faurot <eric@openbsd.org>
@@ -293,6 +293,9 @@ srv_iter_envelopes(uint32_t msgid, struct envelope *evp)
static uint32_t currmsgid = 0;
static uint64_t from = 0;
static int done = 0, need_send = 1, found;
+ char buf[sizeof(*evp)];
+ size_t buflen;
+ uint64_t evpid;
if (currmsgid != msgid) {
if (currmsgid != 0 && !done)
@@ -325,7 +328,12 @@ srv_iter_envelopes(uint32_t msgid, struct envelope *evp)
goto again;
}
- srv_read(evp, sizeof(*evp));
+ srv_read(&evpid, sizeof evpid);
+ buflen = rlen;
+ srv_read(buf, rlen);
+ envelope_load_buffer(evp, buf, buflen - 1);
+ evp->id = evpid;
+
srv_end();
from = evp->id + 1;
found++;