From 66c162cc802fd990359857be563eaa048b2ebeeb Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sat, 10 Mar 2018 19:13:24 +0100 Subject: [PATCH] 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. --- src/lib-smtp/smtp-client-connection.c | 19 +++++++++++++++++++ src/lib-smtp/smtp-client-connection.h | 6 ++++++ 2 files changed, 25 insertions(+) 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); -- 2.47.3