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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org