changeset 9658:8ba4253adc9b HEAD tip

*-login: SSL connections didn't get closed when the client got destroyed.
author Timo Sirainen <tss@iki.fi>
date Thu, 08 May 2014 16:41:29 +0300
parents d6bd9acd97e7
children
files src/imap-login/client.c src/login-common/ssl-proxy-openssl.c src/login-common/ssl-proxy.c src/login-common/ssl-proxy.h src/pop3-login/client.c
diffstat 5 files changed, 8 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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)
--- 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;
--- 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)
--- 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 */
--- 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)