From: Joe Orton Date: Thu, 18 Apr 2019 10:25:33 +0000 (+0000) Subject: Fix use of StateDir directive after r1852982: X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=835b74a4d080471c4cca9432e1482ee6c2b524dd;p=apache Fix use of StateDir directive after r1852982: * server/core.c (reset_config): Rename from reset_config_defines; tie core_state_dir to pconf lifetime in this cleanup. (core_pre_config): Adjust accordingly. * modules/md/mod_md_config.c (md_config_post_config): Pick up base_dir from statedir in post-config phase so StateDir can influence it. * modules/dav/fs/mod_dav_fs.c (dav_fs_create_server_config): Don't init lockdb_path here. (dav_fs_post_config): New function; set lockdb_path based on configured statedir. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1857731 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/dav/fs/mod_dav_fs.c b/modules/dav/fs/mod_dav_fs.c index 50267cad66..985823d36f 100644 --- a/modules/dav/fs/mod_dav_fs.c +++ b/modules/dav/fs/mod_dav_fs.c @@ -46,11 +46,7 @@ const char *dav_get_lockdb_path(const request_rec *r) static void *dav_fs_create_server_config(apr_pool_t *p, server_rec *s) { - dav_fs_server_conf *conf = apr_pcalloc(p, sizeof(dav_fs_server_conf)); - - conf->lockdb_path = ap_state_dir_relative(p, DEFAULT_DAV_LOCKDB); - - return conf; + return apr_pcalloc(p, sizeof(dav_fs_server_conf)); } static void *dav_fs_merge_server_config(apr_pool_t *p, @@ -68,6 +64,24 @@ static void *dav_fs_merge_server_config(apr_pool_t *p, return newconf; } +static apr_status_t dav_fs_post_config(apr_pool_t *p, apr_pool_t *plog, + apr_pool_t *ptemp, server_rec *base_server) +{ + server_rec *s; + + for (s = base_server; s; s = s->next) { + dav_fs_server_conf *conf; + + conf = ap_get_module_config(s->module_config, &dav_fs_module); + + if (!conf->lockdb_path) { + conf->lockdb_path = ap_state_dir_relative(p, DEFAULT_DAV_LOCKDB); + } + } + + return OK; +} + /* * Command handler for the DAVLockDB directive, which is TAKE1 */ @@ -98,6 +112,8 @@ static const command_rec dav_fs_cmds[] = static void register_hooks(apr_pool_t *p) { + ap_hook_post_config(dav_fs_post_config, NULL, NULL, APR_HOOK_MIDDLE); + dav_hook_gather_propsets(dav_fs_gather_propsets, NULL, NULL, APR_HOOK_MIDDLE); dav_hook_find_liveprop(dav_fs_find_liveprop, NULL, NULL, APR_HOOK_MIDDLE); diff --git a/modules/md/mod_md_config.c b/modules/md/mod_md_config.c index 27c61945b1..d48c109372 100644 --- a/modules/md/mod_md_config.c +++ b/modules/md/mod_md_config.c @@ -121,11 +121,6 @@ static md_mod_conf_t *md_mod_conf_get(apr_pool_t *pool, int create) mod_md_config->mds = apr_array_make(pool, 5, sizeof(const md_t *)); mod_md_config->unused_names = apr_array_make(pool, 5, sizeof(const md_t *)); -#if AP_MODULE_MAGIC_AT_LEAST(20180906, 2) - mod_md_config->base_dir = ap_state_dir_relative(pool, - MD_DEFAULT_BASE_DIR); -#endif - apr_pool_cleanup_register(pool, NULL, cleanup_mod_config, apr_pool_cleanup_null); } @@ -877,6 +872,12 @@ apr_status_t md_config_post_config(server_rec *s, apr_pool_t *p) if (mc->hsts_max_age > 0) { mc->hsts_header = apr_psprintf(p, "max-age=%d", mc->hsts_max_age); } + +#if AP_MODULE_MAGIC_AT_LEAST(20180906, 2) + if (mc->base_dir == NULL) { + mc->base_dir = ap_state_dir_relative(p, MD_DEFAULT_BASE_DIR); + } +#endif return APR_SUCCESS; } diff --git a/server/core.c b/server/core.c index ceb7dd6bb8..2ce5af70e2 100644 --- a/server/core.c +++ b/server/core.c @@ -1489,12 +1489,15 @@ AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word) return res_buf; } -static int reset_config_defines(void *dummy) +/* pconf cleanup - clear global variables set from config here. */ +static apr_status_t reset_config(void *dummy) { ap_server_config_defines = saved_server_config_defines; saved_server_config_defines = NULL; server_config_defined_vars = NULL; - return OK; + core_state_dir = NULL; + + return APR_SUCCESS; } /* @@ -5294,13 +5297,11 @@ static int core_pre_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptem if (!saved_server_config_defines) init_config_defines(pconf); - apr_pool_cleanup_register(pconf, NULL, reset_config_defines, - apr_pool_cleanup_null); + apr_pool_cleanup_register(pconf, NULL, reset_config, apr_pool_cleanup_null); ap_regcomp_set_default_cflags(AP_REG_DOLLAR_ENDONLY); mpm_common_pre_config(pconf); - core_state_dir = NULL; return OK; }