]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
SSL_CONF support for files and directories.
authorStephen Henson <drh@apache.org>
Tue, 22 Oct 2013 19:55:43 +0000 (19:55 +0000)
committerStephen Henson <drh@apache.org>
Tue, 22 Oct 2013 19:55:43 +0000 (19:55 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1534754 13f79535-47bb-0310-9956-ffa450edef68

docs/log-message-tags/next-number
modules/ssl/ssl_engine_config.c
modules/ssl/ssl_engine_init.c
modules/ssl/ssl_private.h

index efbf27c07466165c6bf590cfbb3e517b83d7bc82..5cf23a56c5b190e38426e25a4681192eaee50024 100644 (file)
@@ -1 +1 @@
-2547
+2548
index d0742cb43f1ce3160ed940ca9de4ce4b53c58cc7..05e4dd9cfa5d3afe613a0a69892b54d551aecad8 100644 (file)
@@ -154,6 +154,10 @@ static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p)
     mctx->srp_vbase =             NULL;
 #endif
 #ifdef HAVE_SSL_CONF_CMD
+    mctx->ssl_ctx_config = SSL_CONF_CTX_new();
+    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);
     mctx->ssl_ctx_param = apr_array_make(p, 10, sizeof(ssl_ctx_param_t));
 #endif
 }
@@ -1826,9 +1830,24 @@ const char *ssl_cmd_SSLStaplingForceURL(cmd_parms *cmd, void *dcfg,
 const char *ssl_cmd_SSLOpenSSLConfCmd(cmd_parms *cmd, void *dcfg,
                                        const char *arg1, const char *arg2)
 {
-    ssl_ctx_param_t *param;
     SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
-    param = apr_array_push(sc->server->ssl_ctx_param);
+    ssl_ctx_param_t *param = apr_array_push(sc->server->ssl_ctx_param);
+    SSL_CONF_CTX *cctx = sc->server->ssl_ctx_config;
+    const char *err;
+    int value_type = SSL_CONF_cmd_value_type(cctx, arg1);
+    if (value_type == SSL_CONF_TYPE_UNKNOWN) {
+        return apr_psprintf(cmd->pool,
+                            "'%s': invalid OpenSSL configuration command",
+                            arg1);
+    }
+    if (value_type == SSL_CONF_TYPE_FILE) {
+        if ((err = ssl_cmd_check_file(cmd, &arg2)))
+            return err;
+    }
+    else if (value_type == SSL_CONF_TYPE_DIR) {
+        if ((err = ssl_cmd_check_dir(cmd, &arg2)))
+            return err;
+    }
     param->name = arg1;
     param->value = arg2;
     return NULL;
index 6e6822e70819f786c0b7bd603b88b605324a205e..b9ffa497cf46fd1c806348618ce9c3cc5914df43 100644 (file)
@@ -515,20 +515,24 @@ static void ssl_init_ctx_protocol(server_rec *s,
 #ifdef HAVE_SSL_CONF_CMD
 {
     ssl_ctx_param_t *param = (ssl_ctx_param_t *)mctx->ssl_ctx_param->elts;
-    SSL_CONF_CTX *cctx;
+    SSL_CONF_CTX *cctx = mctx->ssl_ctx_config;
     int i;
-    cctx = SSL_CONF_CTX_new();
-    SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_FILE|SSL_CONF_FLAG_SERVER);
     SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
     for (i = 0; i < mctx->ssl_ctx_param->nelts; i++, param++) {
         if (SSL_CONF_cmd(cctx, param->name, param->value) <= 0) {
             ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02407)
-                    "Error SSL_CONF_cmd(%s,%s)", param->name, param->value);
+                         "Error SSL_CONF_cmd(\"%s\",\"%s\")",
+                         param->name, param->value);
+            ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s);
+            ssl_die(s);
+        }
+    }
+    if (SSL_CONF_CTX_finish(cctx) == 0) {
+            ap_log_error(APLOG_MARK, APLOG_EMERG, 0, s, APLOGNO(02547)
+                         "Error SSL_CONF_CTX_finish()");
             ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s);
             ssl_die(s);
-        }    
     }
-    SSL_CONF_CTX_free(cctx);
 }
 #endif
 
@@ -1574,6 +1578,9 @@ void ssl_init_Child(apr_pool_t *p, server_rec *s)
 static void ssl_init_ctx_cleanup(modssl_ctx_t *mctx)
 {
     MODSSL_CFG_ITEM_FREE(SSL_CTX_free, mctx->ssl_ctx);
+#ifdef HAVE_SSL_CONF_CMD
+    MODSSL_CFG_ITEM_FREE(SSL_CONF_CTX_free, mctx->ssl_ctx_config);
+#endif
 
 #ifdef HAVE_SRP
     if (mctx->srp_vbase != NULL) {
index 01f03be0f404a0642f7da8313c38ecbdf5355483..463c2ce8fc6aeb5bb409b4d34dd93738fb8c94fb 100644 (file)
@@ -656,6 +656,7 @@ typedef struct {
     long ocsp_resp_maxage;
     apr_interval_time_t ocsp_responder_timeout;
 #ifdef HAVE_SSL_CONF_CMD
+    SSL_CONF_CTX *ssl_ctx_config; /* Configuration context */
     apr_array_header_t *ssl_ctx_param; /* parameters to pass to SSL_CTX */
 #endif
 } modssl_ctx_t;