aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config.c5
-rw-r--r--control.c3
-rw-r--r--filter_api.c4
-rw-r--r--pony.c3
-rw-r--r--smtp.c10
-rw-r--r--smtp_session.c161
-rw-r--r--smtpd.c28
-rw-r--r--smtpd.h6
-rw-r--r--smtpd/Makefile4
9 files changed, 93 insertions, 131 deletions
diff --git a/config.c b/config.c
index 8657c6f1..67c60df1 100644
--- a/config.c
+++ b/config.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: config.c,v 1.26 2014/04/04 16:10:41 eric Exp $ */
+/* $OpenBSD: config.c,v 1.27 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org>
@@ -135,8 +135,6 @@ config_peer(enum smtp_proc_type proc)
p_control = p;
else if (proc == PROC_LKA)
p_lka = p;
- else if (proc == PROC_MFA)
- p_mfa = p;
else if (proc == PROC_PARENT)
p_parent = p;
else if (proc == PROC_QUEUE)
@@ -205,7 +203,6 @@ process_stat_event(int fd, short ev, void *arg)
process_stat(p_control);
process_stat(p_lka);
- process_stat(p_mfa);
process_stat(p_parent);
process_stat(p_queue);
process_stat(p_scheduler);
diff --git a/control.c b/control.c
index 2f69c4f1..5291d067 100644
--- a/control.c
+++ b/control.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: control.c,v 1.98 2014/04/04 16:10:42 eric Exp $ */
+/* $OpenBSD: control.c,v 1.99 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2012 Gilles Chehade <gilles@poolp.org>
@@ -283,7 +283,6 @@ control(void)
config_peer(PROC_SCHEDULER);
config_peer(PROC_QUEUE);
- config_peer(PROC_MFA);
config_peer(PROC_PARENT);
config_peer(PROC_LKA);
config_peer(PROC_PONY);
diff --git a/filter_api.c b/filter_api.c
index 04d869b8..95a72e34 100644
--- a/filter_api.c
+++ b/filter_api.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: filter_api.c,v 1.12 2013/12/26 17:25:32 eric Exp $ */
+/* $OpenBSD: filter_api.c,v 1.13 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2013 Eric Faurot <eric@openbsd.org>
@@ -415,7 +415,7 @@ filter_api_init(void)
event_init();
memset(&fi, 0, sizeof(fi));
- fi.p.proc = PROC_MFA;
+ fi.p.proc = PROC_PONY;
fi.p.name = "filter";
fi.p.handler = filter_dispatch;
fi.uid = pw->pw_uid;
diff --git a/pony.c b/pony.c
index 1f23cf23..cd8b3536 100644
--- a/pony.c
+++ b/pony.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pony.c,v 1.1 2014/04/04 16:10:42 eric Exp $ */
+/* $OpenBSD: pony.c,v 1.2 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2014 Gilles Chehade <gilles@poolp.org>
@@ -211,7 +211,6 @@ pony(void)
config_peer(PROC_QUEUE);
config_peer(PROC_LKA);
config_peer(PROC_CONTROL);
- config_peer(PROC_MFA);
config_done();
if (event_dispatch() < 0)
diff --git a/smtp.c b/smtp.c
index 8f9bed59..66cc00ef 100644
--- a/smtp.c
+++ b/smtp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtp.c,v 1.134 2014/04/04 16:10:42 eric Exp $ */
+/* $OpenBSD: smtp.c,v 1.135 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -71,14 +71,6 @@ smtp_imsg(struct mproc *p, struct imsg *imsg)
}
}
- if (p->proc == PROC_MFA) {
- switch (imsg->hdr.type) {
- case IMSG_MFA_SMTP_RESPONSE:
- smtp_session_imsg(p, imsg);
- return;
- }
- }
-
if (p->proc == PROC_QUEUE) {
switch (imsg->hdr.type) {
case IMSG_SMTP_MESSAGE_COMMIT:
diff --git a/smtp_session.c b/smtp_session.c
index 199460f0..fbf491eb 100644
--- a/smtp_session.c
+++ b/smtp_session.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtp_session.c,v 1.199 2014/04/09 12:47:23 eric Exp $ */
+/* $OpenBSD: smtp_session.c,v 1.200 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -123,8 +123,6 @@ struct smtp_session {
int phase;
enum smtp_state state;
- enum imsg_type mfa_imsg; /* last send */
-
char helo[SMTPD_MAXLINESIZE];
char cmd[SMTPD_MAXLINESIZE];
char username[SMTPD_MAXLOGNAME];
@@ -160,7 +158,7 @@ static void smtp_session_init(void);
static int smtp_lookup_servername(struct smtp_session *);
static void smtp_connected(struct smtp_session *);
static void smtp_send_banner(struct smtp_session *);
-static void smtp_mfa_response(struct smtp_session *, int, uint32_t,
+static void smtp_mfa_response(struct smtp_session *, int, int, uint32_t,
const char *);
static void smtp_io(struct io *, int);
static void smtp_enter_state(struct smtp_session *, int);
@@ -173,7 +171,6 @@ static void smtp_rfc4954_auth_login(struct smtp_session *, char *);
static void smtp_message_write(struct smtp_session *, const char *);
static void smtp_message_end(struct smtp_session *);
static void smtp_message_reset(struct smtp_session *, int);
-static void smtp_wait_mfa(struct smtp_session *s, int);
static void smtp_free(struct smtp_session *, const char *);
static const char *smtp_strstate(int);
static int smtp_verify_certificate(struct smtp_session *);
@@ -182,6 +179,17 @@ static void smtp_auth_failure_pause(struct smtp_session *);
static void smtp_auth_failure_resume(int, short, void *);
static int smtp_sni_callback(SSL *, int *, void *);
+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 *);
+static void smtp_filter_commit(struct smtp_session *);
+static void smtp_filter_rollback(struct smtp_session *);
+static void smtp_filter_eom(struct smtp_session *);
+static void smtp_filter_helo(struct smtp_session *);
+static void smtp_filter_mail(struct smtp_session *s);
+static void smtp_filter_rcpt(struct smtp_session *s);
+static void smtp_filter_data(struct smtp_session *s);
+
static struct { int code; const char *cmd; } commands[] = {
{ CMD_HELO, "HELO" },
{ CMD_EHLO, "EHLO" },
@@ -201,7 +209,6 @@ static struct { int code; const char *cmd; } commands[] = {
static struct tree wait_lka_ptr;
static struct tree wait_lka_helo;
static struct tree wait_lka_rcpt;
-static struct tree wait_mfa_response;
static struct tree wait_mfa_data;
static struct tree wait_parent_auth;
static struct tree wait_queue_msg;
@@ -219,7 +226,6 @@ smtp_session_init(void)
tree_init(&wait_lka_ptr);
tree_init(&wait_lka_helo);
tree_init(&wait_lka_rcpt);
- tree_init(&wait_mfa_response);
tree_init(&wait_mfa_data);
tree_init(&wait_parent_auth);
tree_init(&wait_queue_msg);
@@ -293,7 +299,7 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
struct msg m;
const char *line, *helo;
uint64_t reqid, evpid;
- uint32_t code, msgid;
+ uint32_t msgid;
int status, success, dnserror;
X509 *x;
void *ssl_ctx;
@@ -352,20 +358,6 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
smtp_connected(s);
return;
- case IMSG_MFA_SMTP_RESPONSE:
- m_msg(&m, imsg);
- m_get_id(&m, &reqid);
- m_get_int(&m, &status);
- m_get_u32(&m, &code);
- if (!m_is_eom(&m))
- m_get_string(&m, &line);
- else
- line = NULL;
- m_end(&m);
- s = tree_xpop(&wait_mfa_response, reqid);
- smtp_mfa_response(s, status, code, line);
- return;
-
case IMSG_SMTP_MESSAGE_CREATE:
m_msg(&m, imsg);
m_get_id(&m, &reqid);
@@ -503,9 +495,7 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
m_end(&m);
s = tree_xpop(&wait_queue_commit, reqid);
if (!success) {
- m_create(p_mfa, IMSG_SMTP_EVENT_ROLLBACK, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_close(p_mfa);
+ smtp_filter_rollback(s);
smtp_reply(s, "421 %s: Temporary failure",
esc_code(ESC_STATUS_TEMPFAIL, ESC_OTHER_MAIL_SYSTEM_STATUS));
smtp_enter_state(s, STATE_QUIT);
@@ -513,10 +503,7 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
return;
}
- m_create(p_mfa, IMSG_SMTP_EVENT_COMMIT, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_close(p_mfa);
-
+ smtp_filter_commit(s);
smtp_reply(s, "250 %s: %08x Message accepted for delivery",
esc_code(ESC_STATUS_OK, ESC_OTHER_STATUS),
evpid_to_msgid(s->evp.id));
@@ -644,7 +631,7 @@ smtp_session_imsg(struct mproc *p, struct imsg *imsg)
}
static void
-smtp_mfa_response(struct smtp_session *s, int status, uint32_t code,
+smtp_mfa_response(struct smtp_session *s, int msg, int status, uint32_t code,
const char *line)
{
struct ca_cert_req_msg req_ca_cert;
@@ -658,7 +645,7 @@ smtp_mfa_response(struct smtp_session *s, int status, uint32_t code,
return;
}
- switch (s->mfa_imsg) {
+ switch (msg) {
case IMSG_SMTP_REQ_CONNECT:
if (status != MFA_OK) {
@@ -894,11 +881,7 @@ smtp_io(struct io *io, int evt)
iobuf_normalize(&s->iobuf);
io_set_write(io);
- m_create(p_mfa, IMSG_SMTP_REQ_EOM, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_add_u32(p_mfa, s->datalen);
- m_close(p_mfa);
- smtp_wait_mfa(s, IMSG_SMTP_REQ_EOM);
+ smtp_filter_eom(s);
return;
}
@@ -1047,12 +1030,7 @@ smtp_command(struct smtp_session *s, char *line)
smtp_message_reset(s, 1);
- m_create(p_mfa, IMSG_SMTP_REQ_HELO, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_add_string(p_mfa, s->helo);
- m_close(p_mfa);
- smtp_wait_mfa(s, IMSG_SMTP_REQ_HELO);
-
+ smtp_filter_helo(s);
break;
/*
* SETUP
@@ -1181,11 +1159,7 @@ smtp_command(struct smtp_session *s, char *line)
if (args && smtp_parse_mail_args(s, args) == -1)
break;
- m_create(p_mfa, IMSG_SMTP_REQ_MAIL, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_add_mailaddr(p_mfa, &s->evp.sender);
- m_close(p_mfa);
- smtp_wait_mfa(s, IMSG_SMTP_REQ_MAIL);
+ smtp_filter_mail(s);
break;
/*
* TRANSACTION
@@ -1215,11 +1189,7 @@ smtp_command(struct smtp_session *s, char *line)
if (args && smtp_parse_rcpt_args(s, args) == -1)
break;
- m_create(p_mfa, IMSG_SMTP_REQ_RCPT, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_add_mailaddr(p_mfa, &s->evp.rcpt);
- m_close(p_mfa);
- smtp_wait_mfa(s, IMSG_SMTP_REQ_RCPT);
+ smtp_filter_rcpt(s);
break;
case CMD_RSET:
@@ -1230,9 +1200,7 @@ smtp_command(struct smtp_session *s, char *line)
break;
}
- m_create(p_mfa, IMSG_SMTP_EVENT_RSET, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_close(p_mfa);
+ smtp_filter_rset(s);
if (s->evp.id) {
m_create(p_queue, IMSG_SMTP_MESSAGE_ROLLBACK, 0, 0, -1);
@@ -1260,10 +1228,7 @@ smtp_command(struct smtp_session *s, char *line)
break;
}
- m_create(p_mfa, IMSG_SMTP_REQ_DATA, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_close(p_mfa);
- smtp_wait_mfa(s, IMSG_SMTP_REQ_DATA);
+ smtp_filter_data(s);
break;
/*
* ANY
@@ -1549,14 +1514,8 @@ smtp_connected(struct smtp_session *s)
return;
}
- m_create(p_mfa, IMSG_SMTP_REQ_CONNECT, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_add_sockaddr(p_mfa, (struct sockaddr *)&ss);
- m_add_sockaddr(p_mfa, (struct sockaddr *)&s->ss);
- m_add_string(p_mfa, s->hostname);
- m_close(p_mfa);
s->flags |= SF_MFACONNSENT;
- smtp_wait_mfa(s, IMSG_SMTP_REQ_CONNECT);
+ smtp_filter_connect(s, (struct sockaddr *)&ss);
}
static void
@@ -1706,13 +1665,6 @@ smtp_reply(struct smtp_session *s, char *fmt, ...)
}
static void
-smtp_wait_mfa(struct smtp_session *s, int type)
-{
- s->mfa_imsg = type;
- tree_xset(&wait_mfa_response, s->id, s);
-}
-
-static void
smtp_free(struct smtp_session *s, const char * reason)
{
struct smtp_rcpt *rcpt;
@@ -1720,7 +1672,6 @@ smtp_free(struct smtp_session *s, const char * reason)
log_debug("debug: smtp: %p: deleting session: %s", s, reason);
tree_pop(&wait_mfa_data, s->id);
- tree_pop(&wait_mfa_response, s->id);
if (s->ofile)
fclose(s->ofile);
@@ -1731,11 +1682,8 @@ smtp_free(struct smtp_session *s, const char * reason)
m_close(p_queue);
}
- if (s->flags & SF_MFACONNSENT) {
- m_create(p_mfa, IMSG_SMTP_EVENT_DISCONNECT, 0, 0, -1);
- m_add_id(p_mfa, s->id);
- m_close(p_mfa);
- }
+ if (s->flags & SF_MFACONNSENT)
+ smtp_filter_disconnect(s);
if (s->flags & SF_SECURE && s->listener->flags & F_SMTPS)
stat_decrement("smtp.smtps", 1);
@@ -1928,6 +1876,61 @@ smtp_sni_callback(SSL *ssl, int *ad, void *arg)
return SSL_TLSEXT_ERR_OK;
}
+static void
+smtp_filter_rset(struct smtp_session *s)
+{
+}
+
+static void
+smtp_filter_commit(struct smtp_session *s)
+{
+}
+
+static void
+smtp_filter_rollback(struct smtp_session *s)
+{
+}
+
+static void
+smtp_filter_disconnect(struct smtp_session *s)
+{
+}
+
+static void
+smtp_filter_connect(struct smtp_session *s, struct sockaddr *sa)
+{
+ smtp_mfa_response(s, IMSG_SMTP_REQ_CONNECT, MFA_OK, 0, NULL);
+}
+
+static void
+smtp_filter_eom(struct smtp_session *s)
+{
+ smtp_mfa_response(s, IMSG_SMTP_REQ_EOM, MFA_OK, 0, NULL);
+}
+
+static void
+smtp_filter_helo(struct smtp_session *s)
+{
+ smtp_mfa_response(s, IMSG_SMTP_REQ_HELO, MFA_OK, 0, NULL);
+}
+
+static void
+smtp_filter_mail(struct smtp_session *s)
+{
+ smtp_mfa_response(s, IMSG_SMTP_REQ_MAIL, MFA_OK, 0, NULL);
+}
+
+static void
+smtp_filter_rcpt(struct smtp_session *s)
+{
+ smtp_mfa_response(s, IMSG_SMTP_REQ_RCPT, MFA_OK, 0, NULL);
+}
+
+static void
+smtp_filter_data(struct smtp_session *s)
+{
+ smtp_mfa_response(s, IMSG_SMTP_REQ_DATA, MFA_OK, 0, NULL);
+}
#define CASE(x) case x : return #x
diff --git a/smtpd.c b/smtpd.c
index 1d977cd6..05d9d6d9 100644
--- a/smtpd.c
+++ b/smtpd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtpd.c,v 1.218 2014/04/04 16:10:42 eric Exp $ */
+/* $OpenBSD: smtpd.c,v 1.219 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -57,7 +57,6 @@ static void usage(void);
static void parent_shutdown(int);
static void parent_send_config(int, short, void *);
static void parent_send_config_lka(void);
-static void parent_send_config_mfa(void);
static void parent_send_config_pony(void);
static void parent_sig_handler(int, short, void *);
static void forkmda(struct mproc *, uint64_t, struct deliver *);
@@ -118,7 +117,6 @@ struct smtpd *env = NULL;
struct mproc *p_control = NULL;
struct mproc *p_lka = NULL;
-struct mproc *p_mfa = NULL;
struct mproc *p_parent = NULL;
struct mproc *p_queue = NULL;
struct mproc *p_scheduler = NULL;
@@ -235,7 +233,6 @@ parent_imsg(struct mproc *p, struct imsg *imsg)
m_end(&m);
log_verbose(v);
m_forward(p_lka, imsg);
- m_forward(p_mfa, imsg);
m_forward(p_queue, imsg);
m_forward(p_pony, imsg);
return;
@@ -319,7 +316,6 @@ static void
parent_send_config(int fd, short event, void *p)
{
parent_send_config_lka();
- parent_send_config_mfa();
parent_send_config_pony();
purge_config(PURGE_PKI);
}
@@ -333,14 +329,6 @@ parent_send_config_pony(void)
}
void
-parent_send_config_mfa()
-{
- log_debug("debug: parent_send_config_mfa: reloading");
- m_compose(p_mfa, IMSG_CONF_START, 0, 0, -1, NULL, 0);
- m_compose(p_mfa, IMSG_CONF_END, 0, 0, -1, NULL, 0);
-}
-
-void
parent_send_config_lka()
{
log_debug("debug: parent_send_config_ruleset: reloading");
@@ -659,7 +647,6 @@ main(int argc, char *argv[])
config_peer(PROC_CONTROL);
config_peer(PROC_LKA);
- config_peer(PROC_MFA);
config_peer(PROC_QUEUE);
config_peer(PROC_PONY);
config_done();
@@ -725,7 +712,6 @@ fork_peers(void)
child_add(queue(), CHILD_DAEMON, proc_title(PROC_QUEUE));
child_add(control(), CHILD_DAEMON, proc_title(PROC_CONTROL));
child_add(lka(), CHILD_DAEMON, proc_title(PROC_LKA));
- child_add(mfa(), CHILD_DAEMON, proc_title(PROC_MFA));
child_add(scheduler(), CHILD_DAEMON, proc_title(PROC_SCHEDULER));
child_add(pony(), CHILD_DAEMON, proc_title(PROC_PONY));
post_fork(PROC_PARENT);
@@ -1210,8 +1196,6 @@ proc_title(enum smtp_proc_type proc)
switch (proc) {
case PROC_PARENT:
return "[priv]";
- case PROC_MFA:
- return "filter";
case PROC_LKA:
return "lookup";
case PROC_QUEUE:
@@ -1233,8 +1217,6 @@ proc_name(enum smtp_proc_type proc)
switch (proc) {
case PROC_PARENT:
return "parent";
- case PROC_MFA:
- return "mfa";
case PROC_LKA:
return "lka";
case PROC_QUEUE:
@@ -1428,10 +1410,6 @@ parent_broadcast_verbose(uint32_t v)
m_add_int(p_pony, v);
m_close(p_pony);
- m_create(p_mfa, IMSG_CTL_VERBOSE, 0, 0, -1);
- m_add_int(p_mfa, v);
- m_close(p_mfa);
-
m_create(p_queue, IMSG_CTL_VERBOSE, 0, 0, -1);
m_add_int(p_queue, v);
m_close(p_queue);
@@ -1448,10 +1426,6 @@ parent_broadcast_profile(uint32_t v)
m_add_int(p_pony, v);
m_close(p_pony);
- m_create(p_mfa, IMSG_CTL_PROFILE, 0, 0, -1);
- m_add_int(p_mfa, v);
- m_close(p_mfa);
-
m_create(p_queue, IMSG_CTL_PROFILE, 0, 0, -1);
m_add_int(p_queue, v);
m_close(p_queue);
diff --git a/smtpd.h b/smtpd.h
index dfdf1f68..2a7b9624 100644
--- a/smtpd.h
+++ b/smtpd.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: smtpd.h,v 1.453 2014/04/09 12:47:23 eric Exp $ */
+/* $OpenBSD: smtpd.h,v 1.454 2014/04/09 18:55:19 eric Exp $ */
/*
* Copyright (c) 2008 Gilles Chehade <gilles@poolp.org>
@@ -31,7 +31,7 @@
#define MAILNAME_FILE "/etc/mail/mailname"
#define CA_FILE "/etc/ssl/cert.pem"
-#define PROC_COUNT 7
+#define PROC_COUNT 6
#define MAX_HOPS_COUNT 100
#define DEFAULT_MAX_BODY_SIZE (35*1024*1024)
@@ -293,7 +293,6 @@ enum blockmodes {
enum smtp_proc_type {
PROC_PARENT = 0,
- PROC_MFA,
PROC_LKA,
PROC_QUEUE,
PROC_CONTROL,
@@ -973,7 +972,6 @@ extern int profiling;
extern struct mproc *p_control;
extern struct mproc *p_parent;
extern struct mproc *p_lka;
-extern struct mproc *p_mfa;
extern struct mproc *p_queue;
extern struct mproc *p_scheduler;
extern struct mproc *p_pony;
diff --git a/smtpd/Makefile b/smtpd/Makefile
index 23dcb8de..4f6e2c6c 100644
--- a/smtpd/Makefile
+++ b/smtpd/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.72 2014/04/04 16:10:42 eric Exp $
+# $OpenBSD: Makefile,v 1.73 2014/04/09 18:55:19 eric Exp $
.PATH: ${.CURDIR}/..
@@ -7,7 +7,7 @@ PROG= smtpd
SRCS= aliases.c bounce.c ca.c compress_backend.c config.c \
control.c crypto.c delivery.c dict.c dns.c envelope.c esc.c \
expand.c forward.c iobuf.c ioev.c limit.c lka.c lka_session.c \
- log.c mda.c mfa.c mfa_session.c mproc.c \
+ log.c mda.c mproc.c \
mta.c mta_session.c parse.y pony.c queue.c queue_backend.c \
ruleset.c runq.c scheduler.c scheduler_backend.c \
smtp.c smtp_session.c smtpd.c ssl.c ssl_privsep.c \