From: Stefan Fritsch Date: Sat, 8 Oct 2011 07:15:58 +0000 (+0000) Subject: Sort hooks twice, once before pre_config, once after ap_process_config_tree. X-Git-Tag: 2.3.15~164 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a861cc3cfb74b50f57c6f1b8b4ac8d09bfa000fe;p=thirdparty%2Fapache%2Fhttpd.git Sort hooks twice, once before pre_config, once after ap_process_config_tree. This fixes a regression with perl modules introduced by r1032002 PR: 45076 Submitted by: Torsten Foertsch git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1180325 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index c63fa39bb3a..6bd318f7788 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,9 @@ Changes with Apache 2.3.15 PR 51714. [Stefan Fritsch, Jim Jagielski, Ruediger Pluem, Eric Covener, ] + *) core: Fix hook sorting with perl modules. PR: 45076. [Torsten Foertsch + ] + *) core: Enforce LimitRequestFieldSize after multiple headers with the same name have been merged. [Stefan Fritsch] diff --git a/server/main.c b/server/main.c index fbc4c84848e..60208d28b92 100644 --- a/server/main.c +++ b/server/main.c @@ -618,6 +618,7 @@ int main(int argc, const char * const argv[]) } apr_pool_cleanup_register(pconf, &ap_server_conf, ap_pool_cleanup_set_null, apr_pool_cleanup_null); + /* sort hooks here to make sure pre_config hooks are sorted properly */ apr_hook_sort_all(); if (ap_run_pre_config(pconf, plog, ptemp) != OK) { @@ -631,6 +632,12 @@ int main(int argc, const char * const argv[]) if (rv == OK) { ap_fixup_virtual_hosts(pconf, ap_server_conf); ap_fini_vhost_config(pconf, ap_server_conf); + /* + * Sort hooks again because ap_process_config_tree may have add modules + * and hence hooks. This happens with mod_perl and modules written in + * perl. + */ + apr_hook_sort_all(); if (ap_run_check_config(pconf, plog, ptemp, ap_server_conf) != OK) { ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0, @@ -707,6 +714,7 @@ int main(int argc, const char * const argv[]) } apr_pool_cleanup_register(pconf, &ap_server_conf, ap_pool_cleanup_set_null, apr_pool_cleanup_null); + /* sort hooks here to make sure pre_config hooks are sorted properly */ apr_hook_sort_all(); if (ap_run_pre_config(pconf, plog, ptemp) != OK) { @@ -721,6 +729,12 @@ int main(int argc, const char * const argv[]) } ap_fixup_virtual_hosts(pconf, ap_server_conf); ap_fini_vhost_config(pconf, ap_server_conf); + /* + * Sort hooks again because ap_process_config_tree may have add modules + * and hence hooks. This happens with mod_perl and modules written in + * perl. + */ + apr_hook_sort_all(); if (ap_run_check_config(pconf, plog, ptemp, ap_server_conf) != OK) { ap_log_error(APLOG_MARK, APLOG_STARTUP |APLOG_ERR, 0,