]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: client: Add support for forcibly enabling support for a capability.
authorStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 9 Mar 2018 15:03:23 +0000 (16:03 +0100)
committerStephan Bosch <stephan.bosch@dovecot.fi>
Fri, 9 Mar 2018 15:03:23 +0000 (16:03 +0100)
Then it is enabled even when the server does not list it in the EHLO response.

src/lib-smtp/smtp-client-connection.c
src/lib-smtp/smtp-client.c
src/lib-smtp/smtp-client.h

index 775c3be64160ff8141b0030428c9ddf640d68e1a..272cebaa88595154b6012e6b6e71617d23d5ee28 100644 (file)
@@ -800,7 +800,7 @@ smtp_client_connection_handshake_cb(const struct smtp_reply *reply,
 
        /* reset capabilities */
        p_clear(conn->cap_pool);
-       conn->capabilities = 0;
+       conn->capabilities = conn->set.forced_capabilities;
        conn->cap_xclient_args = NULL;
        conn->cap_auth_mechanisms = NULL;
        conn->cap_size = 0;
@@ -1635,6 +1635,8 @@ smtp_client_connection_create(struct smtp_client *client,
                if (set->my_hostname != NULL && *set->my_hostname != '\0')
                        conn->set.my_hostname = p_strdup(pool, set->my_hostname);
 
+               conn->set.forced_capabilities |= set->forced_capabilities;
+
                if (set->rawlog_dir != NULL && *set->rawlog_dir != '\0')
                        conn->set.rawlog_dir = p_strdup_empty(pool, set->rawlog_dir);
 
@@ -1691,6 +1693,7 @@ smtp_client_connection_create(struct smtp_client *client,
        i_assert(conn->set.my_hostname != NULL &&
                *conn->set.my_hostname != '\0');
 
+       conn->capabilities = conn->set.forced_capabilities;
        conn->cap_pool = pool_alloconly_create
                ("smtp client connection capabilities", 128);
 
index c5f5fe39372b2e71b31d6a85e04218b138301c3a..6e5049133391ca99dcf3c438eb287d883d0f49e4 100644 (file)
@@ -33,6 +33,9 @@ struct smtp_client *smtp_client_init(const struct smtp_client_settings *set)
 
        client->set.my_ip = set->my_ip;
        client->set.my_hostname = p_strdup(pool, set->my_hostname);
+
+       client->set.forced_capabilities = set->forced_capabilities;
+
        client->set.dns_client = set->dns_client;
        client->set.dns_client_socket_path =
                p_strdup(pool, set->dns_client_socket_path);
index 3aaa39be0a2e778e5614821132a544e3648cc67d..8914935ff824b2a75ae0e082e143d6a0be4f5510 100644 (file)
@@ -42,6 +42,8 @@ struct smtp_client_settings {
        const char *my_hostname;
        const char *temp_path_prefix;
 
+       enum smtp_capability forced_capabilities;
+
        struct dns_client *dns_client;
        const char *dns_client_socket_path;