You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2011/10/23 22:13:31 UTC

svn commit: r1187963 - in /tomcat/jk/trunk: native/apache-1.3/ native/apache-2.0/ native/common/ native/iis/ xdocs/miscellaneous/ xdocs/reference/

Author: rjung
Date: Sun Oct 23 20:13:30 2011
New Revision: 1187963

URL: http://svn.apache.org/viewvc?rev=1187963&view=rev
Log:
BZ 51326: Add "session_cookie" and "session_path"
rule extensions. Contributed by Eiji Takahashi.

Modified:
    tomcat/jk/trunk/native/apache-1.3/mod_jk.c
    tomcat/jk/trunk/native/apache-2.0/mod_jk.c
    tomcat/jk/trunk/native/common/jk_lb_worker.c
    tomcat/jk/trunk/native/common/jk_service.h
    tomcat/jk/trunk/native/common/jk_uri_worker_map.c
    tomcat/jk/trunk/native/common/jk_uri_worker_map.h
    tomcat/jk/trunk/native/common/jk_util.c
    tomcat/jk/trunk/native/iis/jk_isapi_plugin.c
    tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
    tomcat/jk/trunk/xdocs/reference/uriworkermap.xml

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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-1.3/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-1.3/mod_jk.c Sun Oct 23 20:13:30 2011
@@ -755,6 +755,12 @@ static int init_ws_service(apache_privat
             s->extension.fail_on_status = ap_palloc(r->pool, e->fail_on_status_size * sizeof(int));
             memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
         }
