Author: mturk
Date: Fri Feb 23 22:50:05 2007
New Revision: 511227

URL: http://svn.apache.org/viewvc?view=rev&rev=511227
Log:
Fix 41439 for Apache servers by adding JkStripSession directive.

Modified:
    tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
    tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
    tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c
    tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
    tomcat/connectors/trunk/jk/xdocs/reference/apache.xml

Modified: tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c?view=diff&rev=511227&r1=511226&r2=511227
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-1.3/mod_jk.c Fri Feb 23 22:50:05 
2007
@@ -174,6 +174,7 @@
     int options;
     int exclude_options;
 
+    int strip_session;
     /*
      * Environment variables support
      */
@@ -1118,6 +1119,25 @@
     return NULL;
 }
 
+/*
+ * JkStripSession directive handling
+ *
+ * JkStripSession On/Off
+ */
+
+static const char *jk_set_strip_session(cmd_parms * cmd, void *dummy, int flag)
+{
+    server_rec *s = cmd->server;
+    jk_server_conf_t *conf =
+        (jk_server_conf_t *) ap_get_module_config(s->module_config,
+                                                  &jk_module);
+
+    /* Set up our value */
+    conf->strip_session = flag ? JK_TRUE : JK_FALSE;
+
+    return NULL;
+}
+
 /*****************************************************************
  *
  * Actually logging.
@@ -1791,6 +1811,13 @@
      "Should the base server mounts be copied to the virtual server"},
 
     /*
+     * JkStripSession specifies if mod_jk should strip the ;jsessionid
+     * from the unmapperd urls
+     */
+    {"JkStripSession", jk_set_strip_session, NULL, RSRC_CONF, FLAG,
+     "Should the base server strip the jsessionid from the url"},
+
+    /*
      * JkLogFile & JkLogLevel specifies to where should the plugin log
      * its information and how much.
      * JkLogStampFormat specify the time-stamp to be used on log
@@ -2128,6 +2155,7 @@
         c->cipher_indicator = NULL;
         c->session_indicator = NULL;
         c->key_size_indicator = NULL;
+        c->strip_session = JK_UNSET;
     } else {
         c->mount_file_reload = JK_URIMAP_DEF_RELOAD;
         c->log_level = JK_LOG_DEF_LEVEL;
@@ -2147,6 +2175,7 @@
         c->cipher_indicator = JK_ENV_CIPHER;
         c->session_indicator = JK_ENV_SESSION;
         c->key_size_indicator = JK_ENV_KEY_SIZE;
+        c->strip_session = JK_FALSE;
     }
 
     if (!jk_map_alloc(&(c->uri_to_context))) {
@@ -2261,6 +2290,8 @@
         if (!overrides->alias_dir)
             overrides->alias_dir = base->alias_dir;
     }
+    if (overrides->strip_session == JK_UNSET)
+        overrides->strip_session = base->strip_session;
 
     return overrides;
 }
@@ -2671,6 +2702,16 @@
                             }
                         }
                     }
+                }
+            }
+            else if (conf->strip_session == JK_TRUE) {
+                char *jsessionid = strstr(r->uri, JK_PATH_SESSION_IDENTIFIER);
+                if (jsessionid) {
+                    if (JK_IS_DEBUG_LEVEL(conf->log))
+                        jk_log(conf->log, JK_LOG_DEBUG,
+                               "removing session identifier [%s] for non 
servlet url [%s]",
+                               jsessionid, r->uri);
+                    *jsessionid = '\0';
                 }
             }
         }

Modified: tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c?view=diff&rev=511227&r1=511226&r2=511227
==============================================================================
--- tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/connectors/trunk/jk/native/apache-2.0/mod_jk.c Fri Feb 23 22:50:05 
2007
@@ -211,6 +211,7 @@
     int options;
     int exclude_options;
 
+    int strip_session;
     /*
      * Environment variables support
      */
@@ -1142,6 +1143,25 @@
     return NULL;
 }
 
