billbarker    2003/06/26 19:54:18

  Modified:    jk/native/common jk_uri_worker_map.c jk_uri_worker_map.h
  Log:
  Fix problem with URLs that contain "//".
  
  This is essentially what Apache/httpd does in location_walk.
  
  Reported by: Palle Girgensohn <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  1.15      +32 -7     jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.c
  
  Index: jk_uri_worker_map.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.c,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- jk_uri_worker_map.c       21 Apr 2002 22:57:11 -0000      1.14
  +++ jk_uri_worker_map.c       27 Jun 2003 02:54:17 -0000      1.15
  @@ -453,6 +453,32 @@
       return JK_FALSE;
   }
   
  +void jk_no2slash(char *name)
  +{
  +    char *d, *s;
  +
  +    s = d = name;
  +
  +#if defined(WIN32)
  +    /* Check for UNC names.  Leave leading two slashes. */
  +    if (s[0] == '/' && s[1] == '/')
  +        *d++ = *s++;
  +#endif
  +
  +    while (*s) {
  +        if ((*d++ = *s) == '/') {
  +            do {
  +                ++s;
  +            } while (*s == '/');
  +        }
  +        else {
  +            ++s;
  +        }
  +    }
  +    *d = '\0';
  +}
  +
  +
   char *map_uri_to_worker(jk_uri_worker_map_t *uw_map,
                           const char *uri,
                           jk_logger_t *l)
  @@ -464,17 +490,16 @@
           unsigned i;
           unsigned best_match = -1;
           unsigned longest_match = 0;
  -        char * clean_uri = NULL;
  -        char *url_rewrite = strstr(uri, JK_PATH_SESSION_IDENTIFIER);
  +        char * clean_uri = jk_pool_strdup(&uw_map->tp,uri);
  +        char *url_rewrite = strstr(clean_uri, JK_PATH_SESSION_IDENTIFIER);
           
           if(url_rewrite) {
  -            clean_uri = jk_pool_strdup(&uw_map->tp,uri);
  -            url_rewrite = strstr(clean_uri, JK_PATH_SESSION_IDENTIFIER);
               *url_rewrite = '\0';
  -            uri = clean_uri;
           }
  +        jk_no2slash(clean_uri);
  +        uri = clean_uri;
   
  -             jk_log(l, JK_LOG_DEBUG, "Attempting to map URI '%s'\n", uri);
  +        jk_log(l, JK_LOG_DEBUG, "Attempting to map URI '%s'\n", uri);
           for(i = 0 ; i < uw_map->size ; i++) {
               uri_worker_record_t *uwr = uw_map->maps[i];
   
  
  
  
  1.6       +3 -1      jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.h
  
  Index: jk_uri_worker_map.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_uri_worker_map.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- jk_uri_worker_map.h       4 Dec 2001 19:44:23 -0000       1.5
  +++ jk_uri_worker_map.h       27 Jun 2003 02:54:17 -0000      1.6
  @@ -95,6 +95,8 @@
   int uri_worker_map_close(jk_uri_worker_map_t *uw_map,
                            jk_logger_t *l);
   
  +void jk_no2slash(char *name);
  +
   char *map_uri_to_worker(jk_uri_worker_map_t *uw_map,
                           const char *uri,
                           jk_logger_t *l);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to