]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mod_ssl: follow up to r1740928: fix memory leaks.
authorYann Ylavic <ylavic@apache.org>
Tue, 31 Jan 2017 23:39:58 +0000 (23:39 +0000)
committerYann Ylavic <ylavic@apache.org>
Tue, 31 Jan 2017 23:39:58 +0000 (23:39 +0000)
[Reverted by r1781311]

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1781188 13f79535-47bb-0310-9956-ffa450edef68

modules/ssl/ssl_engine_config.c
modules/ssl/ssl_engine_init.c

index 7cc21138bd2870b9bf8eca5903c589ba7b5228cc..b2a35bf9b8c8f324236b4ff2da555eb5f963a6ad 100644 (file)
@@ -98,6 +98,12 @@ BOOL ssl_config_global_isfixed(SSLModConfigRec *mc)
 **  _________________________________________________________________
 */
 
+static apr_status_t modssl_ctx_config_cleanup(void *ctx)
+{
+    SSL_CONF_CTX_free(ctx);
+    return APR_SUCCESS;
+}
+
 static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p)
 {
     mctx->sc                  = NULL; /* set during module init */
@@ -157,6 +163,9 @@ static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p)
 #endif
 #ifdef HAVE_SSL_CONF_CMD
     mctx->ssl_ctx_config = SSL_CONF_CTX_new();
+    apr_pool_cleanup_register(p, mctx->ssl_ctx_config,
+                              modssl_ctx_config_cleanup,
+                              apr_pool_cleanup_null);
     SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_FILE);
     SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_SERVER);
     SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_CERTIFICATE);
index 5af150f16788e8b7177791f694b53d8aa010a7f9..26983842b73e6c8365c77dcb4c13ae6dcd58eb3d 100644 (file)
@@ -1617,6 +1617,11 @@ static apr_status_t ssl_init_proxy_ctx(server_rec *s,
 {
     apr_status_t rv;
 
+    if (proxy->ssl_ctx) {
+        /* Merged/initialized already */
+        return APR_SUCCESS;
+    }
+
     apr_pool_cleanup_register(p, proxy,
                               ssl_cleanup_proxy_ctx,
                               apr_pool_cleanup_null);
@@ -1687,7 +1692,6 @@ static apr_status_t ssl_init_server_ctx(server_rec *s,
             ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s);
             return ssl_die(s);
     }
-    SSL_CONF_CTX_free(cctx);
 #endif
 
     if (SSL_CTX_check_private_key(sc->server->ssl_ctx) != 1) {