+/*
+ * JkStripSession directive handling
+ *
+ * JkStripSession On/Off
+ */
+
+static const char *jk_set_strip_session(cmd_parms * cmd, void *dummy, int flag)
+{
+    server_rec *s = cmd->server;
+    jk_server_conf_t *conf =
+        (jk_server_conf_t *) ap_get_module_config(s->module_config,
+                                                  &jk_module);
+
+    /* Set up our value */
+    conf->strip_session = flag ? JK_TRUE : JK_FALSE;
+
+    return NULL;
+}
+
 /*****************************************************************
  *
  * Actually logging.
@@ -1832,6 +1852,13 @@
                  "Should the base server mounts be copied to the virtual 
server"),
 
     /*
+     * JkStripSession specifies if mod_jk should strip the ;jsessionid
+     * from the unmapperd urls
+     */
+    AP_INIT_FLAG("JkStripSession", jk_set_strip_session, NULL, RSRC_CONF,
+                 "Should the base server strip the jsessionid from the url"),
+
+    /*
      * JkLogFile & JkLogLevel specifies to where should the plugin log
      * its information and how much.
      * JkLogStampFormat specify the time-stamp to be used on log
@@ -2254,6 +2281,7 @@
         c->cipher_indicator = NULL;
         c->session_indicator = NULL;
         c->key_size_indicator = NULL;
+        c->strip_session = JK_UNSET;
     } else {
         c->mount_file_reload = JK_URIMAP_DEF_RELOAD;
         c->log_level = JK_LOG_DEF_LEVEL;
@@ -2273,6 +2301,7 @@
         c->cipher_indicator = JK_ENV_CIPHER;
         c->session_indicator = JK_ENV_SESSION;
         c->key_size_indicator = JK_ENV_KEY_SIZE;
+        c->strip_session = JK_FALSE;
     }
 
     if (!jk_map_alloc(&(c->uri_to_context))) {
@@ -2393,6 +2422,8 @@
         if (!overrides->alias_dir)
             overrides->alias_dir = base->alias_dir;
     }
+    if (overrides->strip_session == JK_UNSET)
+        overrides->strip_session = base->strip_session;
 
     return overrides;
 }
@@ -2821,7 +2852,7 @@
             }
 
             worker = map_uri_to_worker(conf->uw_map, r->uri, conf->log);
- 
+
             if (worker) {
                 r->handler = apr_pstrdup(r->pool, JK_HANDLER);
                 apr_table_setn(r->notes, JK_NOTE_WORKER_NAME, worker);
@@ -2924,6 +2955,16 @@
                     }
                 }
             }
+            else if (conf->strip_session == JK_TRUE) {
+                char *jsessionid = strstr(r->uri, JK_PATH_SESSION_IDENTIFIER);
+                if (jsessionid) {
+                    if (JK_IS_DEBUG_LEVEL(conf->log))
+                        jk_log(conf->log, JK_LOG_DEBUG,
+                               "removing session identifier [%s] for non 
servlet url [%s]",
+                               jsessionid, r->uri);
+                    *jsessionid = '\0';
+                }
+            }
         }
     }
 
@@ -2972,6 +3013,16 @@
                 if (r->main)
                     apr_table_setn(r->main->notes, JK_NOTE_WORKER_NAME, 
worker);
 
+            }
+            else if (conf->strip_session == JK_TRUE) {
+                char *jsessionid = strstr(r->uri, JK_PATH_SESSION_IDENTIFIER);
+                if (jsessionid) {
+                    if (JK_IS_DEBUG_LEVEL(conf->log))
+                        jk_log(conf->log, JK_LOG_DEBUG,
+                               "removing session identifier [%s] for non 
servlet url [%s]",
+                               jsessionid, r->uri);
+                    *jsessionid = '\0';
+                }
             }
         }
     }

Modified: tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c?view=diff&rev=511227&r1=511226&r2=511227
==============================================================================
--- tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/connectors/trunk/jk/native/iis/jk_isapi_plugin.c Fri Feb 23 22:50:05 
2007
@@ -528,13 +528,14 @@
         return JK_FALSE;
     }
 
-    if (s && s->ws_private) {
+    if (s && s->ws_private) {        
+        int rv = JK_TRUE;
         isapi_private_data_t *p = s->ws_private;
         if (!p->request_started) {
-            size_t len_of_status;
+            HSE_SEND_HEADER_EX_INFO hi;
             char *status_str;
-            char *headers_str;
-
+            char *headers_str = NULL;
+            BOOL keep_alive = FALSE;
             p->request_started = JK_TRUE;
 
             /*
@@ -543,9 +544,10 @@
             if (!reason) {
                 reason = status_reason(status);
             }
-            status_str = (char *)_alloca((6 + strlen(reason)) * sizeof(char));
+            status_str = (char *)malloc((6 + strlen(reason)));
             sprintf(status_str, "%d %s", status, reason);
-            len_of_status = strlen(status_str);
+            hi.pszStatus = status_str;
+            hi.cchStatus = strlen(status_str);
 
             /*
              * Create response headers string
@@ -555,11 +557,11 @@
                 for (i = 0, len_of_headers = 0; i < num_of_headers; i++) {
                     len_of_headers += strlen(header_names[i]);
                     len_of_headers += strlen(header_values[i]);
-                    len_of_headers += 4;        /* extra for colon, space and 
crlf */
+                    len_of_headers += 4;   /* extra for colon, space and crlf 
*/
                 }
 
