aboutsummaryrefslogtreecommitdiffstats
path: root/smtpd
diff options
context:
space:
mode:
authorGilles Chehade <gilles@dalenys.com>2016-02-04 23:50:10 +0100
committerGilles Chehade <gilles@dalenys.com>2016-02-04 23:50:10 +0100
commit9e13bd130b1c75ca952202ce49a80f24a8f2283a (patch)
tree772a4432755e6f9331e18f10587997214eafc13a /smtpd
parentSync with OpenBSD: (diff)
downloadOpenSMTPD-9e13bd130b1c75ca952202ce49a80f24a8f2283a.tar.xz
OpenSMTPD-9e13bd130b1c75ca952202ce49a80f24a8f2283a.zip
sync with OpenBSD:
- fix memory leak in rfc2822.c parser - cleanup a bit smtp_session handling of DATA - avoid keeping envelopes in cache longer than they should
Diffstat (limited to 'smtpd')
-rw-r--r--smtpd/CVS/Entries176
-rw-r--r--smtpd/queue_backend.c15
-rw-r--r--smtpd/rfc2822.c3
-rw-r--r--smtpd/smtp_session.c45
4 files changed, 126 insertions, 113 deletions
diff --git a/smtpd/CVS/Entries b/smtpd/CVS/Entries
index 7b123af7..fca32f59 100644
--- a/smtpd/CVS/Entries
+++ b/smtpd/CVS/Entries
@@ -1,90 +1,90 @@
D/smtpctl////
D/smtpd////
-/Makefile/1.15/Sat Jan 23 19:21:35 2016//
-/aliases.5/1.12/Sat Jan 23 19:21:35 2016//
-/forward.5/1.9/Sat Jan 23 19:21:35 2016//
-/iobuf.h/1.4/Sat Jan 23 19:21:35 2016//
-/ioev.h/1.5/Sat Jan 23 19:21:35 2016//
-/makemap.8/1.28/Sat Jan 23 19:21:35 2016//
-/newaliases.8/1.11/Sat Jan 23 19:21:35 2016//
-/parser.h/1.29/Sat Jan 23 19:21:35 2016//
-/rfc2822.h/1.4/Sat Jan 23 19:21:35 2016//
-/sendmail.8/1.4/Sat Jan 23 19:21:35 2016//
-/smtpctl.8/1.54/Sat Jan 23 19:21:35 2016//
-/smtpd-api.h/1.28/Sat Jan 23 19:21:35 2016//
-/smtpd.8/1.28/Sat Jan 23 19:21:35 2016//
-/ssl.h/1.19/Sat Jan 23 19:21:35 2016//
-/table.5/1.5/Sat Jan 23 19:21:35 2016//
-/aliases.c/1.69/Wed Feb 3 13:40:03 2016//
-/bounce.c/1.72/Wed Feb 3 13:40:03 2016//
-/ca.c/1.21/Wed Feb 3 13:40:03 2016//
-/compress_backend.c/1.9/Wed Feb 3 13:40:03 2016//
-/compress_gzip.c/1.10/Wed Feb 3 13:40:03 2016//
-/config.c/1.33/Wed Feb 3 13:40:03 2016//
-/control.c/1.110/Wed Feb 3 13:40:03 2016//
-/crypto.c/1.5/Wed Feb 3 13:40:03 2016//
-/delivery.c/1.6/Wed Feb 3 13:40:03 2016//
-/delivery_filename.c/1.14/Wed Feb 3 13:40:03 2016//
-/delivery_lmtp.c/1.15/Wed Feb 3 13:40:03 2016//
-/delivery_maildir.c/1.17/Wed Feb 3 13:40:03 2016//
-/delivery_mbox.c/1.12/Wed Feb 3 13:40:03 2016//
-/delivery_mda.c/1.9/Wed Feb 3 13:40:03 2016//
-/dict.c/1.5/Wed Feb 3 13:40:03 2016//
-/dns.c/1.83/Wed Feb 3 13:40:03 2016//
-/enqueue.c/1.112/Wed Feb 3 13:40:03 2016//
-/envelope.c/1.36/Wed Feb 3 13:40:03 2016//
-/esc.c/1.4/Wed Feb 3 13:40:03 2016//
-/expand.c/1.29/Wed Feb 3 13:40:03 2016//
-/filter.c/1.16/Wed Feb 3 13:40:03 2016//
-/forward.c/1.39/Wed Feb 3 13:40:03 2016//
-/iobuf.c/1.9/Wed Feb 3 13:40:03 2016//
-/ioev.c/1.24/Wed Feb 3 13:40:03 2016//
-/limit.c/1.4/Wed Feb 3 13:40:03 2016//
-/lka.c/1.192/Wed Feb 3 13:40:03 2016//
-/lka_session.c/1.79/Wed Feb 3 13:40:03 2016//
-/log.c/1.17/Wed Feb 3 13:40:03 2016//
-/log.h/1.5/Wed Feb 3 13:40:03 2016//
-/mailaddr.c/1.2/Wed Feb 3 13:40:03 2016//
-/makemap.c/1.61/Wed Feb 3 13:40:03 2016//
-/mda.c/1.117/Wed Feb 3 13:40:03 2016//
-/mproc.c/1.16/Wed Feb 3 13:40:03 2016//
-/mta.c/1.200/Wed Feb 3 13:40:03 2016//
-/mta_session.c/1.82/Wed Feb 3 13:40:03 2016//
-/parse.y/1.181/Wed Feb 3 13:40:03 2016//
-/parser.c/1.40/Wed Feb 3 13:40:03 2016//
-/pony.c/1.12/Wed Feb 3 13:40:03 2016//
-/queue.c/1.176/Wed Feb 3 13:40:03 2016//
-/queue_backend.c/1.61/Wed Feb 3 13:40:03 2016//
-/queue_fs.c/1.14/Wed Feb 3 13:40:03 2016//
-/queue_null.c/1.6/Wed Feb 3 13:40:03 2016//
-/queue_proc.c/1.6/Wed Feb 3 13:40:03 2016//
-/queue_ram.c/1.7/Wed Feb 3 13:40:03 2016//
-/rfc2822.c/1.6/Wed Feb 3 13:40:03 2016//
-/ruleset.c/1.32/Wed Feb 3 13:40:03 2016//
-/runq.c/1.2/Wed Feb 3 13:40:03 2016//
-/scheduler.c/1.51/Wed Feb 3 13:40:03 2016//
-/scheduler_backend.c/1.15/Wed Feb 3 13:40:03 2016//
-/scheduler_null.c/1.9/Wed Feb 3 13:40:03 2016//
-/scheduler_proc.c/1.8/Wed Feb 3 13:40:03 2016//
-/scheduler_ramqueue.c/1.42/Wed Feb 3 13:40:03 2016//
-/smtp.c/1.152/Wed Feb 3 13:40:03 2016//
-/smtp_session.c/1.266/Wed Feb 3 13:41:40 2016//
-/smtpctl.c/1.145/Wed Feb 3 13:40:03 2016//
-/smtpd-defines.h/1.6/Wed Feb 3 13:40:03 2016//
-/smtpd.c/1.273/Wed Feb 3 13:40:03 2016//
-/smtpd.conf.5/1.153/Wed Feb 3 13:40:03 2016//
-/smtpd.h/1.510/Wed Feb 3 13:40:03 2016//
-/ssl.c/1.85/Wed Feb 3 13:40:03 2016//
-/ssl_smtpd.c/1.13/Wed Feb 3 13:40:03 2016//
-/stat_backend.c/1.10/Wed Feb 3 13:40:03 2016//
-/stat_ramstat.c/1.10/Wed Feb 3 13:40:03 2016//
-/table.c/1.23/Wed Feb 3 13:40:03 2016//
-/table_api.c/1.8/Wed Feb 3 13:40:03 2016//
-/table_db.c/1.9/Wed Feb 3 13:40:03 2016//
-/table_getpwnam.c/1.4/Wed Feb 3 13:40:03 2016//
-/table_proc.c/1.6/Wed Feb 3 13:40:03 2016//
-/table_static.c/1.15/Wed Feb 3 13:40:03 2016//
-/to.c/1.24/Wed Feb 3 13:40:03 2016//
-/tree.c/1.5/Wed Feb 3 13:40:03 2016//
-/util.c/1.125/Wed Feb 3 13:40:03 2016//
-/waitq.c/1.5/Wed Feb 3 13:40:03 2016//
+/Makefile/1.15/Thu Feb 4 22:09:08 2016//
+/aliases.5/1.12/Thu Feb 4 22:09:08 2016//
+/aliases.c/1.69/Thu Feb 4 22:09:08 2016//
+/bounce.c/1.72/Thu Feb 4 22:09:08 2016//
+/ca.c/1.21/Thu Feb 4 22:25:43 2016//
+/compress_backend.c/1.9/Thu Feb 4 22:09:08 2016//
+/compress_gzip.c/1.10/Thu Feb 4 22:09:08 2016//
+/config.c/1.33/Thu Feb 4 22:09:08 2016//
+/control.c/1.110/Thu Feb 4 22:09:08 2016//
+/crypto.c/1.5/Thu Feb 4 22:25:43 2016//
+/delivery.c/1.6/Thu Feb 4 22:09:08 2016//
+/delivery_filename.c/1.14/Thu Feb 4 22:09:08 2016//
+/delivery_lmtp.c/1.15/Thu Feb 4 22:09:08 2016//
+/delivery_maildir.c/1.17/Thu Feb 4 22:09:08 2016//
+/delivery_mbox.c/1.12/Thu Feb 4 22:09:08 2016//
+/delivery_mda.c/1.9/Thu Feb 4 22:09:08 2016//
+/dict.c/1.5/Thu Feb 4 22:09:08 2016//
+/dns.c/1.83/Thu Feb 4 22:09:08 2016//
+/enqueue.c/1.112/Thu Feb 4 22:09:08 2016//
+/envelope.c/1.36/Thu Feb 4 22:09:08 2016//
+/esc.c/1.4/Thu Feb 4 22:09:08 2016//
+/expand.c/1.29/Thu Feb 4 22:09:08 2016//
+/filter.c/1.16/Thu Feb 4 22:09:08 2016//
+/forward.5/1.9/Thu Feb 4 22:09:08 2016//
+/forward.c/1.39/Thu Feb 4 22:09:08 2016//
+/iobuf.c/1.9/Thu Feb 4 22:25:43 2016//
+/iobuf.h/1.4/Thu Feb 4 22:09:08 2016//
+/ioev.c/1.24/Thu Feb 4 22:25:43 2016//
+/ioev.h/1.5/Thu Feb 4 22:09:08 2016//
+/limit.c/1.4/Thu Feb 4 22:09:08 2016//
+/lka.c/1.192/Thu Feb 4 22:25:43 2016//
+/lka_session.c/1.79/Thu Feb 4 22:09:08 2016//
+/log.c/1.17/Thu Feb 4 22:09:08 2016//
+/log.h/1.5/Thu Feb 4 22:09:08 2016//
+/mailaddr.c/1.2/Thu Feb 4 22:09:08 2016//
+/makemap.8/1.28/Thu Feb 4 22:09:08 2016//
+/makemap.c/1.61/Thu Feb 4 22:09:08 2016//
+/mda.c/1.117/Thu Feb 4 22:09:08 2016//
+/mproc.c/1.16/Thu Feb 4 22:09:08 2016//
+/mta.c/1.200/Thu Feb 4 22:09:08 2016//
+/mta_session.c/1.82/Thu Feb 4 22:25:43 2016//
+/newaliases.8/1.11/Thu Feb 4 22:09:08 2016//
+/parse.y/1.181/Thu Feb 4 22:09:08 2016//
+/parser.c/1.40/Thu Feb 4 22:09:08 2016//
+/parser.h/1.29/Thu Feb 4 22:09:08 2016//
+/pony.c/1.12/Thu Feb 4 22:09:08 2016//
+/queue.c/1.176/Thu Feb 4 22:09:08 2016//
+/queue_backend.c/1.62/Thu Feb 4 22:49:56 2016//
+/queue_fs.c/1.14/Thu Feb 4 22:09:08 2016//
+/queue_null.c/1.6/Thu Feb 4 22:09:08 2016//
+/queue_proc.c/1.6/Thu Feb 4 22:09:08 2016//
+/queue_ram.c/1.7/Thu Feb 4 22:09:08 2016//
+/rfc2822.c/1.7/Thu Feb 4 22:49:56 2016//
+/rfc2822.h/1.4/Thu Feb 4 22:09:08 2016//
+/ruleset.c/1.32/Thu Feb 4 22:09:08 2016//
+/runq.c/1.2/Thu Feb 4 22:09:08 2016//
+/scheduler.c/1.51/Thu Feb 4 22:09:08 2016//
+/scheduler_backend.c/1.15/Thu Feb 4 22:09:08 2016//
+/scheduler_null.c/1.9/Thu Feb 4 22:09:08 2016//
+/scheduler_proc.c/1.8/Thu Feb 4 22:09:08 2016//
+/scheduler_ramqueue.c/1.42/Thu Feb 4 22:09:08 2016//
+/sendmail.8/1.4/Thu Feb 4 22:09:08 2016//
+/smtp.c/1.152/Thu Feb 4 22:09:08 2016//
+/smtp_session.c/1.267/Thu Feb 4 22:49:56 2016//
+/smtpctl.8/1.54/Thu Feb 4 22:09:08 2016//
+/smtpctl.c/1.145/Thu Feb 4 22:09:08 2016//
+/smtpd-api.h/1.28/Thu Feb 4 22:09:08 2016//
+/smtpd-defines.h/1.6/Thu Feb 4 22:09:08 2016//
+/smtpd.8/1.28/Thu Feb 4 22:09:08 2016//
+/smtpd.c/1.273/Thu Feb 4 22:25:43 2016//
+/smtpd.conf.5/1.153/Thu Feb 4 22:09:08 2016//
+/smtpd.h/1.510/Thu Feb 4 22:25:43 2016//
+/ssl.c/1.85/Thu Feb 4 22:25:43 2016//
+/ssl.h/1.19/Thu Feb 4 22:09:08 2016//
+/ssl_smtpd.c/1.13/Thu Feb 4 22:25:43 2016//
+/stat_backend.c/1.10/Thu Feb 4 22:09:08 2016//
+/stat_ramstat.c/1.10/Thu Feb 4 22:09:08 2016//
+/table.5/1.5/Thu Feb 4 22:09:08 2016//
+/table.c/1.23/Thu Feb 4 22:09:08 2016//
+/table_api.c/1.8/Thu Feb 4 22:09:08 2016//
+/table_db.c/1.9/Thu Feb 4 22:09:08 2016//
+/table_getpwnam.c/1.4/Thu Feb 4 22:09:08 2016//
+/table_proc.c/1.6/Thu Feb 4 22:09:08 2016//
+/table_static.c/1.15/Thu Feb 4 22:09:08 2016//
+/to.c/1.24/Thu Feb 4 22:09:08 2016//
+/tree.c/1.5/Thu Feb 4 22:09:08 2016//
+/util.c/1.125/Thu Feb 4 22:09:08 2016//
+/waitq.c/1.5/Thu Feb 4 22:09:08 2016//
diff --git a/smtpd/queue_backend.c b/smtpd/queue_backend.c
index f0a37903..3fef9508 100644
--- a/smtpd/queue_backend.c
+++ b/smtpd/queue_backend.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: queue_backend.c,v 1.61 2015/12/28 22:08:30 jung Exp $ */
+/* $OpenBSD: queue_backend.c,v 1.62 2016/02/04 12:46:28 eric Exp $ */
/*
* Copyright (c) 2011 Gilles Chehade <gilles@poolp.org>
@@ -190,6 +190,8 @@ int
queue_message_delete(uint32_t msgid)
{
char msgpath[PATH_MAX];
+ uint64_t evpid;
+ void *iter;
int r;
profile_enter("queue_message_delete");
@@ -200,6 +202,17 @@ queue_message_delete(uint32_t msgid)
queue_message_path(msgid, msgpath, sizeof(msgpath));
unlink(msgpath);
+ /* remove remaining envelopes from the cache if any (on rollback) */
+ evpid = msgid_to_evpid(msgid);
+ for (;;) {
+ iter = NULL;
+ if (!tree_iterfrom(&evpcache_tree, &iter, evpid, &evpid, NULL))
+ break;
+ if (evpid_to_msgid(evpid) != msgid)
+ break;
+ queue_envelope_cache_del(evpid);
+ }
+
log_trace(TRACE_QUEUE,
"queue-backend: queue_message_delete(%08"PRIx32") -> %d", msgid, r);
diff --git a/smtpd/rfc2822.c b/smtpd/rfc2822.c
index 06f3ec71..0b80f352 100644
--- a/smtpd/rfc2822.c
+++ b/smtpd/rfc2822.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rfc2822.c,v 1.6 2015/12/28 22:08:30 jung Exp $ */
+/* $OpenBSD: rfc2822.c,v 1.7 2016/02/04 22:35:17 eric Exp $ */
/*
* Copyright (c) 2014 Gilles Chehade <gilles@poolp.org>
@@ -63,6 +63,7 @@ end:
break;
if (hdr_miss_cb)
TAILQ_REMOVE(&rp->hdr_miss_cb, hdr_miss_cb, next);
+ free(hdr_miss_cb);
header_reset(&rp->header);
rp->in_hdr = 0;
return;
diff --git a/smtpd/smtp_session.c b/smtpd/smtp_session.c
index 0bd069a7..045849f8 100644
--- a/smtpd/smtp_session.c
+++ b/smtpd/smtp_session.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtp_session.c,v 1.266 2016/02/03 13:38:40 eric Exp $ */
+/* $OpenBSD: smtp_session.c,v 1.267 2016/02/04 20:27:33 eric Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -1315,25 +1315,6 @@ smtp_io(struct io *io, int evt)
/* Message body */
if (s->state == STATE_BODY && strcmp(line, ".")) {
-
- if (line[0] == '.') {
- line += 1;
- len -= 1;
- }
-
- if (isspace((unsigned char)line[0]) && s->skiphdr)
- goto nextline;
- s->skiphdr = 0;
-
- /* BCC should be stripped from headers */
- if (!s->hdrdone) {
- if (strncasecmp("bcc:", line, 4) == 0) {
- s->skiphdr = 1;
- goto nextline;
- }
- }
-
- log_trace(TRACE_SMTP, "<<< [MSG] %s", line);
smtp_filter_dataline(s, line);
goto nextline;
}
@@ -2563,12 +2544,15 @@ smtp_filter_dataline(struct smtp_session *s, const char *line)
{
int ret;
+ log_trace(TRACE_SMTP, "<<< [MSG] %s", line);
+
/* ignore data line if an error flag is set */
if (s->msgflags & MF_ERROR)
return;
- if (*line == '\0')
- s->hdrdone = 1;
+ /* escape lines starting with a '.' */
+ if (line[0] == '.')
+ line += 1;
/* account for newline */
s->datain += strlen(line) + 1;
@@ -2577,8 +2561,20 @@ smtp_filter_dataline(struct smtp_session *s, const char *line)
return;
}
- /* check for loops */
if (!s->hdrdone) {
+
+ /* folded header that must be skipped */
+ if (isspace((unsigned char)line[0]) && s->skiphdr)
+ return;
+ s->skiphdr = 0;
+
+ /* BCC should be stripped from headers */
+ if (strncasecmp("bcc:", line, 4) == 0) {
+ s->skiphdr = 1;
+ return;
+ }
+
+ /* check for loop */
if (strncasecmp("Received: ", line, 10) == 0)
s->rcvcount++;
if (s->rcvcount == MAX_HOPS_COUNT) {
@@ -2586,6 +2582,9 @@ smtp_filter_dataline(struct smtp_session *s, const char *line)
log_warn("warn: loop detected");
return;
}
+
+ if (line[0] == '\0')
+ s->hdrdone = 1;
}
ret = rfc2822_parser_feed(&s->rfc2822_parser, line);