From: Stephan Bosch Date: Mon, 3 Dec 2018 17:45:39 +0000 (+0100) Subject: lib-smtp: server: Use the HELO domain provided to smtp_server_connection_login()... X-Git-Tag: 2.3.5~32 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=be6f4099ab67726df38caabaf1a4f46f726c857a;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: server: Use the HELO domain provided to smtp_server_connection_login() immediately. Before, it was only used when no new HELO/EHLO command was issued before MAIL. --- diff --git a/src/lib-smtp/smtp-server-cmd-mail.c b/src/lib-smtp/smtp-server-cmd-mail.c index a4eb4fcbb3..998b9ba486 100644 --- a/src/lib-smtp/smtp-server-cmd-mail.c +++ b/src/lib-smtp/smtp-server-cmd-mail.c @@ -128,15 +128,6 @@ void smtp_server_cmd_mail(struct smtp_server_cmd_ctx *cmd, return; } - if (conn->pending_helo == NULL && conn->helo.domain == NULL && - conn->helo_login != NULL && *conn->helo_login != '\0') { - /* no EHLO executed post-login, use pre-login value instead */ - conn->helo_domain = conn->helo_login; - conn->helo.domain = conn->helo_domain; - conn->helo.domain_valid = TRUE; - conn->helo_login = NULL; - } - mail_data = p_new(cmd->pool, struct smtp_server_cmd_mail, 1); if (conn->set.protocol == SMTP_PROTOCOL_LMTP) diff --git a/src/lib-smtp/smtp-server-connection.c b/src/lib-smtp/smtp-server-connection.c index 0beb6fd525..a2b3f81dfc 100644 --- a/src/lib-smtp/smtp-server-connection.c +++ b/src/lib-smtp/smtp-server-connection.c @@ -1178,7 +1178,6 @@ bool smtp_server_connection_unref(struct smtp_server_connection **_conn) connection_deinit(&conn->conn); i_free(conn->helo_domain); - i_free(conn->helo_login); i_free(conn->username); i_free(conn->disconnect_reason); pool_unref(&conn->pool); @@ -1268,10 +1267,15 @@ void smtp_server_connection_login(struct smtp_server_connection *conn, { i_assert(!conn->started); i_assert(conn->username == NULL); + i_assert(conn->helo_domain == NULL); conn->set.capabilities &= ~SMTP_CAPABILITY_STARTTLS; conn->username = i_strdup(username); - conn->helo_login = i_strdup(helo); + if (helo != NULL && *helo != '\0') { + conn->helo_domain = i_strdup(helo); + conn->helo.domain = conn->helo_domain; + conn->helo.domain_valid = TRUE; + } conn->authenticated = TRUE; conn->ssl_secured = ssl_secured; @@ -1422,7 +1426,6 @@ void smtp_server_connection_clear(struct smtp_server_connection *conn) smtp_server_connection_debug(conn, "Connection clear"); i_free(conn->helo_domain); - i_free(conn->helo_login); i_zero(&conn->helo); smtp_server_connection_reset_state(conn); } diff --git a/src/lib-smtp/smtp-server-private.h b/src/lib-smtp/smtp-server-private.h index aa1605abdc..70f8762797 100644 --- a/src/lib-smtp/smtp-server-private.h +++ b/src/lib-smtp/smtp-server-private.h @@ -161,7 +161,7 @@ struct smtp_server_connection { unsigned int proxy_timeout_secs; struct smtp_server_helo_data helo, *pending_helo; - char *helo_domain, *helo_login, *username; + char *helo_domain, *username; unsigned int id; struct timeout *to_idle;