# HG changeset patch # User Timo Sirainen # Date 1399556489 -10800 # Node ID 8ba4253adc9bd884e864ad34897ab434b2eae3f0 # Parent d6bd9acd97e7c3b62b5ccf341f5b614d9c489156 *-login: SSL connections didn't get closed when the client got destroyed. diff -r d6bd9acd97e7 -r 8ba4253adc9b src/imap-login/client.c --- a/src/imap-login/client.c Fri Oct 05 00:26:19 2012 +0300 +++ b/src/imap-login/client.c Thu May 08 16:41:29 2014 +0300 @@ -557,6 +557,8 @@ client_unlink(&client->common); + if (!client->login_success && client->common.proxy != NULL) + ssl_proxy_destroy(client->common.proxy); if (client->common.input != NULL) i_stream_close(client->common.input); if (client->output != NULL) diff -r d6bd9acd97e7 -r 8ba4253adc9b src/login-common/ssl-proxy-openssl.c --- a/src/login-common/ssl-proxy-openssl.c Fri Oct 05 00:26:19 2012 +0300 +++ b/src/login-common/ssl-proxy-openssl.c Thu May 08 16:41:29 2014 +0300 @@ -80,7 +80,6 @@ static void ssl_read(struct ssl_proxy *proxy); static void ssl_write(struct ssl_proxy *proxy); static void ssl_step(struct ssl_proxy *proxy); -static void ssl_proxy_destroy(struct ssl_proxy *proxy); static void ssl_proxy_unref(struct ssl_proxy *proxy); static void ssl_params_corrupted(const char *path) @@ -676,7 +675,7 @@ main_unref(); } -static void ssl_proxy_destroy(struct ssl_proxy *proxy) +void ssl_proxy_destroy(struct ssl_proxy *proxy) { if (proxy->destroyed) return; diff -r d6bd9acd97e7 -r 8ba4253adc9b src/login-common/ssl-proxy.c --- a/src/login-common/ssl-proxy.c Fri Oct 05 00:26:19 2012 +0300 +++ b/src/login-common/ssl-proxy.c Thu May 08 16:41:29 2014 +0300 @@ -55,6 +55,8 @@ return ""; } +void ssl_proxy_destroy(struct ssl_proxy *proxy ATTR_UNUSED) {} + void ssl_proxy_free(struct ssl_proxy *proxy ATTR_UNUSED) {} unsigned int ssl_proxy_get_count(void) diff -r d6bd9acd97e7 -r 8ba4253adc9b src/login-common/ssl-proxy.h --- a/src/login-common/ssl-proxy.h Fri Oct 05 00:26:19 2012 +0300 +++ b/src/login-common/ssl-proxy.h Thu May 08 16:41:29 2014 +0300 @@ -24,6 +24,7 @@ bool ssl_proxy_is_handshaked(const struct ssl_proxy *proxy) ATTR_PURE; const char *ssl_proxy_get_last_error(const struct ssl_proxy *proxy) ATTR_PURE; const char *ssl_proxy_get_security_string(struct ssl_proxy *proxy); +void ssl_proxy_destroy(struct ssl_proxy *proxy); void ssl_proxy_free(struct ssl_proxy *proxy); /* Return number of active SSL proxies */ diff -r d6bd9acd97e7 -r 8ba4253adc9b src/pop3-login/client.c --- a/src/pop3-login/client.c Fri Oct 05 00:26:19 2012 +0300 +++ b/src/pop3-login/client.c Thu May 08 16:41:29 2014 +0300 @@ -359,6 +359,8 @@ client_unlink(&client->common); + if (!client->login_success && client->common.proxy != NULL) + ssl_proxy_destroy(client->common.proxy); if (client->common.input != NULL) i_stream_close(client->common.input); if (client->output != NULL)