From 338cb9d8109e1520b198f29c0f85fff5c02f67fe Mon Sep 17 00:00:00 2001 From: Stefan Eissing Date: Thu, 12 Oct 2017 09:45:35 +0000 Subject: [PATCH] proposing new module flag backport git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1811930 13f79535-47bb-0310-9956-ffa450edef68 --- STATUS | 7 ++ patches/backport-module-flags.diff | 171 +++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 patches/backport-module-flags.diff diff --git a/STATUS b/STATUS index b4d9000b51..33a4928b2a 100644 --- a/STATUS +++ b/STATUS @@ -212,6 +212,13 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK: 2.4.x patch: trunk works +1: jorton, wrowe + *) core/mod_ssl: Add new flag int to module struct. Define first bit for keeping + server config records non-shared instances, set for mod_ssl to make manipulations + in post_config safe. + trunk patch: svn merge -c 1809302,1809303,1809305,1809311,1809314,1809713 ^/httpd/httpd/trunk . + 2.4.x patch: patches/backport-module-flags.diff (merge with alterations for mmn etc.) + +1: icing + PATCHES/ISSUES THAT ARE BEING WORKED [ New entries should be added at the START of the list ] diff --git a/patches/backport-module-flags.diff b/patches/backport-module-flags.diff new file mode 100644 index 0000000000..707b842213 --- /dev/null +++ b/patches/backport-module-flags.diff @@ -0,0 +1,171 @@ +Index: include/ap_mmn.h +=================================================================== +--- include/ap_mmn.h (revision 1811919) ++++ include/ap_mmn.h (working copy) +@@ -496,6 +496,8 @@ + * to ap_[r]getline() + * 20120211.68 (2.4.26-dev) Add ap_get_basic_auth_components() and deprecate + * ap_get_basic_auth_pw() ++ * 20120211.69 (2.4.29-dev) Add flags field to module_struct and function ++ * ap_get_module_flags() + */ + + #define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */ +@@ -503,7 +505,7 @@ + #ifndef MODULE_MAGIC_NUMBER_MAJOR + #define MODULE_MAGIC_NUMBER_MAJOR 20120211 + #endif +-#define MODULE_MAGIC_NUMBER_MINOR 68 /* 0...n */ ++#define MODULE_MAGIC_NUMBER_MINOR 69 /* 0...n */ + + /** + * Determine if the server's current MODULE_MAGIC_NUMBER is at least a +Index: include/http_config.h +=================================================================== +--- include/http_config.h (revision 1811919) ++++ include/http_config.h (working copy) +@@ -329,6 +329,12 @@ + }; + + /** ++ * Flags associated with a module. ++ */ ++#define AP_MODULE_FLAG_NONE (0) ++#define AP_MODULE_FLAG_ALWAYS_MERGE (1 << 0) ++ ++/** + * Module structures. Just about everything is dispatched through + * these, directly or indirectly (through the command and handler + * tables). +@@ -407,6 +413,9 @@ + * @param p the pool to use for all allocations + */ + void (*register_hooks) (apr_pool_t *p); ++ ++ /** A bitmask of AP_MODULE_FLAG_* */ ++ int flags; + }; + + /** +@@ -519,6 +528,21 @@ + AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m, + void *val); + ++/** ++ * When module flags have been introduced, and a way to check this. ++ */ ++#define AP_MODULE_FLAGS_MMN_MAJOR 20161018 ++#define AP_MODULE_FLAGS_MMN_MINOR 7 ++#define AP_MODULE_HAS_FLAGS(m) \ ++ AP_MODULE_MAGIC_AT_LEAST(AP_MODULE_FLAGS_MMN_MAJOR, \ ++ AP_MODULE_FLAGS_MMN_MINOR) ++/** ++ * Generic accessor for the module's flags ++ * @param m The module to get the flags from. ++ * @return The module-specific flags ++ */ ++AP_DECLARE(int) ap_get_module_flags(const module *m); ++ + #if !defined(AP_DEBUG) + + #define ap_get_module_config(v,m) \ +Index: modules/ssl/mod_ssl.c +=================================================================== +--- modules/ssl/mod_ssl.c (revision 1811919) ++++ modules/ssl/mod_ssl.c (working copy) +@@ -713,4 +713,7 @@ + ssl_config_server_merge, /* merge per-server config structures */ + ssl_config_cmds, /* table of configuration directives */ + ssl_register_hooks /* register hooks */ ++#if defined(AP_MODULE_HAS_FLAGS) ++ ,AP_MODULE_FLAG_ALWAYS_MERGE /* flags */ ++#endif + }; +Index: server/config.c +=================================================================== +--- server/config.c (revision 1811919) ++++ server/config.c (working copy) +@@ -323,7 +323,7 @@ + } + + 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... +@@ -330,7 +330,7 @@ + */ + + 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) { +@@ -337,10 +337,20 @@ + 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 (df && modp->create_server_config ++ && (ap_get_module_flags(modp) & ++ AP_MODULE_FLAG_ALWAYS_MERGE)) { ++ virt_vector[i] = (*modp->create_server_config)(p, virt); ++ } ++ else { ++ virt_vector[i] = base_vector[i]; ++ df = NULL; ++ } ++ } ++ if (df) { + virt_vector[i] = (*df)(p, base_vector[i], virt_vector[i]); ++ } + } + } + +@@ -2322,8 +2332,7 @@ + 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, +Index: server/util_debug.c +=================================================================== +--- server/util_debug.c (revision 1811919) ++++ server/util_debug.c (working copy) +@@ -107,6 +107,17 @@ + return ((void **)cv)[m->module_index]; + } + ++AP_DECLARE(int) ap_get_module_flags(const module *m) ++{ ++ if (m->version < AP_MODULE_FLAGS_MMN_MAJOR ++ || (m->version == AP_MODULE_FLAGS_MMN_MAJOR ++ && (m->minor_version < AP_MODULE_FLAGS_MMN_MINOR))) { ++ return 0; ++ } ++ ++ return m->flags; ++} ++ + #if defined(ap_get_core_module_config) + #undef ap_get_core_module_config + AP_DECLARE(void *) ap_get_core_module_config(const ap_conf_vector_t *cv); +Index: . +=================================================================== +--- . (revision 1811919) ++++ . (working copy) + +Property changes on: . +___________________________________________________________________ +Modified: svn:mergeinfo +## -0,0 +0,1 ## + Merged /httpd/httpd/trunk:r1809302-1809303,1809305,1809311,1809314,1809713 -- 2.50.1