Author: markt Date: Tue Sep 11 16:27:38 2018 New Revision: 1840588 URL: http://svn.apache.org/viewvc?rev=1840588&view=rev Log: Apache: Improve path parameter handling so that JkStripSession can remove session IDs that are specified on path parameters in any segment of the URI rather than only the final segment.
Modified: tomcat/jk/trunk/native/apache-2.0/mod_jk.c tomcat/jk/trunk/native/common/jk_util.c tomcat/jk/trunk/native/common/jk_util.h tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml 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=1840588&r1=1840587&r2=1840588&view=diff ============================================================================== --- tomcat/jk/trunk/native/apache-2.0/mod_jk.c (original) +++ tomcat/jk/trunk/native/apache-2.0/mod_jk.c Tue Sep 11 16:27:38 2018 @@ -4058,23 +4058,13 @@ static int jk_map_to_storage(request_rec jk_log(conf->log, JK_LOG_DEBUG, "no match for %s found", r->uri); - if (conf->strip_session == JK_TRUE && - conf->strip_session_name) { + if (conf->strip_session == JK_TRUE && conf->strip_session_name) { char *jsessionid; if (r->uri) { - jsessionid = strstr(r->uri, conf->strip_session_name); - 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'; - } + jk_strip_session_id(r->uri, conf->strip_session_name, conf->log); } if (r->filename) { - jsessionid = strstr(r->filename, conf->strip_session_name); - if (jsessionid) - *jsessionid = '\0'; + jk_strip_session_id(r->filename, conf->strip_session_name, conf->log); } return DECLINED; } Modified: tomcat/jk/trunk/native/common/jk_util.c URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.c?rev=1840588&r1=1840587&r2=1840588&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_util.c (original) +++ tomcat/jk/trunk/native/common/jk_util.c Tue Sep 11 16:27:38 2018 @@ -2282,6 +2282,42 @@ int jk_servlet_normalize(char *path, jk_ return 0; } +int jk_strip_session_id(char* path, char* session_name, jk_logger_t *logger) { + + char *jsessionid; + + jsessionid = strstr(path, session_name); + if (jsessionid) { + if (JK_IS_DEBUG_LEVEL(logger)) { + jk_log(logger, JK_LOG_DEBUG, + "removing session identifier for non servlet uri [%s]", path); + } + // Found a session path parameter. + // Need to skip at least as many characters as there are in + // strip_session_name + int i = strlen(session_name); + int j = 0; + // Increment i until the first character after the parameter + while (jsessionid[i] != '\0' && jsessionid[i] != ';' && jsessionid[i] != '/') { + i++; + } + // Copy until the end + while (jsessionid[i] != '\0') { + jsessionid[j++] = jsessionid[i++]; + } + // Terminate + jsessionid[j] = '\0'; + + if (JK_IS_DEBUG_LEVEL(logger)) { + jk_log(logger, JK_LOG_DEBUG, + "result of removing session identifier for non servlet uri is [%s]", path); + } + return 1; + } + + return 0; +} + #ifdef _MT_CODE_PTHREAD jk_pthread_t jk_gettid() { Modified: tomcat/jk/trunk/native/common/jk_util.h URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_util.h?rev=1840588&r1=1840587&r2=1840588&view=diff ============================================================================== --- tomcat/jk/trunk/native/common/jk_util.h (original) +++ tomcat/jk/trunk/native/common/jk_util.h Tue Sep 11 16:27:38 2018 @@ -60,7 +60,7 @@ int jk_log(jk_logger_t *l, int jk_check_attribute_length(const char *name, const char *value, jk_logger_t *l); - + const char *jk_get_worker_host(jk_map_t *m, const char *wname, const char *def); const char *jk_get_worker_source(jk_map_t *m, const char *wname, const char *def); @@ -190,7 +190,7 @@ int jk_is_unique_property(const char *pr int jk_is_deprecated_property(const char *prp_name); int jk_check_buffer_size(); - + int jk_is_valid_property(const char *prp_name); int jk_get_worker_stdout(jk_map_t *m, const char *wname, const char **stdout_name); @@ -250,6 +250,8 @@ int jk_wildchar_match(const char *str, c int jk_servlet_normalize(char *path, jk_logger_t *logger); +int jk_strip_session_id(char* path, char* session_name, jk_logger_t *logger); + #define JK_NORMALIZE_BAD_PATH -1 #define JK_NORMALIZE_TRAVERSAL -2 Modified: tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml?rev=1840588&r1=1840587&r2=1840588&view=diff ============================================================================== --- tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml (original) +++ tomcat/jk/trunk/xdocs/miscellaneous/changelog.xml Tue Sep 11 16:27:38 2018 @@ -61,6 +61,12 @@ be extracted from a path parameter in any segment of the URI, rather than only from the final segment. (markt) </fix> + <fix> + Apache: Improve path parameter handling so that + <code>JkStripSession</code> can remove session IDs that are specified on + path parameters in any segment of the URI rather than only the final + segment. (markt) + </fix> </changelog> </subsection> </section> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org