diff options
author | 2016-02-03 14:41:56 +0100 | |
---|---|---|
committer | 2016-02-03 14:41:56 +0100 | |
commit | 68da11f919e2378a113d5bd07b73d760c3d34a87 (patch) | |
tree | a1efb7e03ae13260ba1b28de537404a67976dc5d /smtpd | |
parent | Sync with OpenBSD: (diff) | |
download | OpenSMTPD-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/Entries | 146 | ||||
-rw-r--r-- | smtpd/smtp_session.c | 88 |
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); |