From: Martijn van Duren Subject: smtpd: start with the deckchairs To: tech@openbsd.org Date: Fri, 5 Jun 2026 16:07:57 +0200 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;