Author: rjung
Date: Sun Dec 21 12:48:42 2014
New Revision: 1647133

URL: http://svn.apache.org/r1647133
Log:
Fix Apache config handling for new JkOptions controlling
collapsing of adjacent slashes.

This is now tested and should work as documented.

Modified:
    tomcat/jk/trunk/native/apache-1.3/mod_jk.c
    tomcat/jk/trunk/native/apache-2.0/mod_jk.c

Modified: tomcat/jk/trunk/native/apache-1.3/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/apache-1.3/mod_jk.c?rev=1647133&r1=1647132&r2=1647133&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-1.3/mod_jk.c Sun Dec 21 12:48:42 2014
@@ -2753,6 +2753,7 @@ static void *merge_jk_config(ap_pool * p
 {
     jk_server_conf_t *base = (jk_server_conf_t *) basev;
     jk_server_conf_t *overrides = (jk_server_conf_t *) overridesv;
+    int mask = 0;
 
     if (!overrides->log_file)
         overrides->log_file = base->log_file;
@@ -2797,16 +2798,13 @@ static void *merge_jk_config(ap_pool * p
     if (!overrides->key_size_indicator)
         overrides->key_size_indicator = base->key_size_indicator;
 
-/* Don't simply accumulate bits in the JK_OPT_FWDURIMASK region, */
-/* because those are multi-bit values. */
+/* Don't simply accumulate bits in the JK_OPT_FWDURIMASK or
+ * JK_OPT_COLLAPSEMASK region, because those are multi-bit values. */
     if (overrides->options & JK_OPT_FWDURIMASK)
-        overrides->options |= (base->options & ~base->exclude_options) & 
~JK_OPT_FWDURIMASK;
-    else
-        overrides->options |= (base->options & ~base->exclude_options);
+        mask |= JK_OPT_FWDURIMASK;
     if (overrides->options & JK_OPT_COLLAPSEMASK)
-        overrides->options |= (base->options & ~base->exclude_options) & 
~JK_OPT_COLLAPSEMASK;
-    else
-        overrides->options |= (base->options & ~base->exclude_options);
+        mask |= JK_OPT_COLLAPSEMASK;
+    overrides->options |= (base->options & ~base->exclude_options) & ~mask;
 
     if (base->envvars) {
         if (overrides->envvars && overrides->envvars_has_own) {
@@ -3005,7 +3003,6 @@ static void jk_init(server_rec * s, ap_p
             jk_server_conf_t *srvconf = (jk_server_conf_t 
*)create_jk_config(p, srv);
             sconf = (jk_server_conf_t *)merge_jk_config(p, sconf, srvconf);
             ap_set_module_config(srv->module_config, &jk_module, sconf);
-
         }
 
         if (sconf && sconf->was_initialized == JK_FALSE) {
@@ -3027,8 +3024,22 @@ static void jk_init(server_rec * s, ap_p
                     uri_worker_map_switch(sconf->uw_map, sconf->log);
                     uri_worker_map_load(sconf->uw_map, sconf->log);
                 }
-                if (conf->options & JK_OPT_COLLAPSEMASK)
-                    sconf->uw_map->collapse_slashes = conf->options & 
JK_OPT_COLLAPSEMASK;
+                switch (sconf->options & JK_OPT_COLLAPSEMASK) {
+                case JK_OPT_COLLAPSEALL:
+                    sconf->uw_map->collapse_slashes = JK_COLLAPSE_ALL;
+                    break;
+                case JK_OPT_COLLAPSENONE:
+                    sconf->uw_map->collapse_slashes = JK_COLLAPSE_NONE;
+                    break;
+                case JK_OPT_COLLAPSEUNMOUNT:
+                    sconf->uw_map->collapse_slashes = JK_COLLAPSE_UNMOUNT;
+                    break;
+                default:
+                    ap_log_error(APLOG_MARK, APLOG_WARNING, srv,
+                                 "Collapse slashes value %d ignored, setting 
to %d",
+                                 sconf->options & JK_OPT_COLLAPSEMASK, 
JK_COLLAPSE_DEFAULT);
+                    sconf->uw_map->collapse_slashes = JK_COLLAPSE_DEFAULT;
+                }
             }
             else {
                 if (sconf->mountcopy == JK_TRUE) {

Modified: tomcat/jk/trunk/native/apache-2.0/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/apache-2.0/mod_jk.c?rev=1647133&r1=1647132&r2=1647133&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-2.0/mod_jk.c Sun Dec 21 12:48:42 2014
@@ -2988,6 +2988,7 @@ static void *merge_jk_config(apr_pool_t
 {
     jk_server_conf_t *base = (jk_server_conf_t *) basev;
     jk_server_conf_t *overrides = (jk_server_conf_t *) overridesv;
+    int mask = 0;
 
     if (!overrides->log_file)
         overrides->log_file = base->log_file;
@@ -3032,16 +3033,13 @@ static void *merge_jk_config(apr_pool_t
     if (!overrides->key_size_indicator)
         overrides->key_size_indicator = base->key_size_indicator;
 
-/* Don't simply accumulate bits in the JK_OPT_FWDURIMASK region, */
-/* because those are multi-bit values. */
+/* Don't simply accumulate bits in the JK_OPT_FWDURIMASK or
+ * JK_OPT_COLLAPSEMASK region, because those are multi-bit values. */
     if (overrides->options & JK_OPT_FWDURIMASK)
-        overrides->options |= (base->options & ~base->exclude_options) & 
~JK_OPT_FWDURIMASK;
-    else
-        overrides->options |= (base->options & ~base->exclude_options);
+        mask |= JK_OPT_FWDURIMASK;
     if (overrides->options & JK_OPT_COLLAPSEMASK)
-        overrides->options |= (base->options & ~base->exclude_options) & 
~JK_OPT_COLLAPSEMASK;
-    else
-        overrides->options |= (base->options & ~base->exclude_options);
+        mask |= JK_OPT_COLLAPSEMASK;
+    overrides->options |= (base->options & ~base->exclude_options) & ~mask;
 
     if (base->envvars) {
         if (overrides->envvars && overrides->envvars_has_own) {
@@ -3496,7 +3494,6 @@ static int jk_post_config(apr_pool_t * p
                     jk_server_conf_t *srvconf = (jk_server_conf_t 
*)create_jk_config(pconf, srv);
                     sconf = (jk_server_conf_t *)merge_jk_config(pconf, sconf, 
srvconf);
                     ap_set_module_config(srv->module_config, &jk_module, 
sconf);
-
                 }
 
                 if (sconf && sconf->was_initialized == JK_FALSE) {
@@ -3519,8 +3516,22 @@ static int jk_post_config(apr_pool_t * p
                             uri_worker_map_switch(sconf->uw_map, sconf->log);
                             uri_worker_map_load(sconf->uw_map, sconf->log);
                         }
-                        if (conf->options & JK_OPT_COLLAPSEMASK)
-                            sconf->uw_map->collapse_slashes = conf->options & 
JK_OPT_COLLAPSEMASK;
+                        switch (sconf->options & JK_OPT_COLLAPSEMASK) {
+                        case JK_OPT_COLLAPSEALL:
+                            sconf->uw_map->collapse_slashes = JK_COLLAPSE_ALL;
+                            break;
+                        case JK_OPT_COLLAPSENONE:
+                            sconf->uw_map->collapse_slashes = JK_COLLAPSE_NONE;
+                            break;
+                        case JK_OPT_COLLAPSEUNMOUNT:
+                            sconf->uw_map->collapse_slashes = 
JK_COLLAPSE_UNMOUNT;
+                            break;
+                        default:
+                            ap_log_error(APLOG_MARK, APLOG_WARNING, 0, s,
+                                         "Collapse slashes value %d ignored, 
setting to %d",
+                                         sconf->options & JK_OPT_COLLAPSEMASK, 
JK_COLLAPSE_DEFAULT);
+                            sconf->uw_map->collapse_slashes = 
JK_COLLAPSE_DEFAULT;
+                        }
                     }
                     else {
                         if (sconf->mountcopy == JK_TRUE) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to