All,

There was a bug in the patch that I posted. Below is the final patch I will post to the group.

-chris

*** common/jk_uri_worker_map.c 2003-09-06 11:37:21.000000000 -0400
--- common/jk_uri_worker_map.c.new 2004-04-08 14:23:10.000000000 -0400
***************
*** 80,85 ****
--- 80,86 ----
#define MATCH_TYPE_GENERAL_SUFFIX (3) /* match all URIs of the form *ext */
/* match all context path URIs with a path component suffix */
#define MATCH_TYPE_CONTEXT_PATH (4)
+ #define MATCH_TYPE_JSESSIONID (5)

struct uri_worker_record {
/* Original uri for logging */
***************
*** 300,305 ****
--- 301,317 ----
"Into jk_uri_worker_map_t::uri_worker_map_open, "
"suffix rule %s.%s=%s was added\n",
uri, asterisk + 3, worker);
+ } else if(0 == strncmp("/*" JK_PATH_SESSION_IDENTIFIER "*",asterisk,14) ) {
+ /* jsessionid rule */
+ asterisk[1] = '\0';
+ uwr->worker_name = worker;
+ uwr->context = uri;
+ uwr->suffix = "\0"; /* avoids some problems */
+ uwr->match_type = MATCH_TYPE_JSESSIONID;
+ jk_log(l, JK_LOG_DEBUG,
+ "Into jk_uri_worker_map_t::uri_worker_map_open, "
+ "jsessionid rule %s*;jsessionid*=%s was added\n",
+ uri, worker);
} else if ('\0' != asterisk[2]) {
/* general suffix rule */
asterisk[1] = '\0';
***************
*** 478,483 ****
--- 490,523 ----
*d = '\0';
}

+ uri_worker_record_t *check_jsessionid_matches(char *uri,
+ jk_uri_worker_map_t *uw_map,
+ jk_logger_t *l)
+ {
+ unsigned i;
+ uri_worker_record_t *match = NULL;
+
+ for(i = 0 ; i < uw_map->size ; i++) {
+ uri_worker_record_t *uwr = uw_map->maps[i];
+
+ if(MATCH_TYPE_JSESSIONID == uwr->match_type) {
+ /* Check context match */
+
+ if(0 == strncmp(uwr->context,
+ uri,
+ uwr->ctxt_len)) {
+ /* Looks like a match: URI contains ";jsessionid", context matches */
+
+ jk_log(l, JK_LOG_DEBUG, "check_jsessionid_matches: Found context match: %s\n", uwr->context);
+
+ match = uwr;
+ break;
+ }
+ } /* MATCH_TYPE_JSESSIONID */
+ } /* foreach mapping */
+
+ return match;
+ }

  char *map_uri_to_worker(jk_uri_worker_map_t *uw_map,
                          char *uri,
***************
*** 493,498 ****
--- 533,545 ----
          char *url_rewrite = strstr(uri, JK_PATH_SESSION_IDENTIFIER);

if(url_rewrite) {
+ uri_worker_record_t *match = check_jsessionid_matches(uri, uw_map, l);
+ if(NULL != match) {
+ jk_log(l, JK_LOG_DEBUG, "Mapped URI %s to context %s using jsessioni match\n", uri, match->context);
+
+ return match->worker_name;
+ }
+
*url_rewrite = '\0';
}
jk_no2slash(uri);
***************
*** 559,564 ****
--- 606,615 ----
}
}
}
+ } else if (MATCH_TYPE_JSESSIONID == uwr->match_type) {
+
+ /* do nothing -- these have already been handled */
+
} else /* suffix match */ {
int suffix_start;


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to