Mike, Thanks for the patch and your interest. One small problem: the development of jk moved to jakarta-tomcat-connectors. We should do only 'major' bug fixes in j-t/src/native.
Of course, all rules have exceptions - but it is extremely painfull to merge and track 2 codebases. Costin On Fri, 2 Nov 2001, Michael Jennings wrote: > If anyone sees any glaring problems with the following modification to > mod_jk > please let me know. > > -Mike Jennings > > Index: jakarta-tomcat/src/native/jk/jk_uri_worker_map.c > =================================================================== > RCS file: > /home/cvspublic/jakarta-tomcat/src/native/jk/Attic/jk_uri_worker_map.c,v > retrieving revision 1.3.2.1 > diff -r1.3.2.1 jk_uri_worker_map.c > 75,77c75,78 > < #define MATCH_TYPE_EXACT (0) > < #define MATCH_TYPE_CONTEXT (1) > < #define MATCH_TYPE_SUFFIX (2) > --- > > #define MATCH_TYPE_EXACT (0) /* match an exact pattern */ > > #define MATCH_TYPE_CONTEXT (1) /* match all URIs in a given context */ > > #define MATCH_TYPE_SUFFIX (2) /* match all URIs of the form *.ext */ > > #define MATCH_TYPE_GENERAL_SUFFIX (3) /* match all URIs of the form *ext > */ > 231c232 > < > --- > > > 236,237c237,238 > < jk_log(l, JK_LOG_ERROR, > < > "jk_uri_worker_map_t::uri_worker_map_open, malloc failed\n"); > --- > > jk_log(l, JK_LOG_ERROR, > > > "jk_uri_worker_map_t::uri_worker_map_open, malloc failed\n"); > 244,245c245,246 > < * we need to have a '/' then a '*' and the a > '.' or a > < * '/' then a '*' > --- > > * we need to have a '/' then a '*' and the a > '.' or a > > * '/' then a '*' > 247c248,252 > < asterisk--; > --- > > asterisk--; /* point to char before asterisk > */ > > /* asterisk[0]='/' > > asterisk[1]='*' > > asterisk[2]='.' or asterisk[2]='\0' or > asterisk[2]!='\0' > > */ > 248a254 > > asterisk[1] = '\0'; /* terminate the uri > pattern at the asterisk */ > 251c257 > < asterisk[1] = asterisk[2] = '\0'; > --- > > asterisk[2] = '\0'; > 252a259,260 > > /* uri-pattern will now contain > context only > > since asterisk[1]='\0' */ > 256,258c264,276 > < jk_log(l, JK_LOG_DEBUG, > < "Into > jk_uri_worker_map_t::uri_worker_map_open, suffix rule %s.%s=%s was added\n", > < uri, asterisk + 3, worker); > --- > > jk_log(l, JK_LOG_DEBUG, > > "Into > jk_uri_worker_map_t::uri_worker_map_open, suffix rule %s.%s=%s was added\n", > > uri, asterisk + 3, worker); > > j++; > > } else if ('\0' != asterisk[2]) { > > /* general suffix rule */ > > uw_map->maps[j].worker_name = worker; > > uw_map->maps[j].context = uri; > > uw_map->maps[j].suffix = asterisk + > 2; > > uw_map->maps[j].match_type = > MATCH_TYPE_GENERAL_SUFFIX; > > jk_log(l, JK_LOG_DEBUG, > > "Into > jk_uri_worker_map_t::uri_worker_map_open, general suffix rule %s*%s=%s was > added\n", > > uri, asterisk + 2, worker); > 260c278,279 > < } else { > --- > > } > > else { > 262d280 > < asterisk[1] = '\0'; > 267,269c285,287 > < jk_log(l, JK_LOG_DEBUG, > < "Into > jk_uri_worker_map_t::uri_worker_map_open, match rule %s=%s was added\n", > < uri, worker); > --- > > jk_log(l, JK_LOG_DEBUG, > > "Into > jk_uri_worker_map_t::uri_worker_map_open, match rule %s=%s was added\n", > > uri, worker); > 273c291 > < /* not leagal !!! */ > --- > > /* not legal !!! */ > 275c293 > < > "jk_uri_worker_map_t::uri_worker_map_open, [%s=%s] not a leagal rule\n", > --- > > > "jk_uri_worker_map_t::uri_worker_map_open, [%s=%s] not a legal rule\n", > 321a340,353 > > /* returns the index of the last occurrence of the 'ch' character > > if ch=='\0' returns the length of the string str > > */ > > int last_index_of(const char *str,char ch) > > { > > const char *str_minus_one=str-1; > > const char *s=str+strlen(str); > > while(s!=str_minus_one && ch!=*s) > > { > > --s; > > } > > return (s-str); > > } > > > 379a412,419 > > } else if(MATCH_TYPE_GENERAL_SUFFIX == > uw_map->maps[i].match_type) { > > int > suffix_start=last_index_of(uri,uw_map->maps[i].suffix[0]); > > if (suffix_start>=0 && > 0==strcmp(uri+suffix_start,uw_map->maps[i].suffix)) { > > if(uw_map->maps[i].ctxt_len >= longest_match) { > > longest_match = uw_map->maps[i].ctxt_len; > > best_match = i; > > } > > } > 382,385c422,425 > < > < for(suffix_start = strlen(uri) - 1 ; > < suffix_start > 0 && '.' != uri[suffix_start]; > < suffix_start--) > --- > > > > for(suffix_start = strlen(uri) - 1 ; > > suffix_start > 0 && '.' != uri[suffix_start]; > > suffix_start--) > 391c431 > < #ifdef WIN32 > --- > > #ifdef WIN32 > > > ----- Original Message ----- > From: "Larry Isaacs" <[EMAIL PROTECTED]> > To: "'Tomcat Developers List'" <[EMAIL PROTECTED]> > Sent: Thursday, November 01, 2001 12:32 PM > Subject: RE: Does anyone see anything wrong with this fix? > > > > It isn't a matter of how the '*' is interpreted, but that > > mod_jk will put a null terminator following the '*' if the > > next character isn't a '.'. Thus: > > > > JkMount /*something ... > > > > and > > > > JkMount /* ... > > > > end up being equivalent. So far no one has found time to > > add more sophisticated string matching. Feel free to > > submit a patch, though this should be against mod_jk > > in jakarta-tomcat-connectors. > > > > There was an earlier attempt in Tomcat 3.3 to have mod_jk > > work with Handler directives in the httpd.conf. This would > > allow Apache's pattern matching abilities to be used to > > map requests to Tomcat. It wasn't feasible to finish this > > approach, so it was removed from Tomcat 3.3. It may still > > get implemented in the jakarta-tomcat-connectors version > > of mod_jk, assuming a better approach doesn't present itself. > > > > Larry > > > > > -----Original Message----- > > > From: Michael Jennings [mailto:[EMAIL PROTECTED]] > > > Sent: Thursday, November 01, 2001 3:14 PM > > > To: Tomcat Developers List > > > Subject: Re: Does anyone see anything wrong with this fix? > > > > > > > > > Thanks for the feedback. > > > > > > So "/path/*.something" > > > will handle URI's like "/path/sub1/sub2/file.something" > > > "/path/sub1/sub2/anotherfilename.something" > > > > > > but "/path/*something" will NOT handle URI's like > > > "/path/sub1/sub2/here_is_something" > > > or > > > "/path/moreofsomething" > > > or > > > "/path/sub1/sub2/sub3/something" > > > > > > So the asterisk can only be used in conjunction with a dot as in > > > "*.something" as far as URI mapping is concerned? > > > > > > So the real wildcard sequence is actually "*." and "*xyz" is > > > interpreted as > > > "*"? > > > > > > Wouldn't it be better to make mod_jk deal with wildcards a > > > little bit more > > > intelligently, or am I missing something? (which is more likely) > > > > > > -Mike Jennings > > > > > > ----- Original Message ----- > > > From: "Larry Isaacs" <[EMAIL PROTECTED]> > > > To: "'Tomcat Developers List'" <[EMAIL PROTECTED]> > > > Sent: Thursday, November 01, 2001 10:42 AM > > > Subject: RE: Does anyone see anything wrong with this fix? > > > > > > > > > > I believe mod_jk's JkMount currently only accepts mappings in the > > > > form: > > > > > > > > JkMount /path/* > > > > JkMount /path/*.ext > > > > > > > > Something like: > > > > > > > > JkMount /path/*something > > > > > > > > is another way of saying: > > > > > > > > JkMount /path/* > > > > > > > > which makes the other settings written irrelevant since all > > > > requests will be mapped to Tomcat. See the: > > > > > > > > /* context based */ > > > > asterisk[1] = '\0'; > > > > > > > > in jk_uri_worker_map.c file. > > > > > > > > Tomcat 3.3 deals with this by having the generated mod_jk.conf > > > > use the "JkMount /path/*" approach by default. If you add > > > > forwardAll="false" to the ApacheConfig line in server.xml, > > > > it will write a mod_jk.conf similar to that of Tomcat 3.2.x, > > > > but with additional mappings. These additional mappings for > > > > the context will include one like the following: > > > > > > > > JkMount /examples/jsp/security/login/j_security_check ajp13 > > > > > > > > If you want "j_security_check" to work in Tomcat 3.2.x without > > > > mapping all requests to Tomcat, you will need to add mappings > > > > like this. It is beyond the scope of Tomcat 3.2.x development > > > > to back port Tomcat 3.3's behavior to Tomcat 3.2.x. > > > > > > > > Cheers, > > > > Larry > > > > > > > > > > > > > -----Original Message----- > > > > > From: Michael Jennings [mailto:[EMAIL PROTECTED]] > > > > > Sent: Thursday, November 01, 2001 12:35 PM > > > > > To: [EMAIL PROTECTED] > > > > > Subject: Does anyone see anything wrong with this fix? > > > > > > > > > > > > > > > As far as I can tell, the following modification to the > > > > > ApacheConfig.java class will > > > > > enable form-based authentication to work for people using > > > > > mod_jk.conf-auto > > > > > with Apache. > > > > > > > > > > > > > > > mod_jk needs to be told to handle requests of the form > > > > > "/webapproot/somedir/j_security_check" > > > > > > > > > > since a login.jsp page (for form-based authentication) > > > may exist at > > > > > "/webapproot/somedir/login.jsp" and may specify "j_security_check" > > > > > as the target of a form submission. In order for the > > > > > form-based authentication > > > > > machinery to work, it needs to get the POST request that > > > is going to > > > > > "/webapproot/somedir/j_security_check" > > > > > which means that pattern has to be present in the mod_jk.conf-auto > > > > > > > > > > ie: the following line must be in the mod_jk configuration file: > > > > > JkMount /webapproot/*j_security_check ajp12 > > > > > > > > > > Does anyone see any potential problems with this? > > > > > > > > > > -Mike Jennings > > > > > > > > > > Index: > > > > > jakarta-tomcat/src/share/org/apache/tomcat/task/ApacheConfig.java > > > > > > > > =================================================================== > > > > > RCS file: > > > > > /home/cvspublic/jakarta-tomcat/src/share/org/apache/tomcat/tas > > > > > k/Attic/ApacheConfig.java,v > > > > > retrieving revision 1.12.2.2 > > > > > diff -r1.12.2.2 ApacheConfig.java > > > > > 202a203 > > > > > > mod_jk.println("JkMount /*j_security_check ajp12"); > > > > > 289a291 > > > > > > mod_jk.println("JkMount " + path > > > +"/*j_security_check ajp12"); > > > > > > > > > > > > > > > > > > -- > > > > To unsubscribe, e-mail: > > > <mailto:[EMAIL PROTECTED]> > > > > For additional commands, e-mail: > > > <mailto:[EMAIL PROTECTED]> > > > > > > > > > > > > > > > > > -- > > > To unsubscribe, e-mail: > > > <mailto:[EMAIL PROTECTED]> > > > For additional commands, e-mail: > > > <mailto:[EMAIL PROTECTED]> > > > > > > > -- > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>