From: Stephan Bosch Date: Fri, 18 Jun 2021 17:27:40 +0000 (+0200) Subject: lib-smtp: smtp-server-connection - Record proxied EHLO domain separately. X-Git-Tag: 2.3.17~285 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b33f1b875d2512cfd990c95f05a759b73024877a;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: smtp-server-connection - Record proxied EHLO domain separately. This prevents it from being overriden by a local EHLO command. --- diff --git a/src/lib-smtp/smtp-server-connection.c b/src/lib-smtp/smtp-server-connection.c index 741688ea86..ea9c9e2935 100644 --- a/src/lib-smtp/smtp-server-connection.c +++ b/src/lib-smtp/smtp-server-connection.c @@ -1117,6 +1117,7 @@ bool smtp_server_connection_unref(struct smtp_server_connection **_conn) connection_deinit(&conn->conn); + i_free(conn->proxy_helo); i_free(conn->helo_domain); i_free(conn->username); event_unref(&conn->next_trans_event); @@ -1518,7 +1519,9 @@ void smtp_server_connection_get_proxy_data(struct smtp_server_connection *conn, i_zero(proxy_data); proxy_data->source_ip = conn->conn.remote_ip; proxy_data->source_port = conn->conn.remote_port; - if (conn->helo.domain_valid) + if (conn->proxy_helo != NULL) + proxy_data->helo = conn->proxy_helo; + else if (conn->helo.domain_valid) proxy_data->helo = conn->helo.domain; proxy_data->login = conn->username; @@ -1548,6 +1551,10 @@ void smtp_server_connection_set_proxy_data( conn->helo_domain = i_strdup(proxy_data->helo); conn->helo.domain = conn->helo_domain; conn->helo.domain_valid = TRUE; + if (conn->helo.domain_valid) { + i_free(conn->proxy_helo); + conn->proxy_helo = i_strdup(proxy_data->helo); + } } if (proxy_data->login != NULL) { i_free(conn->username); diff --git a/src/lib-smtp/smtp-server-private.h b/src/lib-smtp/smtp-server-private.h index bb7f25c092..61183cf0e5 100644 --- a/src/lib-smtp/smtp-server-private.h +++ b/src/lib-smtp/smtp-server-private.h @@ -158,6 +158,7 @@ struct smtp_server_connection { enum smtp_proxy_protocol proxy_proto; unsigned int proxy_ttl_plus_1; unsigned int proxy_timeout_secs; + char *proxy_helo; struct smtp_server_helo_data helo, *pending_helo; char *helo_domain, *username;