Changeset 2140
- Timestamp:
- 03/30/2008 01:19:53 PM (5 months ago)
- Location:
- trunk
- Files:
-
- 3 modified
-
NEWS (modified) (1 diff)
-
src/connections.c (modified) (2 diffs)
-
src/network_openssl.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEWS
r2135 r2140 27 27 * fcgi-stat-accel: Fix unused var / indentation 28 28 * fix mod_compress bug (#1027) 29 * fix ssl error queue handling (#285) (CVE-2008-1531) 29 30 30 31 - 1.5.0-r19.. - -
trunk/src/connections.c
r2131 r2140 103 103 104 104 if (con->sock->ssl) { 105 switch (SSL_shutdown(con->sock->ssl)) { 105 int ret, ssl_r; 106 unsigned long err; 107 108 ERR_clear_error(); 109 switch (ret = SSL_shutdown(con->sock->ssl)) { 106 110 case 1: 107 111 /* done */ … … 111 115 * 112 116 * FIXME: wait for fdevent and call SSL_shutdown again 113 * 117 * (But it is not that important as we close the underlying connection anyway) 114 118 */ 115 119 116 120 break; 117 121 default: 118 ERROR("SSL_shutdown failed: %s", ERR_error_string(ERR_get_error(), NULL)); 122 switch ((ssl_r = SSL_get_error(con->sock->ssl, ret))) { 123 case SSL_ERROR_WANT_WRITE: 124 case SSL_ERROR_WANT_READ: 125 break; 126 case SSL_ERROR_SYSCALL: 127 /* perhaps we have error waiting in our error-queue */ 128 if (0 != (err = ERR_get_error())) { 129 do { 130 ERROR("SSL_shutdown failed (%i, %i): %s", ssl_r, ret, ERR_error_string(err, NULL)); 131 } while((err = ERR_get_error())); 132 } else { 133 ERROR("SSL_shutdown failed (%i, %i, %i): %s", ssl_r, ret, errno, strerror(errno)); 134 } 135 136 break; 137 default: 138 while((err = ERR_get_error())) { 139 ERROR("SSL_shutdown failed (%i, %i): %s", ssl_r, ret, ERR_error_string(err, NULL)); 140 } 141 } 119 142 } 120 143 121 144 SSL_free(con->sock->ssl); 145 ERR_clear_error(); 122 146 con->sock->ssl = NULL; 123 147 } -
trunk/src/network_openssl.c
r2131 r2140 45 45 b = chunkqueue_get_append_buffer(cq); 46 46 buffer_prepare_copy(b, 8192 + 12); /* ssl-chunk-size is 8kb */ 47 ERR_clear_error(); 47 48 len = SSL_read(sock->ssl, b->ptr, b->size - 1); 48 49 … … 184 185 */ 185 186 187 ERR_clear_error(); 186 188 if (toSend != 0 && (r = SSL_write(sock->ssl, offset, toSend)) <= 0) { 187 189 unsigned long err; … … 288 290 close(ifd); 289 291 292 ERR_clear_error(); 290 293 if ((r = SSL_write(sock->ssl, s, toSend)) <= 0) { 291 294 unsigned long err;

