From: Timo Sirainen Date: Fri, 5 Mar 2021 15:03:11 +0000 (+0200) Subject: lib-smtp, lmtp, submission: Move adding "(state=%s)" in disconnection reason to lib... X-Git-Tag: 2.3.15~283 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c05c419c69a3085bc668a2dda7c2eb730a7d18fe;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp, lmtp, submission: Move adding "(state=%s)" in disconnection reason to lib-smtp The following changes will break this in submission and lmtp. The state will be reset before conn_disconnect() is called, so they would always log state=READY. --- diff --git a/src/lib-smtp/smtp-server-connection.c b/src/lib-smtp/smtp-server-connection.c index c0ee9428ed..c462238f5a 100644 --- a/src/lib-smtp/smtp-server-connection.c +++ b/src/lib-smtp/smtp-server-connection.c @@ -1074,6 +1074,10 @@ smtp_server_connection_disconnect(struct smtp_server_connection *conn, reason = t_strdup_printf("%s (unfinished %s command)", reason, cmd->reg->name); } + if (!conn->set.no_state_in_reason) { + reason = t_strdup_printf("%s (state=%s)", reason, + smtp_server_state_names[conn->state.state]); + } e_debug(conn->event, "Disconnected: %s", reason); conn->disconnect_reason = i_strdup(reason); diff --git a/src/lib-smtp/smtp-server.c b/src/lib-smtp/smtp-server.c index d70c61b74e..f48b60a159 100644 --- a/src/lib-smtp/smtp-server.c +++ b/src/lib-smtp/smtp-server.c @@ -84,6 +84,7 @@ struct smtp_server *smtp_server_init(const struct smtp_server_settings *set) server->set.rcpt_domain_optional = set->rcpt_domain_optional; server->set.mail_path_allow_broken = set->mail_path_allow_broken; server->set.debug = set->debug; + server->set.no_state_in_reason = set->no_state_in_reason; /* There is no event log prefix added here, since the server itself does not log anything. */ diff --git a/src/lib-smtp/smtp-server.h b/src/lib-smtp/smtp-server.h index 0e91c6b835..e7f2983093 100644 --- a/src/lib-smtp/smtp-server.h +++ b/src/lib-smtp/smtp-server.h @@ -396,6 +396,8 @@ struct smtp_server_settings { /* The path provided to the RCPT command does not need to have the domain part. */ bool rcpt_domain_optional:1; + /* Don't include "(state=%s)" in the disconnection reason string. */ + bool no_state_in_reason:1; }; struct smtp_server_stats { diff --git a/src/lmtp/lmtp-client.c b/src/lmtp/lmtp-client.c index 498367f3d0..c55e4f7801 100644 --- a/src/lmtp/lmtp-client.c +++ b/src/lmtp/lmtp-client.c @@ -291,9 +291,8 @@ void client_disconnect(struct client *client, const char *enh_code, if (reason == NULL) reason = "Connection closed"; - e_info(client->event, "Disconnect from %s: %s (state=%s)", - client_remote_id(client), reason, - smtp_server_state_names[client->state.state]); + e_info(client->event, "Disconnect from %s: %s", + client_remote_id(client), reason); if (conn != NULL) { smtp_server_connection_terminate( diff --git a/src/submission-login/client.c b/src/submission-login/client.c index 43ae9ee7c0..479eb0d806 100644 --- a/src/submission-login/client.c +++ b/src/submission-login/client.c @@ -256,6 +256,9 @@ static void submission_login_init(void) smtp_server_set.protocol = SMTP_PROTOCOL_SMTP; smtp_server_set.max_pipelined_commands = 5; smtp_server_set.max_bad_commands = CLIENT_MAX_BAD_COMMANDS; + /* Pre-auth state is always logged either as GREETING or READY. + It's not very useful. */ + smtp_server_set.no_state_in_reason = TRUE; smtp_server = smtp_server_init(&smtp_server_set); } diff --git a/src/submission/submission-client.c b/src/submission/submission-client.c index c40f6d3474..bda83b3b25 100644 --- a/src/submission/submission-client.c +++ b/src/submission/submission-client.c @@ -468,10 +468,9 @@ void client_disconnect(struct client *client, const char *enh_code, log_reason = reason = "Connection closed"; else log_reason = t_str_oneline(reason); - i_info("Disconnect from %s: %s %s (state=%s)", + i_info("Disconnect from %s: %s %s", client_remote_id(client), - log_reason, client_stats(client), - smtp_server_state_names[client->state.state]); + log_reason, client_stats(client)); conn = client->conn; client->conn = NULL;