Fixed segfault on ssl servers without cert with SNI (ticket #54).

Non-default servers may not have ssl context created if there are no
certificate defined.  Make sure to check if ssl context present before
using it.
This commit is contained in:
Maxim Dounin 2011-11-22 16:27:45 +00:00
parent f00f3dc803
commit 0d5cf1a261

View file

@ -671,25 +671,27 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
sscf = ngx_http_get_module_srv_conf(r, ngx_http_ssl_module); sscf = ngx_http_get_module_srv_conf(r, ngx_http_ssl_module);
SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx); if (sscf->ssl.ctx) {
SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx);
/* /*
* SSL_set_SSL_CTX() only changes certs as of 1.0.0d * SSL_set_SSL_CTX() only changes certs as of 1.0.0d
* adjust other things we care about * adjust other things we care about
*/ */
SSL_set_verify(ssl_conn, SSL_CTX_get_verify_mode(sscf->ssl.ctx), SSL_set_verify(ssl_conn, SSL_CTX_get_verify_mode(sscf->ssl.ctx),
SSL_CTX_get_verify_callback(sscf->ssl.ctx)); SSL_CTX_get_verify_callback(sscf->ssl.ctx));
SSL_set_verify_depth(ssl_conn, SSL_CTX_get_verify_depth(sscf->ssl.ctx)); SSL_set_verify_depth(ssl_conn, SSL_CTX_get_verify_depth(sscf->ssl.ctx));
#ifdef SSL_CTRL_CLEAR_OPTIONS #ifdef SSL_CTRL_CLEAR_OPTIONS
/* only in 0.9.8m+ */ /* only in 0.9.8m+ */
SSL_clear_options(ssl_conn, SSL_get_options(ssl_conn) & SSL_clear_options(ssl_conn, SSL_get_options(ssl_conn) &
~SSL_CTX_get_options(sscf->ssl.ctx)); ~SSL_CTX_get_options(sscf->ssl.ctx));
#endif #endif
SSL_set_options(ssl_conn, SSL_CTX_get_options(sscf->ssl.ctx)); SSL_set_options(ssl_conn, SSL_CTX_get_options(sscf->ssl.ctx));
}
return SSL_TLSEXT_ERR_OK; return SSL_TLSEXT_ERR_OK;
} }