tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From <cost...@covalent.net>
Subject Re: patch to jk_uri_worker_map.c -> slightly more sophisticated string matching
Date Fri, 02 Nov 2001 20:08:46 GMT
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" <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>
>


--
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