diff options
author | Yann Ylavic <ylavic@apache.org> | 2017-09-22 11:58:53 +0000 |
---|---|---|
committer | Yann Ylavic <ylavic@apache.org> | 2017-09-22 11:58:53 +0000 |
commit | e18300e525d847c3872551fca217f8de96c620e4 (patch) | |
tree | 5c88d341cfcdae5e3aea1f89213336ce22d06c0c /server/config.c | |
parent | b5bdda40732e743a532c115d74b860c995878e76 (diff) | |
download | httpd-e18300e525d847c3872551fca217f8de96c620e4.tar.gz |
config: allow to specify flags when registering modules.
First one is AP_MODULE_FLAG_ALWAYS_MERGE.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1809302 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'server/config.c')
-rw-r--r-- | server/config.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/server/config.c b/server/config.c index 8c8acbcb2d..74674a52fc 100644 --- a/server/config.c +++ b/server/config.c @@ -323,24 +323,36 @@ static ap_conf_vector_t *create_server_config(apr_pool_t *p, server_rec *s) } static void merge_server_configs(apr_pool_t *p, ap_conf_vector_t *base, - ap_conf_vector_t *virt) + server_rec *virt) { /* Can reuse the 'virt' vector for the spine of it, since we don't * have to deal with the moral equivalent of .htaccess files here... */ void **base_vector = (void **)base; - void **virt_vector = (void **)virt; + void **virt_vector = (void **)virt->module_config; module *modp; for (modp = ap_top_module; modp; modp = modp->next) { merger_func df = modp->merge_server_config; int i = modp->module_index; - if (!virt_vector[i]) - virt_vector[i] = base_vector[i]; - else if (df) + if (!virt_vector[i]) { +#if AP_MODULE_HAS_FLAGS + if (df && modp->create_server_config + && modp->flags & AP_MODULE_FLAG_ALWAYS_MERGE) { + virt_vector[i] = (*modp->create_server_config)(p, virt); + } + else +#endif + { + virt_vector[i] = base_vector[i]; + df = NULL; + } + } + if (df) { virt_vector[i] = (*df)(p, base_vector[i], virt_vector[i]); + } } } @@ -2334,8 +2346,7 @@ AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p, server_rec *main_server) dconf->log = &main_server->log; for (virt = main_server->next; virt; virt = virt->next) { - merge_server_configs(p, main_server->module_config, - virt->module_config); + merge_server_configs(p, main_server->module_config, virt); virt->lookup_defaults = ap_merge_per_dir_configs(p, main_server->lookup_defaults, |