comparison src/event/ngx_event_openssl.c @ 1755:59e36c1c6296

cleaning stale global SSL error
author Igor Sysoev <igor@sysoev.ru>
date Thu, 20 Dec 2007 13:04:20 +0000
parents 427d442e1ad8
children f28ba0f698f3
comparison
equal deleted inserted replaced
1754:427d442e1ad8 1755:59e36c1c6296
20 static void ngx_ssl_write_handler(ngx_event_t *wev); 20 static void ngx_ssl_write_handler(ngx_event_t *wev);
21 static void ngx_ssl_read_handler(ngx_event_t *rev); 21 static void ngx_ssl_read_handler(ngx_event_t *rev);
22 static void ngx_ssl_shutdown_handler(ngx_event_t *ev); 22 static void ngx_ssl_shutdown_handler(ngx_event_t *ev);
23 static void ngx_ssl_connection_error(ngx_connection_t *c, int sslerr, 23 static void ngx_ssl_connection_error(ngx_connection_t *c, int sslerr,
24 ngx_err_t err, char *text); 24 ngx_err_t err, char *text);
25 static void ngx_ssl_clear_error(ngx_log_t *log);
25 26
26 static ngx_int_t ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone, 27 static ngx_int_t ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone,
27 void *data); 28 void *data);
28 static int ngx_ssl_new_session(ngx_ssl_conn_t *ssl_conn, 29 static int ngx_ssl_new_session(ngx_ssl_conn_t *ssl_conn,
29 ngx_ssl_session_t *sess); 30 ngx_ssl_session_t *sess);
402 ngx_ssl_handshake(ngx_connection_t *c) 403 ngx_ssl_handshake(ngx_connection_t *c)
403 { 404 {
404 int n, sslerr; 405 int n, sslerr;
405 ngx_err_t err; 406 ngx_err_t err;
406 407
408 ngx_ssl_clear_error(c->log);
409
407 n = SSL_do_handshake(c->ssl->connection); 410 n = SSL_do_handshake(c->ssl->connection);
408 411
409 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_do_handshake: %d", n); 412 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_do_handshake: %d", n);
410 413
411 if (n == 1) { 414 if (n == 1) {
602 c->read->eof = 1; 605 c->read->eof = 1;
603 return 0; 606 return 0;
604 } 607 }
605 608
606 bytes = 0; 609 bytes = 0;
610
611 ngx_ssl_clear_error(c->log);
607 612
608 /* 613 /*
609 * SSL_read() may return data in parts, so try to read 614 * SSL_read() may return data in parts, so try to read
610 * until SSL_read() would return no data 615 * until SSL_read() would return no data
611 */ 616 */
893 ngx_ssl_write(ngx_connection_t *c, u_char *data, size_t size) 898 ngx_ssl_write(ngx_connection_t *c, u_char *data, size_t size)
894 { 899 {
895 int n, sslerr; 900 int n, sslerr;
896 ngx_err_t err; 901 ngx_err_t err;
897 902
903 ngx_ssl_clear_error(c->log);
904
898 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL to write: %d", size); 905 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL to write: %d", size);
899 906
900 n = SSL_write(c->ssl->connection, data, size); 907 n = SSL_write(c->ssl->connection, data, size);
901 908
902 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_write: %d", n); 909 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_write: %d", n);
995 mode |= SSL_SENT_SHUTDOWN; 1002 mode |= SSL_SENT_SHUTDOWN;
996 } 1003 }
997 } 1004 }
998 1005
999 SSL_set_shutdown(c->ssl->connection, mode); 1006 SSL_set_shutdown(c->ssl->connection, mode);
1007
1008 ngx_ssl_clear_error(c->log);
1000 1009
1001 n = SSL_shutdown(c->ssl->connection); 1010 n = SSL_shutdown(c->ssl->connection);
1002 1011
1003 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_shutdown: %d", n); 1012 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_shutdown: %d", n);
1004 1013
1111 } 1120 }
1112 } 1121 }
1113 } 1122 }
1114 1123
1115 ngx_ssl_error(level, c->log, err, text); 1124 ngx_ssl_error(level, c->log, err, text);
1125 }
1126
1127
1128 static void
1129 ngx_ssl_clear_error(ngx_log_t *log)
1130 {
1131 if (ERR_peek_error()) {
1132 ngx_ssl_error(NGX_LOG_ALERT, log, 0, "ignoring stale global SSL error");
1133 }
1116 } 1134 }
1117 1135
1118 1136
1119 void ngx_cdecl 1137 void ngx_cdecl
1120 ngx_ssl_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, char *fmt, ...) 1138 ngx_ssl_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, char *fmt, ...)