Commit Diff


commit - 4fb726123ba56ecd6994f718ca9944b17c4a37c0
commit + d229c1230652b1b3184296bf0ab7e987938d09bf
blob - a48260a5eb6a3d11e723e81e8f95aa2e50037d46
blob + 982566ed5b64fc6cc41835fcdc4a835f5eefba17
--- opensmtpd.c
+++ opensmtpd.c
@@ -40,15 +40,480 @@
 
 #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
@@ -1,480 +0,0 @@
-/*
- * 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
-	}
-};