aboutsummaryrefslogtreecommitdiffstats
path: root/main/dovecot/CVE-2014-3430.patch
blob: f1c95411cc5929f026512efa76c8190d85e71a42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

# HG changeset patch
# User Timo Sirainen <tss@iki.fi>
# Date 1399472781 -10800
# Node ID b7ac23b4d3390367a06d3de498747d3dedd2475b
# Parent  b20b4071a282bc64bcc665b67ab5a8449bde36f4
*-login: SSL connections didn't get closed when the client got destroyed.

diff -r b20b4071a282 -r b7ac23b4d339 src/login-common/client-common.c
--- a/src/login-common/client-common.c	Mon Aug 05 14:06:23 2013 +0300
+++ b/src/login-common/client-common.c	Wed May 07 17:26:21 2014 +0300
@@ -142,6 +142,8 @@
 		last_client = client->prev;
 	DLLIST_REMOVE(&clients, client);
 
+	if (!client->login_success && client->ssl_proxy != NULL)
+		ssl_proxy_destroy(client->ssl_proxy);
 	if (client->input != NULL)
 		i_stream_close(client->input);
 	if (client->output != NULL)
diff -r b20b4071a282 -r b7ac23b4d339 src/login-common/ssl-proxy-openssl.c
--- a/src/login-common/ssl-proxy-openssl.c	Mon Aug 05 14:06:23 2013 +0300
+++ b/src/login-common/ssl-proxy-openssl.c	Wed May 07 17:26:21 2014 +0300
@@ -108,7 +108,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 struct ssl_server_context *
@@ -783,7 +782,7 @@
 	i_free(proxy);
 }
 
-static void ssl_proxy_destroy(struct ssl_proxy *proxy)
+void ssl_proxy_destroy(struct ssl_proxy *proxy)
 {
 	if (proxy->destroyed)
 		return;
diff -r b20b4071a282 -r b7ac23b4d339 src/login-common/ssl-proxy.h
--- a/src/login-common/ssl-proxy.h	Mon Aug 05 14:06:23 2013 +0300
+++ b/src/login-common/ssl-proxy.h	Wed May 07 17:26:21 2014 +0300
@@ -31,6 +31,7 @@
 const char *ssl_proxy_get_security_string(struct ssl_proxy *proxy);
 const char *ssl_proxy_get_compression(struct ssl_proxy *proxy);
 const char *ssl_proxy_get_cert_error(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 */