From: Stephan Bosch Date: Fri, 9 Mar 2018 15:03:23 +0000 (+0100) Subject: lib-smtp: client: Add support for forcibly enabling support for a capability. X-Git-Tag: 2.3.1~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73654d4e91977d105b3918047241c2683b31389f;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: client: Add support for forcibly enabling support for a capability. Then it is enabled even when the server does not list it in the EHLO response. --- diff --git a/src/lib-smtp/smtp-client-connection.c b/src/lib-smtp/smtp-client-connection.c index 82b0d6e5ca..1b442c4113 100644 --- a/src/lib-smtp/smtp-client-connection.c +++ b/src/lib-smtp/smtp-client-connection.c @@ -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); diff --git a/src/lib-smtp/smtp-client.c b/src/lib-smtp/smtp-client.c index 4f92e395a9..5ee5a29110 100644 --- a/src/lib-smtp/smtp-client.c +++ b/src/lib-smtp/smtp-client.c @@ -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); diff --git a/src/lib-smtp/smtp-client.h b/src/lib-smtp/smtp-client.h index cbc9ddfc24..b0c8a3e9fa 100644 --- a/src/lib-smtp/smtp-client.h +++ b/src/lib-smtp/smtp-client.h @@ -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;