]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-server-connection - Record proxied EHLO domain separately.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 18 Jun 2021 17:27:40 +0000 (19:27 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Fri, 23 Jul 2021 06:47:02 +0000 (06:47 +0000)
This prevents it from being overriden by a local EHLO command.

src/lib-smtp/smtp-server-connection.c
src/lib-smtp/smtp-server-private.h

index 741688ea86f3c20dd922ffa36423b064bec53a36..ea9c9e2935951d318a7fc8741171e0908143d977 100644 (file)
@@ -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);
index bb7f25c09282816c2d74a3fc96710ca86acdc25d..61183cf0e50e19a6f200e900a1d8d7d2ad1192ee 100644 (file)
@@ -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;