|
@@ -2013,8 +2013,6 @@ typedef int (*tSSL_next_protos_advertised_cb)(SSL *ssl,
|
|
|
SSL_CTX_callback_ctrl(ctx, \
|
|
|
SSL_CTRL_SET_TLSEXT_SERVERNAME_CB, \
|
|
|
(void (*)(void))cb)
|
|
|
-#define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \
|
|
|
- SSL_CTX_ctrl(ctx, SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG, 0, (void *)arg)
|
|
|
#define SSL_set_tlsext_host_name(ctx, arg) \
|
|
|
SSL_ctrl(ctx, SSL_CTRL_SET_TLSEXT_HOSTNAME, 0, (void *)arg)
|
|
|
|
|
@@ -2213,8 +2211,6 @@ typedef int (*tSSL_next_protos_advertised_cb)(SSL *ssl,
|
|
|
SSL_CTX_callback_ctrl(ctx, \
|
|
|
SSL_CTRL_SET_TLSEXT_SERVERNAME_CB, \
|
|
|
(void (*)(void))cb)
|
|
|
-#define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \
|
|
|
- SSL_CTX_ctrl(ctx, SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG, 0, (void *)arg)
|
|
|
#define SSL_set_tlsext_host_name(ctx, arg) \
|
|
|
SSL_ctrl(ctx, SSL_CTRL_SET_TLSEXT_HOSTNAME, 0, (void *)arg)
|
|
|
|
|
@@ -16328,9 +16324,6 @@ ssl_info_callback(const SSL *ssl, int what, int ret)
|
|
|
static int
|
|
|
ssl_servername_callback(SSL *ssl, int *ad, void *arg)
|
|
|
{
|
|
|
- struct mg_context *ctx = (struct mg_context *)arg;
|
|
|
- struct mg_domain_context *dom = ((ctx != NULL) ? &(ctx->dd) : NULL);
|
|
|
-
|
|
|
#if defined(GCC_DIAGNOSTIC)
|
|
|
#pragma GCC diagnostic push
|
|
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
|
@@ -16346,11 +16339,13 @@ ssl_servername_callback(SSL *ssl, int *ad, void *arg)
|
|
|
const char *servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
|
|
|
|
|
|
(void)ad;
|
|
|
+ (void)arg;
|
|
|
|
|
|
- if ((ctx == NULL) || (conn->phys_ctx == ctx)) {
|
|
|
- DEBUG_TRACE("%s", "internal error - assertion failed");
|
|
|
+ if ((conn == NULL) || (conn->phys_ctx == NULL)) {
|
|
|
+ DEBUG_ASSERT(0);
|
|
|
return SSL_TLSEXT_ERR_NOACK;
|
|
|
}
|
|
|
+ conn->dom_ctx = &(conn->phys_ctx->dd);
|
|
|
|
|
|
/* Old clients (Win XP) will not support SNI. Then, there
|
|
|
* is no server name available in the request - we can
|
|
@@ -16360,30 +16355,29 @@ ssl_servername_callback(SSL *ssl, int *ad, void *arg)
|
|
|
*/
|
|
|
if ((servername == NULL) || (*servername == 0)) {
|
|
|
DEBUG_TRACE("%s", "SSL connection not supporting SNI");
|
|
|
- conn->dom_ctx = &(ctx->dd);
|
|
|
SSL_set_SSL_CTX(ssl, conn->dom_ctx->ssl_ctx);
|
|
|
return SSL_TLSEXT_ERR_NOACK;
|
|
|
}
|
|
|
|
|
|
DEBUG_TRACE("TLS connection to host %s", servername);
|
|
|
|
|
|
- while (dom) {
|
|
|
- if (!mg_strcasecmp(servername, dom->config[AUTHENTICATION_DOMAIN])) {
|
|
|
-
|
|
|
+ while (conn->dom_ctx) {
|
|
|
+ if (!mg_strcasecmp(servername,
|
|
|
+ conn->dom_ctx->config[AUTHENTICATION_DOMAIN])) {
|
|
|
/* Found matching domain */
|
|
|
DEBUG_TRACE("TLS domain %s found",
|
|
|
- dom->config[AUTHENTICATION_DOMAIN]);
|
|
|
- SSL_set_SSL_CTX(ssl, dom->ssl_ctx);
|
|
|
- conn->dom_ctx = dom;
|
|
|
- return SSL_TLSEXT_ERR_OK;
|
|
|
+ conn->dom_ctx->config[AUTHENTICATION_DOMAIN]);
|
|
|
+ break;
|
|
|
}
|
|
|
- dom = dom->next;
|
|
|
+ conn->dom_ctx = conn->dom_ctx->next;
|
|
|
}
|
|
|
|
|
|
- /* Default domain */
|
|
|
- DEBUG_TRACE("TLS default domain %s used",
|
|
|
- ctx->dd.config[AUTHENTICATION_DOMAIN]);
|
|
|
- conn->dom_ctx = &(ctx->dd);
|
|
|
+ if (conn->dom_ctx == NULL) {
|
|
|
+ /* Default domain */
|
|
|
+ DEBUG_TRACE("TLS default domain %s used",
|
|
|
+ conn->phys_ctx->dd.config[AUTHENTICATION_DOMAIN]);
|
|
|
+ conn->dom_ctx = &(conn->phys_ctx->dd);
|
|
|
+ }
|
|
|
SSL_set_SSL_CTX(ssl, conn->dom_ctx->ssl_ctx);
|
|
|
return SSL_TLSEXT_ERR_OK;
|
|
|
}
|
|
@@ -16559,7 +16553,6 @@ init_ssl_ctx_impl(struct mg_context *phys_ctx,
|
|
|
|
|
|
SSL_CTX_set_tlsext_servername_callback(dom_ctx->ssl_ctx,
|
|
|
ssl_servername_callback);
|
|
|
- SSL_CTX_set_tlsext_servername_arg(dom_ctx->ssl_ctx, phys_ctx);
|
|
|
|
|
|
/* If a callback has been specified, call it. */
|
|
|
callback_ret = (phys_ctx->callbacks.init_ssl == NULL)
|