tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <christopher.d.schu...@comcast.net>
Subject Re: Apache http / mod_rewrite / mod_jk [hacked SOLUTION]
Date Thu, 08 Apr 2004 23:09:01 GMT
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;


Mime
View raw message