]> 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)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 14 Mar 2018 08:11:01 +0000 (10:11 +0200)
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 82b0d6e5cab6858994041a456f5c3791f6a5bdc1..1b442c4113f8561db1655460b5b807d92fd73cfa 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;
@@ -1627,6 +1627,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);
 
@@ -1683,6 +1685,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 4f92e395a94c38ecd892f08517a01609b97a7bb0..5ee5a291100460f79a23515fc5339566541e5ba1 100644 (file)
@@ -32,6 +32,9 @@ struct smtp_client *smtp_client_init(const struct smtp_client_settings *set)
        client->pool = pool;
 
        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 cbc9ddfc2466f06b0865db57e945079e3970614b..b0c8a3e9faa73ab37e4ecbe471fae7e37334738c 100644 (file)
@@ -41,6 +41,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;