diff options
author | Gilles Chehade <gilles@dalenys.com> | 2016-02-04 23:50:10 +0100 |
---|---|---|
committer | Gilles Chehade <gilles@dalenys.com> | 2016-02-04 23:50:10 +0100 |
commit | 9e13bd130b1c75ca952202ce49a80f24a8f2283a (patch) | |
tree | 772a4432755e6f9331e18f10587997214eafc13a /smtpd | |
parent | Sync with OpenBSD: (diff) | |
download | OpenSMTPD-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/Entries | 176 | ||||
-rw-r--r-- | smtpd/queue_backend.c | 15 | ||||
-rw-r--r-- | smtpd/rfc2822.c | 3 | ||||
-rw-r--r-- | smtpd/smtp_session.c | 45 |
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); |