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]