e6db108b7c
from lighttpd svn (changeset 2144); via brad@
71 lines
1.9 KiB
Plaintext
71 lines
1.9 KiB
Plaintext
$OpenBSD: patch-src_connections_c,v 1.6 2008/04/08 19:11:40 jasper Exp $
|
|
--- src/connections.c.orig Wed Feb 27 18:41:35 2008
|
|
+++ src/connections.c Mon Apr 7 21:39:42 2008
|
|
@@ -199,6 +199,7 @@ static int connection_handle_read_ssl(server *srv, con
|
|
|
|
/* don't resize the buffer if we were in SSL_ERROR_WANT_* */
|
|
|
|
+ ERR_clear_error();
|
|
do {
|
|
if (!con->ssl_error_want_reuse_buffer) {
|
|
b = buffer_init();
|
|
@@ -1668,21 +1669,51 @@ int connection_state_machine(server *srv, connection *
|
|
}
|
|
#ifdef USE_OPENSSL
|
|
if (srv_sock->is_ssl) {
|
|
- int ret;
|
|
+ int ret, ssl_r;
|
|
+ unsigned long err;
|
|
+ ERR_clear_error();
|
|
switch ((ret = SSL_shutdown(con->ssl))) {
|
|
case 1:
|
|
/* ok */
|
|
break;
|
|
case 0:
|
|
- SSL_shutdown(con->ssl);
|
|
- break;
|
|
+ ERR_clear_error();
|
|
+ if (-1 != (ret = SSL_shutdown(con->ssl))) break;
|
|
+
|
|
+ /* fall through */
|
|
default:
|
|
- log_error_write(srv, __FILE__, __LINE__, "sds", "SSL:",
|
|
- SSL_get_error(con->ssl, ret),
|
|
- ERR_error_string(ERR_get_error(), NULL));
|
|
- return -1;
|
|
+
|
|
+ switch ((ssl_r = SSL_get_error(con->ssl, ret))) {
|
|
+ case SSL_ERROR_WANT_WRITE:
|
|
+ case SSL_ERROR_WANT_READ:
|
|
+ break;
|
|
+ case SSL_ERROR_SYSCALL:
|
|
+ /* perhaps we have error waiting in our error-queue */
|
|
+ if (0 != (err = ERR_get_error())) {
|
|
+ do {
|
|
+ log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
|
|
+ ssl_r, ret,
|
|
+ ERR_error_string(err, NULL));
|
|
+ } while((err = ERR_get_error()));
|
|
+ } else {
|
|
+ log_error_write(srv, __FILE__, __LINE__, "sddds", "SSL (error):",
|
|
+ ssl_r, ret, errno,
|
|
+ strerror(errno));
|
|
+ }
|
|
+
|
|
+ break;
|
|
+ default:
|
|
+ while((err = ERR_get_error())) {
|
|
+ log_error_write(srv, __FILE__, __LINE__, "sdds", "SSL:",
|
|
+ ssl_r, ret,
|
|
+ ERR_error_string(err, NULL));
|
|
+ }
|
|
+
|
|
+ break;
|
|
+ }
|
|
}
|
|
}
|
|
+ ERR_clear_error();
|
|
#endif
|
|
|
|
switch(con->mode) {
|