smtpd: start with the deckchairs

Martijn van Duren <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
EHLO tech@,

I'm currently running with a diff that greatly reduces the amount of the
amount of SRCS per new binary. To create something with the least amount
of logic changes I want to create a main() per binary which is derived
from the current main(). This also means that the functions required by
main() inside smtpd.c need to be moved to a more suitable location.

This first diff moves log_imsg(), proc_title(), proc_name(), and
imsg_to_str() into util.c. There's other functions that need to be
moved, but those need their own file, since they would pull in a
dependency hell into the other binaries that now include util.c.

OK?

martijn@

diff c7a21344ea409a87e0b5948decc9b0a0effe7481 5e8d775f0ae5d3ec31c40491e7c42ac35dd34f01
commit - c7a21344ea409a87e0b5948decc9b0a0effe7481
commit + 5e8d775f0ae5d3ec31c40491e7c42ac35dd34f01
blob - 2609be577a05081685109df0d923427e22230189
blob + cb86d6a6aee03def5aefe6a702a6f9155df5ac21
--- usr.sbin/smtpd/smtpd.c
+++ usr.sbin/smtpd/smtpd.c
@@ -1883,254 +1883,6 @@ imsg_dispatch(struct mproc *p, struct imsg *imsg)
 	}
 }
 
