commit - 4fb726123ba56ecd6994f718ca9944b17c4a37c0
commit + d229c1230652b1b3184296bf0ab7e987938d09bf
blob - a48260a5eb6a3d11e723e81e8f95aa2e50037d46
blob + 982566ed5b64fc6cc41835fcdc4a835f5eefba17
--- opensmtpd.c
+++ opensmtpd.c
#define NITEMS(x) (sizeof(x) / sizeof(*x))
+struct osmtpd_callback {
+ enum osmtpd_type type;
+ enum osmtpd_phase phase;
+ int incoming;
+ void (*osmtpd_cb)(struct osmtpd_callback *, struct osmtpd_ctx *, char *,
+ char *);
+ void *cb;
+ int doregister;
+ int storereport;
+};
+
+struct osmtpd_session {
+ struct osmtpd_ctx ctx;
+ RB_ENTRY(osmtpd_session) entry;
+};
+
+static void osmtpd_register(enum osmtpd_type, enum osmtpd_phase, int, int,
+ void *);
+static const char *osmtpd_typetostr(enum osmtpd_type);
+static const char *osmtpd_phasetostr(enum osmtpd_phase);
+static enum osmtpd_phase osmtpd_strtophase(const char *, const char *);
+static void osmtpd_newline(struct io *, int, void *);
+static void osmtpd_outevt(struct io *, int, void *);
+static void osmtpd_noargs(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_onearg(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_connect(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_link_connect(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_link_disconnect(struct osmtpd_callback *,
+ struct osmtpd_ctx *, char *, char *);
+static void osmtpd_link_identify(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_link_tls(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_tx_begin(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_tx_mail(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_tx_rcpt(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_tx_envelope(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_tx_data(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_tx_commit(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_tx_rollback(struct osmtpd_callback *, struct osmtpd_ctx *,
+ char *, char *);
+static void osmtpd_addrtoss(char *, struct sockaddr_storage *, int, char *);
+static enum osmtpd_status osmtpd_strtostatus(const char *, char *);
+static int osmtpd_session_cmp(struct osmtpd_session *, struct osmtpd_session *);
+static void *(*oncreatecb)(struct osmtpd_ctx *) = NULL;
+static void (*ondeletecb)(struct osmtpd_ctx *, void *) = NULL;
+
+
+static struct osmtpd_callback osmtpd_callbacks[] = {
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_CONNECT,
+ 1,
+ osmtpd_connect,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_HELO,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_EHLO,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_STARTTLS,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_AUTH,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_MAIL_FROM,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_RCPT_TO,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_DATA,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_DATA_LINE,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_RSET,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_QUIT,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_NOOP,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_HELP,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_WIZ,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_FILTER,
+ OSMTPD_PHASE_COMMIT,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_CONNECT,
+ 1,
+ osmtpd_link_connect,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_DISCONNECT,
+ 1,
+ osmtpd_link_disconnect,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_IDENTIFY,
+ 1,
+ osmtpd_link_identify,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_TLS,
+ 1,
+ osmtpd_link_tls,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_BEGIN,
+ 1,
+ osmtpd_tx_begin,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_MAIL,
+ 1,
+ osmtpd_tx_mail,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_RCPT,
+ 1,
+ osmtpd_tx_rcpt,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_ENVELOPE,
+ 1,
+ osmtpd_tx_envelope,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_DATA,
+ 1,
+ osmtpd_tx_data,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_COMMIT,
+ 1,
+ osmtpd_tx_commit,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_ROLLBACK,
+ 1,
+ osmtpd_tx_rollback,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_PROTOCOL_CLIENT,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_PROTOCOL_SERVER,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_FILTER_RESPONSE,
+ 1,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TIMEOUT,
+ 1,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_CONNECT,
+ 0,
+ osmtpd_link_connect,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_DISCONNECT,
+ 0,
+ osmtpd_link_disconnect,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_IDENTIFY,
+ 0,
+ osmtpd_link_identify,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_LINK_TLS,
+ 0,
+ osmtpd_link_tls,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_BEGIN,
+ 0,
+ osmtpd_tx_begin,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_MAIL,
+ 0,
+ osmtpd_tx_mail,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_RCPT,
+ 0,
+ osmtpd_tx_rcpt,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_ENVELOPE,
+ 0,
+ osmtpd_tx_envelope,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_DATA,
+ 0,
+ osmtpd_tx_data,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_COMMIT,
+ 0,
+ osmtpd_tx_commit,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TX_ROLLBACK,
+ 0,
+ osmtpd_tx_rollback,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_PROTOCOL_CLIENT,
+ 0,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_PROTOCOL_SERVER,
+ 0,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_FILTER_RESPONSE,
+ 0,
+ osmtpd_onearg,
+ NULL,
+ 0,
+ 0
+ },
+ {
+ OSMTPD_TYPE_REPORT,
+ OSMTPD_PHASE_TIMEOUT,
+ 0,
+ osmtpd_noargs,
+ NULL,
+ 0,
+ 0
+ }
+};
+
static struct io *io_stdout;
-
-RB_HEAD(osmtpd_sessions, osmtpd_session) osmtpd_sessions = RB_INITIALIZER(NULL);
-RB_PROTOTYPE(osmtpd_sessions, osmtpd_session, entry, osmtpd_session_cmp);
-
static int ready = 0;
/* Default from smtpd */
static int session_timeout = 300;
+RB_HEAD(osmtpd_sessions, osmtpd_session) osmtpd_sessions = RB_INITIALIZER(NULL);
+RB_PROTOTYPE(osmtpd_sessions, osmtpd_session, entry, osmtpd_session_cmp);
+
void
osmtpd_register_filter_connect(void (*cb)(struct osmtpd_ctx *, const char *,
struct sockaddr_storage *))
blob - 77e3caf57b2a00d8ffc439f99d39c0db3975040c (mode 644)
blob + /dev/null
--- opensmtpd_priv.h
+++ /dev/null
-/*
- * Copyright (c) 2019 Martijn van Duren <martijn@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-struct osmtpd_callback {
- enum osmtpd_type type;
- enum osmtpd_phase phase;
- int incoming;
- void (*osmtpd_cb)(struct osmtpd_callback *, struct osmtpd_ctx *, char *,
- char *);
- void *cb;
- int doregister;
- int storereport;
-};
-
-struct osmtpd_session {
- struct osmtpd_ctx ctx;
- RB_ENTRY(osmtpd_session) entry;
-};
-
-static void osmtpd_register(enum osmtpd_type, enum osmtpd_phase, int, int,
- void *);
-static const char *osmtpd_typetostr(enum osmtpd_type);
-static const char *osmtpd_phasetostr(enum osmtpd_phase);
-static enum osmtpd_phase osmtpd_strtophase(const char *, const char *);
-static void osmtpd_newline(struct io *, int, void *);
-static void osmtpd_outevt(struct io *, int, void *);
-static void osmtpd_noargs(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_onearg(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_connect(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_link_connect(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_link_disconnect(struct osmtpd_callback *,
- struct osmtpd_ctx *, char *, char *);
-static void osmtpd_link_identify(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_link_tls(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_tx_begin(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_tx_mail(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_tx_rcpt(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_tx_envelope(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_tx_data(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_tx_commit(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_tx_rollback(struct osmtpd_callback *, struct osmtpd_ctx *,
- char *, char *);
-static void osmtpd_addrtoss(char *, struct sockaddr_storage *, int, char *);
-static enum osmtpd_status osmtpd_strtostatus(const char *, char *);
-static int osmtpd_session_cmp(struct osmtpd_session *, struct osmtpd_session *);
-static void *(*oncreatecb)(struct osmtpd_ctx *) = NULL;
-static void (*ondeletecb)(struct osmtpd_ctx *, void *) = NULL;
-
-
-static struct osmtpd_callback osmtpd_callbacks[] = {
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_CONNECT,
- 1,
- osmtpd_connect,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_HELO,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_EHLO,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_STARTTLS,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_AUTH,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_MAIL_FROM,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_RCPT_TO,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_DATA,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_DATA_LINE,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_RSET,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_QUIT,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_NOOP,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_HELP,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_WIZ,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_FILTER,
- OSMTPD_PHASE_COMMIT,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_CONNECT,
- 1,
- osmtpd_link_connect,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_DISCONNECT,
- 1,
- osmtpd_link_disconnect,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_IDENTIFY,
- 1,
- osmtpd_link_identify,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_TLS,
- 1,
- osmtpd_link_tls,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_BEGIN,
- 1,
- osmtpd_tx_begin,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_MAIL,
- 1,
- osmtpd_tx_mail,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_RCPT,
- 1,
- osmtpd_tx_rcpt,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_ENVELOPE,
- 1,
- osmtpd_tx_envelope,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_DATA,
- 1,
- osmtpd_tx_data,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_COMMIT,
- 1,
- osmtpd_tx_commit,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_ROLLBACK,
- 1,
- osmtpd_tx_rollback,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_PROTOCOL_CLIENT,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_PROTOCOL_SERVER,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_FILTER_RESPONSE,
- 1,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TIMEOUT,
- 1,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_CONNECT,
- 0,
- osmtpd_link_connect,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_DISCONNECT,
- 0,
- osmtpd_link_disconnect,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_IDENTIFY,
- 0,
- osmtpd_link_identify,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_LINK_TLS,
- 0,
- osmtpd_link_tls,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_BEGIN,
- 0,
- osmtpd_tx_begin,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_MAIL,
- 0,
- osmtpd_tx_mail,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_RCPT,
- 0,
- osmtpd_tx_rcpt,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_ENVELOPE,
- 0,
- osmtpd_tx_envelope,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_DATA,
- 0,
- osmtpd_tx_data,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_COMMIT,
- 0,
- osmtpd_tx_commit,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TX_ROLLBACK,
- 0,
- osmtpd_tx_rollback,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_PROTOCOL_CLIENT,
- 0,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_PROTOCOL_SERVER,
- 0,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_FILTER_RESPONSE,
- 0,
- osmtpd_onearg,
- NULL,
- 0,
- 0
- },
- {
- OSMTPD_TYPE_REPORT,
- OSMTPD_PHASE_TIMEOUT,
- 0,
- osmtpd_noargs,
- NULL,
- 0,
- 0
- }
-};