-                len_of_headers += 3;    /* crlf and terminating null char */
-                headers_str = (char *)_alloca(len_of_headers * sizeof(char));
+                len_of_headers += 3;       /* crlf and terminating null char */
+                headers_str = (char *)malloc(len_of_headers);
                 headers_str[0] = '\0';
 
                 for (i = 0; i < num_of_headers; i++) {
@@ -569,25 +571,29 @@
                     strcat(headers_str, crlf);
                 }
                 strcat(headers_str, crlf);
+                hi.pszHeader = headers_str;
+                hi.cchHeader = strlen(headers_str);
             }
             else {
-                headers_str = crlf;
+                hi.pszHeader = crlf;
+                hi.cchHeader = 2;
             }
-
+            hi.fKeepConn = keep_alive;            
             if (!p->lpEcb->ServerSupportFunction(p->lpEcb->ConnID,
-                                                 HSE_REQ_SEND_RESPONSE_HEADER,
-                                                 status_str,
-                                                 (LPDWORD) &len_of_status,
-                                                 (LPDWORD) headers_str)) {
+                                                 
HSE_REQ_SEND_RESPONSE_HEADER_EX,
+                                                 &hi,
+                                                 NULL, NULL)) {
                 jk_log(logger, JK_LOG_ERROR,
-                       "HSE_REQ_SEND_RESPONSE_HEADER failed");
-                JK_TRACE_EXIT(logger);
-                return JK_FALSE;
+                       "HSE_REQ_SEND_RESPONSE_HEADER_EX failed");
+                rv = JK_FALSE;
             }
+            if (headers_str)
+                free(headers_str);
+            if (status_str)
+                free(status_str);
         }
         JK_TRACE_EXIT(logger);
-        return JK_TRUE;
-
+        return rv;
     }
 
     JK_LOG_NULL_PARAMS(logger);

Modified: tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml?view=diff&rev=511227&r1=511226&r2=511227
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/miscellaneous/changelog.xml Fri Feb 23 
22:50:05 2007
@@ -27,6 +27,11 @@
   <subsection name="Native">
     <changelog>
       <add>
+        <bug>41439</bug>: Allow session IDs to get stripped off URLs of static
+        content in Apache by adding JkStripSession
+        directive (configurable per vhost). (mturk)
+      </add>
+      <add>
       Change semantics of empty defaults for JkEnvVar variables.
       Until 1.2.19: not allowed. In 1.2.20: send variables as empty strings, if
       neither set to non empty in config, nor during runtime.

Modified: tomcat/connectors/trunk/jk/xdocs/reference/apache.xml
URL: 
http://svn.apache.org/viewvc/tomcat/connectors/trunk/jk/xdocs/reference/apache.xml?view=diff&rev=511227&r1=511226&r2=511227
==============================================================================
--- tomcat/connectors/trunk/jk/xdocs/reference/apache.xml (original)
+++ tomcat/connectors/trunk/jk/xdocs/reference/apache.xml Fri Feb 23 22:50:05 
2007
@@ -220,7 +220,15 @@
 Not sending variables with empty defaults and empty runtime value
 has been introduced in version 1.2.21.
 </p></attribute>
-
+<attribute name="JkStripSession" required="false"><p>
+If this directive is set to On in some virtual server,
+the session IDs <code>;jsessionid=...</code> will be
+removed for non matched URLs.
+<br/>
+This directive is only allowed inside VirtualHost.
+<br/>
+The default is Off.
+</p></attribute>
 
 </attributes>
 </section>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to