-void
-log_imsg(int to, int from, struct imsg *imsg)
-{
-
-	if (to == PROC_CONTROL && imsg->hdr.type == IMSG_STAT_SET)
-		return;
-
-	log_trace(TRACE_IMSG, "imsg: %s <- %s: %s (len=%zu)",
-	    proc_name(to),
-	    proc_name(from),
-	    imsg_to_str(imsg->hdr.type),
-	    imsg->hdr.len - IMSG_HEADER_SIZE);
-}
-
-const char *
-proc_title(enum smtp_proc_type proc)
-{
-	switch (proc) {
-	case PROC_PARENT:
-		return "[priv]";
-	case PROC_LKA:
-		return "lookup";
-	case PROC_QUEUE:
-		return "queue";
-	case PROC_CONTROL:
-		return "control";
-	case PROC_SCHEDULER:
-		return "scheduler";
-	case PROC_DISPATCHER:
-		return "dispatcher";
-	case PROC_CA:
-		return "crypto";
-	case PROC_CLIENT:
-		return "client";
-	case PROC_PROCESSOR:
-		return "processor";
-	}
-	return "unknown";
-}
-
-const char *
-proc_name(enum smtp_proc_type proc)
-{
-	switch (proc) {
-	case PROC_PARENT:
-		return "parent";
-	case PROC_LKA:
-		return "lka";
-	case PROC_QUEUE:
-		return "queue";
-	case PROC_CONTROL:
-		return "control";
-	case PROC_SCHEDULER:
-		return "scheduler";
-	case PROC_DISPATCHER:
-		return "dispatcher";
-	case PROC_CA:
-		return "ca";
-	case PROC_CLIENT:
-		return "client-proc";
-	default:
-		return "unknown";
-	}
-}
-
-#define CASE(x) case x : return #x
-
-const char *
-imsg_to_str(int type)
-{
-	static char	 buf[32];
-
-	switch (type) {
-	CASE(IMSG_NONE);
-
-	CASE(IMSG_CTL_OK);
-	CASE(IMSG_CTL_FAIL);
-
-	CASE(IMSG_CTL_GET_DIGEST);
-	CASE(IMSG_CTL_GET_STATS);
-	CASE(IMSG_CTL_LIST_MESSAGES);
-	CASE(IMSG_CTL_LIST_ENVELOPES);
-	CASE(IMSG_CTL_MTA_SHOW_HOSTS);
-	CASE(IMSG_CTL_MTA_SHOW_RELAYS);
-	CASE(IMSG_CTL_MTA_SHOW_ROUTES);
-	CASE(IMSG_CTL_MTA_SHOW_HOSTSTATS);
-	CASE(IMSG_CTL_MTA_BLOCK);
-	CASE(IMSG_CTL_MTA_UNBLOCK);
-	CASE(IMSG_CTL_MTA_SHOW_BLOCK);
-	CASE(IMSG_CTL_PAUSE_EVP);
-	CASE(IMSG_CTL_PAUSE_MDA);
-	CASE(IMSG_CTL_PAUSE_MTA);
-	CASE(IMSG_CTL_PAUSE_SMTP);
-	CASE(IMSG_CTL_PROFILE);
-	CASE(IMSG_CTL_PROFILE_DISABLE);
-	CASE(IMSG_CTL_PROFILE_ENABLE);
-	CASE(IMSG_CTL_RESUME_EVP);
-	CASE(IMSG_CTL_RESUME_MDA);
-	CASE(IMSG_CTL_RESUME_MTA);
-	CASE(IMSG_CTL_RESUME_SMTP);
-	CASE(IMSG_CTL_RESUME_ROUTE);
-	CASE(IMSG_CTL_REMOVE);
-	CASE(IMSG_CTL_SCHEDULE);
-	CASE(IMSG_CTL_SHOW_STATUS);
-	CASE(IMSG_CTL_TRACE_DISABLE);
-	CASE(IMSG_CTL_TRACE_ENABLE);
-	CASE(IMSG_CTL_UPDATE_TABLE);
-	CASE(IMSG_CTL_VERBOSE);
-	CASE(IMSG_CTL_DISCOVER_EVPID);
-	CASE(IMSG_CTL_DISCOVER_MSGID);
-
-	CASE(IMSG_CTL_SMTP_SESSION);
-
-	CASE(IMSG_GETADDRINFO);
-	CASE(IMSG_GETADDRINFO_END);
-	CASE(IMSG_GETNAMEINFO);
-	CASE(IMSG_RES_QUERY);
-
-	CASE(IMSG_SETUP_KEY);
-	CASE(IMSG_SETUP_PEER);
-	CASE(IMSG_SETUP_DONE);
-
-	CASE(IMSG_CONF_START);
-	CASE(IMSG_CONF_END);
-
-	CASE(IMSG_STAT_INCREMENT);
-	CASE(IMSG_STAT_DECREMENT);
-	CASE(IMSG_STAT_SET);
-
-	CASE(IMSG_LKA_AUTHENTICATE);
-	CASE(IMSG_LKA_OPEN_FORWARD);
-	CASE(IMSG_LKA_ENVELOPE_SUBMIT);
-	CASE(IMSG_LKA_ENVELOPE_COMMIT);
-
-	CASE(IMSG_QUEUE_DELIVER);
-	CASE(IMSG_QUEUE_DELIVERY_OK);
-	CASE(IMSG_QUEUE_DELIVERY_TEMPFAIL);
-	CASE(IMSG_QUEUE_DELIVERY_PERMFAIL);
-	CASE(IMSG_QUEUE_DELIVERY_LOOP);
-	CASE(IMSG_QUEUE_DISCOVER_EVPID);
-	CASE(IMSG_QUEUE_DISCOVER_MSGID);
-	CASE(IMSG_QUEUE_ENVELOPE_ACK);
-	CASE(IMSG_QUEUE_ENVELOPE_COMMIT);
-	CASE(IMSG_QUEUE_ENVELOPE_REMOVE);
-	CASE(IMSG_QUEUE_ENVELOPE_SCHEDULE);
-	CASE(IMSG_QUEUE_ENVELOPE_SUBMIT);
-	CASE(IMSG_QUEUE_HOLDQ_HOLD);
-	CASE(IMSG_QUEUE_HOLDQ_RELEASE);
-	CASE(IMSG_QUEUE_MESSAGE_COMMIT);
-	CASE(IMSG_QUEUE_MESSAGE_ROLLBACK);
-	CASE(IMSG_QUEUE_SMTP_SESSION);
-	CASE(IMSG_QUEUE_TRANSFER);
-
-	CASE(IMSG_MDA_DELIVERY_OK);
-	CASE(IMSG_MDA_DELIVERY_TEMPFAIL);
-	CASE(IMSG_MDA_DELIVERY_PERMFAIL);
-	CASE(IMSG_MDA_DELIVERY_LOOP);
-	CASE(IMSG_MDA_DELIVERY_HOLD);
-	CASE(IMSG_MDA_DONE);
-	CASE(IMSG_MDA_FORK);
-	CASE(IMSG_MDA_HOLDQ_RELEASE);
-	CASE(IMSG_MDA_LOOKUP_USERINFO);
-	CASE(IMSG_MDA_KILL);
-	CASE(IMSG_MDA_OPEN_MESSAGE);
-
-	CASE(IMSG_MTA_DELIVERY_OK);
-	CASE(IMSG_MTA_DELIVERY_TEMPFAIL);
-	CASE(IMSG_MTA_DELIVERY_PERMFAIL);
-	CASE(IMSG_MTA_DELIVERY_LOOP);
-	CASE(IMSG_MTA_DELIVERY_HOLD);
-	CASE(IMSG_MTA_DNS_HOST);
-	CASE(IMSG_MTA_DNS_HOST_END);
-	CASE(IMSG_MTA_DNS_MX);
-	CASE(IMSG_MTA_DNS_MX_PREFERENCE);
-	CASE(IMSG_MTA_HOLDQ_RELEASE);
-	CASE(IMSG_MTA_LOOKUP_CREDENTIALS);
-	CASE(IMSG_MTA_LOOKUP_SOURCE);
-	CASE(IMSG_MTA_LOOKUP_HELO);
-	CASE(IMSG_MTA_LOOKUP_SMARTHOST);
-	CASE(IMSG_MTA_OPEN_MESSAGE);
-	CASE(IMSG_MTA_SCHEDULE);
-
-	CASE(IMSG_SCHED_ENVELOPE_BOUNCE);
-	CASE(IMSG_SCHED_ENVELOPE_DELIVER);
-	CASE(IMSG_SCHED_ENVELOPE_EXPIRE);
-	CASE(IMSG_SCHED_ENVELOPE_INJECT);
-	CASE(IMSG_SCHED_ENVELOPE_REMOVE);
-	CASE(IMSG_SCHED_ENVELOPE_TRANSFER);
-
-	CASE(IMSG_SMTP_AUTHENTICATE);
-	CASE(IMSG_SMTP_MESSAGE_COMMIT);
-	CASE(IMSG_SMTP_MESSAGE_CREATE);
-	CASE(IMSG_SMTP_MESSAGE_ROLLBACK);
-	CASE(IMSG_SMTP_MESSAGE_OPEN);
-	CASE(IMSG_SMTP_CHECK_SENDER);
-	CASE(IMSG_SMTP_EXPAND_RCPT);
-	CASE(IMSG_SMTP_LOOKUP_HELO);
-
-	CASE(IMSG_SMTP_REQ_CONNECT);
-	CASE(IMSG_SMTP_REQ_HELO);
-	CASE(IMSG_SMTP_REQ_MAIL);
-	CASE(IMSG_SMTP_REQ_RCPT);
-	CASE(IMSG_SMTP_REQ_DATA);
-	CASE(IMSG_SMTP_REQ_EOM);
-	CASE(IMSG_SMTP_EVENT_RSET);
-	CASE(IMSG_SMTP_EVENT_COMMIT);
-	CASE(IMSG_SMTP_EVENT_ROLLBACK);
-	CASE(IMSG_SMTP_EVENT_DISCONNECT);
-
-	CASE(IMSG_LKA_PROCESSOR_FORK);
-	CASE(IMSG_LKA_PROCESSOR_ERRFD);
-
-	CASE(IMSG_REPORT_SMTP_LINK_CONNECT);
-	CASE(IMSG_REPORT_SMTP_LINK_DISCONNECT);
-	CASE(IMSG_REPORT_SMTP_LINK_GREETING);
-	CASE(IMSG_REPORT_SMTP_LINK_IDENTIFY);
-	CASE(IMSG_REPORT_SMTP_LINK_TLS);
-	CASE(IMSG_REPORT_SMTP_LINK_AUTH);
-	CASE(IMSG_REPORT_SMTP_TX_RESET);
-	CASE(IMSG_REPORT_SMTP_TX_BEGIN);
-	CASE(IMSG_REPORT_SMTP_TX_MAIL);
-	CASE(IMSG_REPORT_SMTP_TX_RCPT);
-	CASE(IMSG_REPORT_SMTP_TX_ENVELOPE);
-	CASE(IMSG_REPORT_SMTP_TX_DATA);
-	CASE(IMSG_REPORT_SMTP_TX_COMMIT);
-	CASE(IMSG_REPORT_SMTP_TX_ROLLBACK);
-	CASE(IMSG_REPORT_SMTP_PROTOCOL_CLIENT);
-	CASE(IMSG_REPORT_SMTP_PROTOCOL_SERVER);
-	CASE(IMSG_REPORT_SMTP_FILTER_RESPONSE);
-	CASE(IMSG_REPORT_SMTP_TIMEOUT);
-
-	CASE(IMSG_FILTER_SMTP_BEGIN);
-	CASE(IMSG_FILTER_SMTP_END);
-	CASE(IMSG_FILTER_SMTP_PROTOCOL);
-	CASE(IMSG_FILTER_SMTP_DATA_BEGIN);
-	CASE(IMSG_FILTER_SMTP_DATA_END);
-
-	CASE(IMSG_CA_RSA_PRIVENC);
-	CASE(IMSG_CA_RSA_PRIVDEC);
-	CASE(IMSG_CA_ECDSA_SIGN);
-
-	default:
-		(void)snprintf(buf, sizeof(buf), "IMSG_??? (%d)", type);
-
-		return buf;
-	}
-}
-
 int
 parent_auth_user(const char *username, const char *password)
 {
blob - 9058e4c36c4a06411f713e822ff1e0e350d69ee5
blob + fa5d31d6926331c11978f0abab5809bad60909b6
--- usr.sbin/smtpd/smtpd.h
+++ usr.sbin/smtpd/smtpd.h
@@ -1606,10 +1606,6 @@ void smtp_session_imsg(struct mproc *, struct imsg *);
 
 /* smtpd.c */
 void imsg_dispatch(struct mproc *, struct imsg *);
-const char *proc_name(enum smtp_proc_type);
-const char *proc_title(enum smtp_proc_type);
-const char *imsg_to_str(int);
-void log_imsg(int, int, struct imsg *);
 int fork_proc_backend(const char *, const char *, const char *, int);
 
 
@@ -1724,6 +1720,10 @@ int base64_decode(char const *, unsigned char *, size_
 int base64_encode_rfc3548(unsigned char const *, size_t,
 		      char *, size_t);
 
+const char *proc_name(enum smtp_proc_type);
+const char *proc_title(enum smtp_proc_type);
+const char *imsg_to_str(int);
+void log_imsg(int, int, struct imsg *);
 void log_trace_verbose(int);
 void log_trace0(const char *, ...)
     __attribute__((format (printf, 1, 2)));
blob - 1a0392c12df3fdc6347670ff8b43308f95e150cd
blob + 3603e29900059f49ab29e51799cc1488844417fb
--- usr.sbin/smtpd/util.c
+++ usr.sbin/smtpd/util.c
@@ -832,7 +832,255 @@ base64_encode_rfc3548(unsigned char const *src, size_t
 	return ret;
 }
 
+#define CASE(x) case x : return #x
+
+const char *
+imsg_to_str(int type)
+{
+	static char	 buf[32];
+
+	switch (type) {
+	CASE(IMSG_NONE);
+
+	CASE(IMSG_CTL_OK);
+	CASE(IMSG_CTL_FAIL);
+
+	CASE(IMSG_CTL_GET_DIGEST);
+	CASE(IMSG_CTL_GET_STATS);
+	CASE(IMSG_CTL_LIST_MESSAGES);
+	CASE(IMSG_CTL_LIST_ENVELOPES);
+	CASE(IMSG_CTL_MTA_SHOW_HOSTS);
+	CASE(IMSG_CTL_MTA_SHOW_RELAYS);
+	CASE(IMSG_CTL_MTA_SHOW_ROUTES);
+	CASE(IMSG_CTL_MTA_SHOW_HOSTSTATS);
+	CASE(IMSG_CTL_MTA_BLOCK);
+	CASE(IMSG_CTL_MTA_UNBLOCK);
+	CASE(IMSG_CTL_MTA_SHOW_BLOCK);
+	CASE(IMSG_CTL_PAUSE_EVP);
+	CASE(IMSG_CTL_PAUSE_MDA);
+	CASE(IMSG_CTL_PAUSE_MTA);
+	CASE(IMSG_CTL_PAUSE_SMTP);
+	CASE(IMSG_CTL_PROFILE);
+	CASE(IMSG_CTL_PROFILE_DISABLE);
+	CASE(IMSG_CTL_PROFILE_ENABLE);
+	CASE(IMSG_CTL_RESUME_EVP);
+	CASE(IMSG_CTL_RESUME_MDA);
+	CASE(IMSG_CTL_RESUME_MTA);
+	CASE(IMSG_CTL_RESUME_SMTP);
+	CASE(IMSG_CTL_RESUME_ROUTE);
+	CASE(IMSG_CTL_REMOVE);
+	CASE(IMSG_CTL_SCHEDULE);
+	CASE(IMSG_CTL_SHOW_STATUS);
+	CASE(IMSG_CTL_TRACE_DISABLE);
+	CASE(IMSG_CTL_TRACE_ENABLE);
+	CASE(IMSG_CTL_UPDATE_TABLE);
+	CASE(IMSG_CTL_VERBOSE);
+	CASE(IMSG_CTL_DISCOVER_EVPID);
+	CASE(IMSG_CTL_DISCOVER_MSGID);
+
+	CASE(IMSG_CTL_SMTP_SESSION);
+
+	CASE(IMSG_GETADDRINFO);
+	CASE(IMSG_GETADDRINFO_END);
+	CASE(IMSG_GETNAMEINFO);
+	CASE(IMSG_RES_QUERY);
+
+	CASE(IMSG_SETUP_KEY);
+	CASE(IMSG_SETUP_PEER);
+	CASE(IMSG_SETUP_DONE);
+
+	CASE(IMSG_CONF_START);
+	CASE(IMSG_CONF_END);
+
+	CASE(IMSG_STAT_INCREMENT);
+	CASE(IMSG_STAT_DECREMENT);
+	CASE(IMSG_STAT_SET);
+
+	CASE(IMSG_LKA_AUTHENTICATE);
+	CASE(IMSG_LKA_OPEN_FORWARD);
+	CASE(IMSG_LKA_ENVELOPE_SUBMIT);
+	CASE(IMSG_LKA_ENVELOPE_COMMIT);
+
+	CASE(IMSG_QUEUE_DELIVER);
+	CASE(IMSG_QUEUE_DELIVERY_OK);
+	CASE(IMSG_QUEUE_DELIVERY_TEMPFAIL);
+	CASE(IMSG_QUEUE_DELIVERY_PERMFAIL);
+	CASE(IMSG_QUEUE_DELIVERY_LOOP);
+	CASE(IMSG_QUEUE_DISCOVER_EVPID);
+	CASE(IMSG_QUEUE_DISCOVER_MSGID);
+	CASE(IMSG_QUEUE_ENVELOPE_ACK);
+	CASE(IMSG_QUEUE_ENVELOPE_COMMIT);
+	CASE(IMSG_QUEUE_ENVELOPE_REMOVE);
+	CASE(IMSG_QUEUE_ENVELOPE_SCHEDULE);
+	CASE(IMSG_QUEUE_ENVELOPE_SUBMIT);
+	CASE(IMSG_QUEUE_HOLDQ_HOLD);
+	CASE(IMSG_QUEUE_HOLDQ_RELEASE);
+	CASE(IMSG_QUEUE_MESSAGE_COMMIT);
+	CASE(IMSG_QUEUE_MESSAGE_ROLLBACK);
+	CASE(IMSG_QUEUE_SMTP_SESSION);
+	CASE(IMSG_QUEUE_TRANSFER);
+
+	CASE(IMSG_MDA_DELIVERY_OK);
+	CASE(IMSG_MDA_DELIVERY_TEMPFAIL);
+	CASE(IMSG_MDA_DELIVERY_PERMFAIL);
+	CASE(IMSG_MDA_DELIVERY_LOOP);
+	CASE(IMSG_MDA_DELIVERY_HOLD);
+	CASE(IMSG_MDA_DONE);
+	CASE(IMSG_MDA_FORK);
+	CASE(IMSG_MDA_HOLDQ_RELEASE);
+	CASE(IMSG_MDA_LOOKUP_USERINFO);
+	CASE(IMSG_MDA_KILL);
+	CASE(IMSG_MDA_OPEN_MESSAGE);
+
+	CASE(IMSG_MTA_DELIVERY_OK);
+	CASE(IMSG_MTA_DELIVERY_TEMPFAIL);
+	CASE(IMSG_MTA_DELIVERY_PERMFAIL);
+	CASE(IMSG_MTA_DELIVERY_LOOP);
+	CASE(IMSG_MTA_DELIVERY_HOLD);
+	CASE(IMSG_MTA_DNS_HOST);
+	CASE(IMSG_MTA_DNS_HOST_END);
+	CASE(IMSG_MTA_DNS_MX);
+	CASE(IMSG_MTA_DNS_MX_PREFERENCE);
+	CASE(IMSG_MTA_HOLDQ_RELEASE);
+	CASE(IMSG_MTA_LOOKUP_CREDENTIALS);
+	CASE(IMSG_MTA_LOOKUP_SOURCE);
+	CASE(IMSG_MTA_LOOKUP_HELO);
+	CASE(IMSG_MTA_LOOKUP_SMARTHOST);
+	CASE(IMSG_MTA_OPEN_MESSAGE);
+	CASE(IMSG_MTA_SCHEDULE);
+
+	CASE(IMSG_SCHED_ENVELOPE_BOUNCE);
+	CASE(IMSG_SCHED_ENVELOPE_DELIVER);
+	CASE(IMSG_SCHED_ENVELOPE_EXPIRE);
+	CASE(IMSG_SCHED_ENVELOPE_INJECT);
+	CASE(IMSG_SCHED_ENVELOPE_REMOVE);
+	CASE(IMSG_SCHED_ENVELOPE_TRANSFER);
+
+	CASE(IMSG_SMTP_AUTHENTICATE);
+	CASE(IMSG_SMTP_MESSAGE_COMMIT);
+	CASE(IMSG_SMTP_MESSAGE_CREATE);
+	CASE(IMSG_SMTP_MESSAGE_ROLLBACK);
+	CASE(IMSG_SMTP_MESSAGE_OPEN);
+	CASE(IMSG_SMTP_CHECK_SENDER);
+	CASE(IMSG_SMTP_EXPAND_RCPT);
+	CASE(IMSG_SMTP_LOOKUP_HELO);
+
+	CASE(IMSG_SMTP_REQ_CONNECT);
+	CASE(IMSG_SMTP_REQ_HELO);
+	CASE(IMSG_SMTP_REQ_MAIL);
+	CASE(IMSG_SMTP_REQ_RCPT);
+	CASE(IMSG_SMTP_REQ_DATA);
+	CASE(IMSG_SMTP_REQ_EOM);
+	CASE(IMSG_SMTP_EVENT_RSET);
+	CASE(IMSG_SMTP_EVENT_COMMIT);
+	CASE(IMSG_SMTP_EVENT_ROLLBACK);
+	CASE(IMSG_SMTP_EVENT_DISCONNECT);
+
+	CASE(IMSG_LKA_PROCESSOR_FORK);
+	CASE(IMSG_LKA_PROCESSOR_ERRFD);
+
+	CASE(IMSG_REPORT_SMTP_LINK_CONNECT);
+	CASE(IMSG_REPORT_SMTP_LINK_DISCONNECT);
+	CASE(IMSG_REPORT_SMTP_LINK_GREETING);
+	CASE(IMSG_REPORT_SMTP_LINK_IDENTIFY);
+	CASE(IMSG_REPORT_SMTP_LINK_TLS);
+	CASE(IMSG_REPORT_SMTP_LINK_AUTH);
+	CASE(IMSG_REPORT_SMTP_TX_RESET);
+	CASE(IMSG_REPORT_SMTP_TX_BEGIN);
+	CASE(IMSG_REPORT_SMTP_TX_MAIL);
+	CASE(IMSG_REPORT_SMTP_TX_RCPT);
+	CASE(IMSG_REPORT_SMTP_TX_ENVELOPE);
+	CASE(IMSG_REPORT_SMTP_TX_DATA);
+	CASE(IMSG_REPORT_SMTP_TX_COMMIT);
+	CASE(IMSG_REPORT_SMTP_TX_ROLLBACK);
+	CASE(IMSG_REPORT_SMTP_PROTOCOL_CLIENT);
+	CASE(IMSG_REPORT_SMTP_PROTOCOL_SERVER);
+	CASE(IMSG_REPORT_SMTP_FILTER_RESPONSE);
+	CASE(IMSG_REPORT_SMTP_TIMEOUT);
+
+	CASE(IMSG_FILTER_SMTP_BEGIN);
+	CASE(IMSG_FILTER_SMTP_END);
+	CASE(IMSG_FILTER_SMTP_PROTOCOL);
+	CASE(IMSG_FILTER_SMTP_DATA_BEGIN);
+	CASE(IMSG_FILTER_SMTP_DATA_END);
+
+	CASE(IMSG_CA_RSA_PRIVENC);
+	CASE(IMSG_CA_RSA_PRIVDEC);
+	CASE(IMSG_CA_ECDSA_SIGN);
+
+	default:
+		(void)snprintf(buf, sizeof(buf), "IMSG_??? (%d)", type);
+
+		return buf;
+	}
+}
+
+const char *
+proc_title(enum smtp_proc_type proc)
+{
+	switch (proc) {
+	case PROC_PARENT:
+		return "[priv]";
+	case PROC_LKA:
+		return "lookup";
+	case PROC_QUEUE:
+		return "queue";
+	case PROC_CONTROL:
+		return "control";
+	case PROC_SCHEDULER:
+		return "scheduler";
+	case PROC_DISPATCHER:
+		return "dispatcher";
+	case PROC_CA:
+		return "crypto";
+	case PROC_CLIENT:
+		return "client";
+	case PROC_PROCESSOR:
+		return "processor";
+	}
+	return "unknown";
+}
+
+const char *
+proc_name(enum smtp_proc_type proc)
+{
+	switch (proc) {
+	case PROC_PARENT:
+		return "parent";
+	case PROC_LKA:
+		return "lka";
+	case PROC_QUEUE:
+		return "queue";
+	case PROC_CONTROL:
+		return "control";
+	case PROC_SCHEDULER:
+		return "scheduler";
+	case PROC_DISPATCHER:
+		return "dispatcher";
+	case PROC_CA:
+		return "ca";
+	case PROC_CLIENT:
+		return "client-proc";
+	default:
+		return "unknown";
+	}
+}
+
 void
+log_imsg(int to, int from, struct imsg *imsg)
+{
+
+	if (to == PROC_CONTROL && imsg->hdr.type == IMSG_STAT_SET)
+		return;
+
+	log_trace(TRACE_IMSG, "imsg: %s <- %s: %s (len=%zu)",
+	    proc_name(to),
+	    proc_name(from),
+	    imsg_to_str(imsg->hdr.type),
+	    imsg->hdr.len - IMSG_HEADER_SIZE);
+}
+
+void
 log_trace0(const char *emsg, ...)
 {
 	va_list	 ap;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.