tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Jennings" <m...@southgatesoftware.com>
Subject patch to jk_uri_worker_map.c -> slightly more sophisticated string matching
Date Fri, 02 Nov 2001 19:12:59 GMT
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" <Larry.Isaacs@sas.com>
To: "'Tomcat Developers List'" <tomcat-dev@jakarta.apache.org>
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:mike@southgatesoftware.com]
> > 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" <Larry.Isaacs@sas.com>
> > To: "'Tomcat Developers List'" <tomcat-dev@jakarta.apache.org>
> > 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:mike@southgatesoftware.com]
> > > > Sent: Thursday, November 01, 2001 12:35 PM
> > > > To: tomcat-dev@jakarta.apache.org
> > > > 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:tomcat-dev-unsubscribe@jakarta.apache.org>
> > > For additional commands, e-mail:
> > <mailto:tomcat-dev-help@jakarta.apache.org>
> > >
> > >
> >
> >
> > --
> > To unsubscribe, e-mail:
> > <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
> > For additional commands, e-mail:
> > <mailto:tomcat-dev-help@jakarta.apache.org>
> >
>
> --
> To unsubscribe, e-mail:
<mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail:
<mailto:tomcat-dev-help@jakarta.apache.org>
>
>


--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>


Mime
View raw message