aboutsummaryrefslogtreecommitdiffstats
path: root/smtpd
diff options
context:
space:
mode:
authorEric Faurot <eric@openbsd.org>2016-02-03 14:41:56 +0100
committerEric Faurot <eric@openbsd.org>2016-02-03 14:41:56 +0100
commit68da11f919e2378a113d5bd07b73d760c3d34a87 (patch)
treea1efb7e03ae13260ba1b28de537404a67976dc5d /smtpd
parentSync with OpenBSD: (diff)
downloadOpenSMTPD-68da11f919e2378a113d5bd07b73d760c3d34a87.tar.xz
OpenSMTPD-68da11f919e2378a113d5bd07b73d760c3d34a87.zip
Sync with OpenBSD:opensmtpd-201602031443
- add helper functions to talk to the queue
Diffstat (limited to 'smtpd')
-rw-r--r--smtpd/CVS/Entries146
-rw-r--r--smtpd/smtp_session.c88
2 files changed, 126 insertions, 108 deletions
diff --git a/smtpd/CVS/Entries b/smtpd/CVS/Entries
index 76c2fc9c..7b123af7 100644
--- a/smtpd/CVS/Entries
+++ b/smtpd/CVS/Entries
@@ -2,89 +2,89 @@ 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//
-/aliases.c/1.69/Wed Feb 3 11:17:35 2016//
-/bounce.c/1.72/Wed Feb 3 11:17:37 2016//
-/ca.c/1.21/Wed Feb 3 11:17:37 2016//
-/compress_backend.c/1.9/Wed Feb 3 11:17:35 2016//
-/compress_gzip.c/1.10/Wed Feb 3 11:17:35 2016//
-/config.c/1.33/Wed Feb 3 11:17:35 2016//
-/control.c/1.110/Wed Feb 3 11:17:37 2016//
-/crypto.c/1.5/Wed Feb 3 11:17:35 2016//
-/delivery.c/1.6/Wed Feb 3 11:17:35 2016//
-/delivery_filename.c/1.14/Wed Feb 3 11:17:35 2016//
-/delivery_lmtp.c/1.15/Wed Feb 3 11:17:35 2016//
-/delivery_maildir.c/1.17/Wed Feb 3 11:17:35 2016//
-/delivery_mbox.c/1.12/Wed Feb 3 11:17:35 2016//
-/delivery_mda.c/1.9/Wed Feb 3 11:17:35 2016//
-/dict.c/1.5/Wed Feb 3 11:17:35 2016//
-/dns.c/1.83/Wed Feb 3 11:17:35 2016//
-/enqueue.c/1.112/Wed Feb 3 11:17:37 2016//
-/envelope.c/1.36/Wed Feb 3 11:17:35 2016//
-/esc.c/1.4/Wed Feb 3 11:17:35 2016//
-/expand.c/1.29/Wed Feb 3 11:17:35 2016//
-/filter.c/1.16/Wed Feb 3 11:18:57 2016//
/forward.5/1.9/Sat Jan 23 19:21:35 2016//
-/forward.c/1.39/Wed Feb 3 11:17:35 2016//
-/iobuf.c/1.9/Wed Feb 3 11:17:35 2016//
/iobuf.h/1.4/Sat Jan 23 19:21:35 2016//
-/ioev.c/1.24/Wed Feb 3 11:17:35 2016//
/ioev.h/1.5/Sat Jan 23 19:21:35 2016//
-/limit.c/1.4/Wed Feb 3 11:17:35 2016//
-/lka.c/1.192/Wed Feb 3 11:17:35 2016//
-/lka_session.c/1.79/Wed Feb 3 11:17:35 2016//
-/log.c/1.17/Wed Feb 3 11:17:35 2016//
-/log.h/1.5/Wed Feb 3 11:17:35 2016//
-/mailaddr.c/1.2/Wed Feb 3 11:17:35 2016//
/makemap.8/1.28/Sat Jan 23 19:21:35 2016//
-/makemap.c/1.61/Wed Feb 3 11:17:35 2016//
-/mda.c/1.117/Wed Feb 3 11:17:37 2016//
-/mproc.c/1.16/Wed Feb 3 11:17:35 2016//
-/mta.c/1.200/Wed Feb 3 11:17:35 2016//
-/mta_session.c/1.82/Wed Feb 3 11:17:35 2016//
/newaliases.8/1.11/Sat Jan 23 19:21:35 2016//
-/parse.y/1.181/Wed Feb 3 11:17:35 2016//
-/parser.c/1.40/Wed Feb 3 11:17:35 2016//
/parser.h/1.29/Sat Jan 23 19:21:35 2016//
-/pony.c/1.12/Wed Feb 3 11:17:35 2016//
-/queue.c/1.176/Wed Feb 3 11:17:37 2016//
-/queue_backend.c/1.61/Wed Feb 3 11:17:35 2016//
-/queue_fs.c/1.14/Wed Feb 3 11:17:35 2016//
-/queue_null.c/1.6/Wed Feb 3 11:17:35 2016//
-/queue_proc.c/1.6/Wed Feb 3 11:17:35 2016//
-/queue_ram.c/1.7/Wed Feb 3 11:17:35 2016//
-/rfc2822.c/1.6/Wed Feb 3 11:17:35 2016//
/rfc2822.h/1.4/Sat Jan 23 19:21:35 2016//
-/ruleset.c/1.32/Wed Feb 3 11:17:35 2016//
-/runq.c/1.2/Wed Feb 3 11:17:35 2016//
-/scheduler.c/1.51/Wed Feb 3 11:17:35 2016//
-/scheduler_backend.c/1.15/Wed Feb 3 11:17:35 2016//
-/scheduler_null.c/1.9/Wed Feb 3 11:17:35 2016//
-/scheduler_proc.c/1.8/Wed Feb 3 11:17:35 2016//
-/scheduler_ramqueue.c/1.42/Wed Feb 3 11:17:35 2016//
/sendmail.8/1.4/Sat Jan 23 19:21:35 2016//
-/smtp.c/1.152/Wed Feb 3 11:17:35 2016//
-/smtp_session.c/1.265/Wed Feb 3 11:18:58 2016//
/smtpctl.8/1.54/Sat Jan 23 19:21:35 2016//
-/smtpctl.c/1.145/Wed Feb 3 11:17:37 2016//
/smtpd-api.h/1.28/Sat Jan 23 19:21:35 2016//
-/smtpd-defines.h/1.6/Wed Feb 3 11:17:35 2016//
/smtpd.8/1.28/Sat Jan 23 19:21:35 2016//
-/smtpd.c/1.273/Wed Feb 3 11:17:37 2016//
-/smtpd.conf.5/1.153/Wed Feb 3 11:17:35 2016//
-/smtpd.h/1.510/Wed Feb 3 11:17:37 2016//
-/ssl.c/1.85/Wed Feb 3 11:17:35 2016//
/ssl.h/1.19/Sat Jan 23 19:21:35 2016//
-/ssl_smtpd.c/1.13/Wed Feb 3 11:17:35 2016//
-/stat_backend.c/1.10/Wed Feb 3 11:17:35 2016//
-/stat_ramstat.c/1.10/Wed Feb 3 11:17:35 2016//
/table.5/1.5/Sat Jan 23 19:21:35 2016//
-/table.c/1.23/Wed Feb 3 11:17:35 2016//
-/table_api.c/1.8/Wed Feb 3 11:17:35 2016//
-/table_db.c/1.9/Wed Feb 3 11:17:35 2016//
-/table_getpwnam.c/1.4/Wed Feb 3 11:17:35 2016//
-/table_proc.c/1.6/Wed Feb 3 11:17:35 2016//
-/table_static.c/1.15/Wed Feb 3 11:17:35 2016//
-/to.c/1.24/Wed Feb 3 11:17:35 2016//
-/tree.c/1.5/Wed Feb 3 11:17:35 2016//
-/util.c/1.125/Wed Feb 3 11:17:35 2016//
-/waitq.c/1.5/Wed Feb 3 11:17: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//
diff --git a/smtpd/smtp_session.c b/smtpd/smtp_session.c
index c8f9d884..0bd069a7 100644
--- a/smtpd/smtp_session.c
+++ b/smtpd/smtp_session.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtp_session.c,v 1.265 2016/02/03 11:16:19 eric Exp $ */
+/* $OpenBSD: smtp_session.c,v 1.266 2016/02/03 13:38:40 eric Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -187,6 +187,11 @@ static uint8_t dsn_notify_str_to_uint8(const char *);
static void smtp_auth_failure_pause(struct smtp_session *);
static void smtp_auth_failure_resume(int, short, void *);
+static void smtp_queue_create_message(struct smtp_session *);
+static void smtp_queue_open_message(struct smtp_session *);
+static void smtp_queue_commit(struct smtp_session *);
+static void smtp_queue_rollback(struct smtp_session *);
+
static void smtp_filter_connect(struct smtp_session *, struct sockaddr *);
static void smtp_filter_rset(struct smtp_session *);
static void smtp_filter_disconnect(struct smtp_session *);
@@ -739,10 +744,7 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
s = tree_xpop(&wait_lka_mail, reqid);
switch (status) {
case LKA_OK:
- m_create(p_queue, IMSG_SMTP_MESSAGE_CREATE, 0, 0, -1);
- m_add_id(p_queue, s->id);
- m_close(p_queue);
- tree_xset(&wait_queue_msg, s->id, s);
+ smtp_queue_create_message(s);
/* sender check passed, override From callback if masquerading */
if (s->listener->flags & F_MASQUERADE)
@@ -1109,12 +1111,8 @@ smtp_filter_response(uint64_t id, int query, int status, uint32_t code,
m_close(p_lka);
tree_xset(&wait_lka_mail, s->id, s);
}
- else {
- m_create(p_queue, IMSG_SMTP_MESSAGE_CREATE, 0, 0, -1);
- m_add_id(p_queue, s->id);
- m_close(p_queue);
- tree_xset(&wait_queue_msg, s->id, s);
- }
+ else
+ smtp_queue_create_message(s);
return;
case QUERY_RCPT:
@@ -1141,11 +1139,7 @@ smtp_filter_response(uint64_t id, int query, int status, uint32_t code,
io_reload(&s->io);
return;
}
- m_create(p_queue, IMSG_SMTP_MESSAGE_OPEN, 0, 0, -1);
- m_add_id(p_queue, s->id);
- m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
- m_close(p_queue);
- tree_xset(&wait_queue_fd, s->id, s);
+ smtp_queue_open_message(s);
return;
case QUERY_EOM:
@@ -1476,10 +1470,8 @@ smtp_data_io_done(struct smtp_session *s)
if (s->msgflags & MF_ERROR) {
smtp_filter_rollback(s);
+ smtp_queue_rollback(s);
- m_create(p_queue, IMSG_SMTP_MESSAGE_ROLLBACK, 0, 0, -1);
- m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
- m_close(p_queue);
if (s->msgflags & MF_ERROR_SIZE)
smtp_reply(s, "554 Message too big");
else if (s->msgflags & MF_ERROR_LOOP)
@@ -1757,11 +1749,8 @@ smtp_command(struct smtp_session *s, char *line)
smtp_filter_rset(s);
- if (s->evp.id) {
- m_create(p_queue, IMSG_SMTP_MESSAGE_ROLLBACK, 0, 0, -1);
- m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
- m_close(p_queue);
- }
+ if (s->evp.id)
+ smtp_queue_rollback(s);
s->phase = PHASE_SETUP;
smtp_message_reset(s, 0);
@@ -2108,9 +2097,7 @@ smtp_message_end(struct smtp_session *s)
s->phase = PHASE_SETUP;
if (s->msgflags & MF_ERROR) {
- m_create(p_queue, IMSG_SMTP_MESSAGE_ROLLBACK, 0, 0, -1);
- m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
- m_close(p_queue);
+ smtp_queue_rollback(s);
if (s->msgflags & MF_ERROR_SIZE)
smtp_reply(s, "554 %s %s: Transaction failed, message too big",
esc_code(ESC_STATUS_PERMFAIL, ESC_MESSAGE_TOO_BIG_FOR_SYSTEM),
@@ -2122,11 +2109,7 @@ smtp_message_end(struct smtp_session *s)
return;
}
- m_create(p_queue, IMSG_SMTP_MESSAGE_COMMIT, 0, 0, -1);
- m_add_id(p_queue, s->id);
- m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
- m_close(p_queue);
- tree_xset(&wait_queue_commit, s->id, s);
+ smtp_queue_commit(s);
}
static void
@@ -2243,9 +2226,7 @@ smtp_free(struct smtp_session *s, const char * reason)
tree_pop(&wait_filter_data, s->id);
if (s->evp.id) {
- m_create(p_queue, IMSG_SMTP_MESSAGE_ROLLBACK, 0, 0, -1);
- m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
- m_close(p_queue);
+ smtp_queue_rollback(s);
io_clear(&s->oev);
iobuf_clear(&s->obuf);
}
@@ -2470,6 +2451,43 @@ smtp_auth_failure_pause(struct smtp_session *s)
}
static void
+smtp_queue_create_message(struct smtp_session *s)
+{
+ m_create(p_queue, IMSG_SMTP_MESSAGE_CREATE, 0, 0, -1);
+ m_add_id(p_queue, s->id);
+ m_close(p_queue);
+ tree_xset(&wait_queue_msg, s->id, s);
+}
+
+static void
+smtp_queue_open_message(struct smtp_session *s)
+{
+ m_create(p_queue, IMSG_SMTP_MESSAGE_OPEN, 0, 0, -1);
+ m_add_id(p_queue, s->id);
+ m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
+ m_close(p_queue);
+ tree_xset(&wait_queue_fd, s->id, s);
+}
+
+static void
+smtp_queue_commit(struct smtp_session *s)
+{
+ m_create(p_queue, IMSG_SMTP_MESSAGE_COMMIT, 0, 0, -1);
+ m_add_id(p_queue, s->id);
+ m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
+ m_close(p_queue);
+ tree_xset(&wait_queue_commit, s->id, s);
+}
+
+static void
+smtp_queue_rollback(struct smtp_session *s)
+{
+ m_create(p_queue, IMSG_SMTP_MESSAGE_ROLLBACK, 0, 0, -1);
+ m_add_msgid(p_queue, evpid_to_msgid(s->evp.id));
+ m_close(p_queue);
+}
+
+static void
smtp_filter_rset(struct smtp_session *s)
{
filter_event(s->id, EVENT_RESET);