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.9~2151 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2eb2121761d99870c36f1c2b6bb975d09a270af6;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 775c3be641..272cebaa88 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; @@ -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); diff --git a/src/lib-smtp/smtp-client.c b/src/lib-smtp/smtp-client.c index c5f5fe3937..6e50491333 100644 --- a/src/lib-smtp/smtp-client.c +++ b/src/lib-smtp/smtp-client.c @@ -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); diff --git a/src/lib-smtp/smtp-client.h b/src/lib-smtp/smtp-client.h index 3aaa39be0a..8914935ff8 100644 --- a/src/lib-smtp/smtp-client.h +++ b/src/lib-smtp/smtp-client.h @@ -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;