+        if (e->session_cookie) {
+            s->extension.session_cookie = ap_pstrdup(r->pool, e->session_cookie);
+        }
+        if (e->session_path) {
+            s->extension.session_path = ap_pstrdup(r->pool, e->session_path);
+        }
     }
     reply_timeout = ap_table_get(r->subprocess_env, JK_ENV_REPLY_TIMEOUT);
     if (reply_timeout) {

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=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/apache-2.0/mod_jk.c (original)
+++ tomcat/jk/trunk/native/apache-2.0/mod_jk.c Sun Oct 23 20:13:30 2011
@@ -809,6 +809,12 @@ static int init_ws_service(apache_privat
             s->extension.fail_on_status = apr_palloc(r->pool, e->fail_on_status_size * sizeof(int));
             memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
         }
+        if (e->session_cookie) {
+            s->extension.session_cookie = apr_pstrdup(r->pool, e->session_cookie);
+        }
+        if (e->session_path) {
+            s->extension.session_path = apr_pstrdup(r->pool, e->session_path);
+        }
     }
     reply_timeout = apr_table_get(r->subprocess_env, JK_ENV_REPLY_TIMEOUT);
     if (reply_timeout) {

Modified: tomcat/jk/trunk/native/common/jk_lb_worker.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_lb_worker.c?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_lb_worker.c (original)
+++ tomcat/jk/trunk/native/common/jk_lb_worker.c Sun Oct 23 20:13:30 2011
@@ -492,6 +492,8 @@ static char *get_cookie(jk_ws_service_t 
 static char *get_sessionid(jk_ws_service_t *s, lb_worker_t *p, jk_logger_t *l)
 {
     char *val;
+    char *session_path;
+    char *session_cookie;
 
     /* If the web server sets a route, ignore the real session id
      * and fake a new one for that route.
@@ -504,9 +506,16 @@ static char *get_sessionid(jk_ws_service
         return val;
     }
 
-    val = get_path_param(s, p->session_path);
+    // set sesson_path
+    session_path = (s->extension.session_path) ?
+            s->extension.session_path : p->session_path;
+    // set session_cookie
+    session_cookie = (s->extension.session_cookie) ?
+            s->extension.session_cookie : p->session_cookie;
+
+    val = get_path_param(s, session_path);
     if (!val) {
-        val = get_cookie(s, p->session_cookie);
+        val = get_cookie(s, session_cookie);
     }
     if (val && !*val) {
         /* TODO: For now only log the empty sessions.
@@ -517,6 +526,8 @@ static char *get_sessionid(jk_ws_service
                "Detected empty session identifier.");
         return NULL;
     }
+    if (JK_IS_DEBUG_LEVEL(l))
+        jk_log(l, JK_LOG_DEBUG, "Detected session identifier [%s].", val);
     return val;
 }
 

Modified: tomcat/jk/trunk/native/common/jk_service.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_service.h?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_service.h (original)
+++ tomcat/jk/trunk/native/common/jk_service.h Sun Oct 23 20:13:30 2011
@@ -97,6 +97,10 @@ struct svc_extension
     int *fail_on_status;
     /* Use server error pages for responses >= 400. */
     int use_server_error_pages;
+    /* sesson_cookie overwrite */
+    char *session_cookie;
+    /* sesson_path overwrite */
+    char *session_path;
 };
 typedef struct svc_extension svc_extension_t;
 

Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.c?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.c (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.c Sun Oct 23 20:13:30 2011
@@ -47,6 +47,8 @@
 #define JK_UWMAP_EXTENSION_STOPPED        "stopped="
 #define JK_UWMAP_EXTENSION_FAIL_ON_STATUS "fail_on_status="
 #define JK_UWMAP_EXTENSION_USE_SRV_ERRORS "use_server_errors="
+#define JK_UWMAP_EXTENSION_SESSION_COOKIE "session_cookie="
+#define JK_UWMAP_EXTENSION_SESSION_PATH   "session_path="
 
 #define IND_SWITCH(x)                      (((x)+1) % 2)
 #define IND_THIS(x)                        ((x)[uw_map->index])
@@ -466,6 +468,9 @@ static void extension_fix_fail_on_status
 static void extension_fix_activation(jk_pool_t *p, const char *name, jk_worker_t *jw,
                                       rule_extension_t *extensions, jk_logger_t *l)
 {
+
+    JK_TRACE_ENTER(l);
+
     if (JK_IS_DEBUG_LEVEL(l))
         jk_log(l, JK_LOG_DEBUG,
                "Checking extension for worker %s of type %s (%d)",
@@ -482,6 +487,7 @@ static void extension_fix_activation(jk_
             if (!extensions->activation) {
                 jk_log(l, JK_LOG_ERROR,
                        "can't alloc extensions activation list");
+                JK_TRACE_EXIT(l);
                 return;
             } else if (JK_IS_DEBUG_LEVEL(l))
                 jk_log(l, JK_LOG_DEBUG,
@@ -519,6 +525,26 @@ static void extension_fix_activation(jk_
                JK_UWMAP_EXTENSION_STOPPED " for %s ignored",
                name, extensions->stopped);
     }
+
+    JK_TRACE_EXIT(l);
+
+}
+
+static void extension_fix_session(jk_pool_t *p, const char *name, jk_worker_t *jw,
+                                  rule_extension_t *extensions, jk_logger_t *l)
+{
+        if (jw->type != JK_LB_WORKER_TYPE && extensions->session_cookie) {
+            jk_log(l, JK_LOG_WARNING,
+                   "Worker %s is not of type lb, extension "
+                   JK_UWMAP_EXTENSION_SESSION_COOKIE " for %s ignored",
+                   name, extensions->session_cookie);
+        }
+        if (jw->type != JK_LB_WORKER_TYPE && extensions->session_path) {
+            jk_log(l, JK_LOG_WARNING,
+                   "Worker %s is not of type lb, extension "
+                   JK_UWMAP_EXTENSION_SESSION_PATH " for %s ignored",
+                   name, extensions->session_path);
+        }
 }
 
 void extension_fix(jk_pool_t *p, const char *name,
@@ -534,6 +560,7 @@ void extension_fix(jk_pool_t *p, const c
     if (extensions->fail_on_status_str) {
         extension_fix_fail_on_status(p, name, extensions, l);
     }
+    extension_fix_session(p, name, jw, extensions, l);
 }
 
 void uri_worker_map_switch(jk_uri_worker_map_t *uw_map, jk_logger_t *l)
@@ -602,6 +629,8 @@ void parse_rule_extensions(char *rule, r
     extensions->fail_on_status = NULL;
     extensions->fail_on_status_str = NULL;
     extensions->use_server_error_pages = 0;
+    extensions->session_cookie = NULL;
+    extensions->session_path = NULL;
 
 #ifdef _MT_CODE_PTHREAD
     param = strtok_r(rule, ";", &lasts);
@@ -670,6 +699,32 @@ void parse_rule_extensions(char *rule, r
                 else
                     extensions->fail_on_status_str = param + strlen(JK_UWMAP_EXTENSION_FAIL_ON_STATUS);
             }
+            else if (!strncmp(param, JK_UWMAP_EXTENSION_SESSION_COOKIE, strlen(JK_UWMAP_EXTENSION_SESSION_COOKIE))) {
+                if (extensions->session_cookie)
+                    jk_log(l, JK_LOG_WARNING,
+                           "extension '%s' in uri worker map only allowed once",
+                           JK_UWMAP_EXTENSION_SESSION_COOKIE);
+                else
+                    extensions->session_cookie = param + strlen(JK_UWMAP_EXTENSION_SESSION_COOKIE);
+            }
+            else if (!strncmp(param, JK_UWMAP_EXTENSION_SESSION_PATH, strlen(JK_UWMAP_EXTENSION_SESSION_PATH))) {
+                if (extensions->session_path)
+                    jk_log(l, JK_LOG_WARNING,
+                           "extension '%s' in uri worker map only allowed once",
+                           JK_UWMAP_EXTENSION_SESSION_PATH);
+                else {
+                    // Check if the session identifier starts with semicolon.
+                    if (!strcmp(param, JK_UWMAP_EXTENSION_SESSION_PATH)) {
+#ifdef _MT_CODE_PTHREAD
+                        param = strtok_r(NULL, ";", &lasts);
+#else
+                        param = strtok(NULL, ";");
+#endif
+                        extensions->session_path = param;
+                    } else
+                        extensions->session_path = param + strlen(JK_UWMAP_EXTENSION_SESSION_PATH);
+                }
+            }
             else {
                 jk_log(l, JK_LOG_WARNING,
                        "unknown rule extension '%s'",

Modified: tomcat/jk/trunk/native/common/jk_uri_worker_map.h
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_uri_worker_map.h?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_uri_worker_map.h (original)
+++ tomcat/jk/trunk/native/common/jk_uri_worker_map.h Sun Oct 23 20:13:30 2011
@@ -96,6 +96,10 @@ struct rule_extension
     char *fail_on_status_str;
     /* Use server error pages for responses >= 400. */
     int use_server_error_pages;
+    /* session_cookie overwrite */
+    char *session_cookie;
+    /* session_path overwrite */
+    char *session_path;
 };
 typedef struct rule_extension rule_extension_t;
 

Modified: tomcat/jk/trunk/native/common/jk_util.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.c?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_util.c (original)
+++ tomcat/jk/trunk/native/common/jk_util.c Sun Oct 23 20:13:30 2011
@@ -2081,6 +2081,8 @@ void jk_init_ws_service(jk_ws_service_t 
     s->extension.activation = NULL;
     s->extension.fail_on_status_size = 0;
     s->extension.fail_on_status = NULL;
+    s->extension.session_cookie = NULL;
+    s->extension.session_path = NULL;
     s->response_started = JK_FALSE;
     s->response_blocked = JK_FALSE;
     s->http_response_status = JK_HTTP_OK;

Modified: tomcat/jk/trunk/native/iis/jk_isapi_plugin.c
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/iis/jk_isapi_plugin.c?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/native/iis/jk_isapi_plugin.c (original)
+++ tomcat/jk/trunk/native/iis/jk_isapi_plugin.c Sun Oct 23 20:13:30 2011
@@ -3114,6 +3114,13 @@ static int init_ws_service(isapi_private
             s->extension.fail_on_status = jk_pool_alloc(s->pool, e->fail_on_status_size * sizeof(int));
             memcpy(s->extension.fail_on_status, e->fail_on_status, e->fail_on_status_size * sizeof(int));
         }
+        if (e->session_cookie) {
+            s->extension.session_cookie = jk_pool_strdup(s->pool, e->session_cookie);
+        }
+        if (e->session_path) {
+            s->extension.session_path = jk_pool_strdup(s->pool, e->session_path);
+        }
+
     }
 
     s->uw_map = uw_map;

Modified: tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml (original)
+++ tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Sun Oct 23 20:13:30 2011
@@ -44,6 +44,10 @@
   <br />
   <subsection name="Native">
     <changelog>
+      <add>
+        <bug>51326</bug>: URI Map: Add "session_cookie" and "session_path"
+        rule extensions. Contributed by Eiji Takahashi. (rjung)
+      </add>
       <update>
         <bug>51333</bug>: IIS: Document configuration
         requirement for 64 Bit environment. (rjung)

Modified: tomcat/jk/trunk/xdocs/reference/uriworkermap.xml
URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/reference/uriworkermap.xml?rev=1187963&r1=1187962&r2=1187963&view=diff
==============================================================================
--- tomcat/jk/trunk/xdocs/reference/uriworkermap.xml (original)
+++ tomcat/jk/trunk/xdocs/reference/uriworkermap.xml Sun Oct 23 20:13:30 2011
@@ -340,6 +340,14 @@ for this status code.
 </source>
 </p>
 </subsection>
+<subsection name="Extensions session_cookie and session_path">
+<br/>
+<p>
+The extensions <code>session_cookie</code> and <code>session_path</code>
+allows to define the load balancer worker attributes of the same name
+per mount.
+</p>
+</subsection>
 </section>
 
 <section name="Virtual host integration">



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