Lines 1-119
Link Here
|
1 |
Index: src/connections.c |
|
|
2 |
=================================================================== |
3 |
--- src/connections.c (revision 2103) |
4 |
+++ src/connections.c (revision 2136) |
5 |
@@ -200,4 +200,5 @@ |
6 |
/* don't resize the buffer if we were in SSL_ERROR_WANT_* */ |
7 |
|
8 |
+ ERR_clear_error(); |
9 |
do { |
10 |
if (!con->ssl_error_want_reuse_buffer) { |
11 |
@@ -1670,4 +1671,5 @@ |
12 |
if (srv_sock->is_ssl) { |
13 |
int ret; |
14 |
+ ERR_clear_error(); |
15 |
switch ((ret = SSL_shutdown(con->ssl))) { |
16 |
case 1: |
17 |
@@ -1675,6 +1677,8 @@ |
18 |
break; |
19 |
case 0: |
20 |
- SSL_shutdown(con->ssl); |
21 |
- break; |
22 |
+ ERR_clear_error(); |
23 |
+ if ((ret = SSL_shutdown(con->ssl)) == 1) break; |
24 |
+ |
25 |
+ // fall through |
26 |
default: |
27 |
log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:", |
28 |
Index: src/network_openssl.c |
29 |
=================================================================== |
30 |
--- src/network_openssl.c (revision 2084) |
31 |
+++ src/network_openssl.c (revision 2136) |
32 |
@@ -86,4 +86,5 @@ |
33 |
*/ |
34 |
|
35 |
+ ERR_clear_error(); |
36 |
if ((r = SSL_write(ssl, offset, toSend)) <= 0) { |
37 |
unsigned long err; |
38 |
@@ -188,4 +189,5 @@ |
39 |
close(ifd); |
40 |
|
41 |
+ ERR_clear_error(); |
42 |
if ((r = SSL_write(ssl, s, toSend)) <= 0) { |
43 |
unsigned long err; |
44 |
Index: src/connections.c |
45 |
=================================================================== |
46 |
--- src/connections.c (revision 2136) |
47 |
+++ src/connections.c (revision 2139) |
48 |
@@ -1670,5 +1670,6 @@ |
49 |
#ifdef USE_OPENSSL |
50 |
if (srv_sock->is_ssl) { |
51 |
- int ret; |
52 |
+ int ret, ssl_r; |
53 |
+ unsigned long err; |
54 |
ERR_clear_error(); |
55 |
switch ((ret = SSL_shutdown(con->ssl))) { |
56 |
@@ -1678,14 +1679,40 @@ |
57 |
case 0: |
58 |
ERR_clear_error(); |
59 |
- if ((ret = SSL_shutdown(con->ssl)) == 1) break; |
60 |
+ if (-1 != (ret = SSL_shutdown(con->ssl))) break; |
61 |
|
62 |
// fall through |
63 |
default: |
64 |
- log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:", |
65 |
- SSL_get_error(con->ssl, ret), |
66 |
- ERR_error_string(ERR_get_error(), NULL)); |
67 |
- return -1; |
68 |
+ |
69 |
+ switch ((ssl_r = SSL_get_error(con->ssl, ret))) { |
70 |
+ case SSL_ERROR_WANT_WRITE: |
71 |
+ case SSL_ERROR_WANT_READ: |
72 |
+ break; |
73 |
+ case SSL_ERROR_SYSCALL: |
74 |
+ /* perhaps we have error waiting in our error-queue */ |
75 |
+ if (0 != (err = ERR_get_error())) { |
76 |
+ do { |
77 |
+ log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:", |
78 |
+ ssl_r, ret, |
79 |
+ ERR_error_string(err, NULL)); |
80 |
+ } while((err = ERR_get_error())); |
81 |
+ } else { |
82 |
+ log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL (error):", |
83 |
+ ssl_r, r, errno, |
84 |
+ strerror(errno)); |
85 |
+ } |
86 |
+ |
87 |
+ break; |
88 |
+ default: |
89 |
+ while((err = ERR_get_error())) { |
90 |
+ log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:", |
91 |
+ ssl_r, ret, |
92 |
+ ERR_error_string(err, NULL)); |
93 |
+ } |
94 |
+ |
95 |
+ break; |
96 |
+ } |
97 |
} |
98 |
} |
99 |
+ ERR_clear_error(); |
100 |
#endif |
101 |
|
102 |
Index: src/connections.c |
103 |
=================================================================== |
104 |
--- src/connections.c (revision 2139) |
105 |
+++ src/connections.c (revision 2144) |
106 |
@@ -1681,5 +1681,5 @@ |
107 |
if (-1 != (ret = SSL_shutdown(con->ssl))) break; |
108 |
|
109 |
- // fall through |
110 |
+ /* fall through */ |
111 |
default: |
112 |
|
113 |
@@ -1698,5 +1698,5 @@ |
114 |
} else { |
115 |
log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL (error):", |
116 |
- ssl_r, r, errno, |
117 |
+ ssl_r, ret, errno, |
118 |
strerror(errno)); |
119 |
} |