Loading patches/backport-module-flags.diffdeleted 100644 → 0 +0 −171 Original line number Diff line number Diff line 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 Loading
patches/backport-module-flags.diffdeleted 100644 → 0 +0 −171 Original line number Diff line number Diff line 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