From: Stephan Bosch Date: Sat, 10 Mar 2018 18:13:24 +0000 (+0100) Subject: lib-smtp: client: Add smtp_client_connection_create_ip(). X-Git-Tag: 2.3.9~2139 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=66c162cc802fd990359857be563eaa048b2ebeeb;p=thirdparty%2Fdovecot%2Fcore.git lib-smtp: client: Add smtp_client_connection_create_ip(). This allows making SMTP client connections without performing a DNS lookup. The optional hostname parameter is used to verify the hostname in the SSL certificate from the server, if any. --- diff --git a/src/lib-smtp/smtp-client-connection.c b/src/lib-smtp/smtp-client-connection.c index a024d8aabb..811dde546b 100644 --- a/src/lib-smtp/smtp-client-connection.c +++ b/src/lib-smtp/smtp-client-connection.c @@ -1712,6 +1712,25 @@ smtp_client_connection_create(struct smtp_client *client, return conn; } +struct smtp_client_connection * +smtp_client_connection_create_ip(struct smtp_client *client, + enum smtp_protocol protocol, const struct ip_addr *ip, in_port_t port, + const char *hostname, enum smtp_client_connection_ssl_mode ssl_mode, + const struct smtp_client_settings *set) +{ + struct smtp_client_connection *conn; + + if (hostname == NULL) + hostname = net_ip2addr(ip); + + conn = smtp_client_connection_create(client, protocol, hostname, port, + ssl_mode, set); + conn->ips_count = 1; + conn->ips = i_new(struct ip_addr, conn->ips_count); + conn->ips[0] = *ip; + return conn; +} + void smtp_client_connection_ref(struct smtp_client_connection *conn) { i_assert(conn->refcount >= 0); diff --git a/src/lib-smtp/smtp-client-connection.h b/src/lib-smtp/smtp-client-connection.h index 09f4c9937a..31ebfdb1e9 100644 --- a/src/lib-smtp/smtp-client-connection.h +++ b/src/lib-smtp/smtp-client-connection.h @@ -40,6 +40,12 @@ smtp_client_connection_create(struct smtp_client *client, enum smtp_client_connection_ssl_mode ssl_mode, const struct smtp_client_settings *set) ATTR_NULL(6); +struct smtp_client_connection * +smtp_client_connection_create_ip(struct smtp_client *client, + enum smtp_protocol protocol, const struct ip_addr *ip, in_port_t port, + const char *hostname, enum smtp_client_connection_ssl_mode ssl_mode, + const struct smtp_client_settings *set) + ATTR_NULL(5,7); void smtp_client_connection_ref(struct smtp_client_connection *conn); void smtp_client_connection_unref(struct smtp_client_connection **_conn); void smtp_client_connection_close(struct smtp_client_connection **_conn);