Re: Pattern sorting problem (BUG?) Re: Regex use

Robert Ellis Parrott <[email protected]> Thu, 2 Jan 2003 14:34:39 -0500 (EST)
Newsgroups gmane.comp.java.securityfilter.user
Message-ID <[email protected]>

Wonderful!

I'm looking forward to it.

I tried to look into throwing exceptions in SecurityConfig when files
aren't found, but most errors seem to be related to regular expression
matching, so I figure I should wait for your changes that remove regex
stuff for now.


rob


On Thu, 2 Jan 2003, Max Cooper wrote:

> Rob,
>
> Well, that's another bug. I just wrote it up in the bug tracking system on
> SourceForge and then promptly fixed it in CVS. It is fixed right now in CVS.
> All I did was jostle the values of the pattern type constants to put
> EXACT_TYPE first.
>
> Note that the configuration in CVS currently uses the Jakarta-ORO regex
> package, but the upcoming release will not. There will be an (overdue)
> release in the next day or two that fixes a lot of the bugs found over the
> past few months. I will post an announcement to this list when it is ready.
> The code in the CVS repository should be functional most of the time (except
> for when I do sloppy multi-file commits, etc.).
>
> -Max
>
> ----- Original Message -----
> From: "Robert Ellis Parrott" <[email protected]>
> To: "Max Cooper" <[email protected]>
> Cc: <securityfilter-user-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
> Sent: Thursday, January 02, 2003 8:57 AM
> Subject: Pattern sorting problem (BUG?) Re: [securityfilter-user] Regex use
>
>
> >
> > I gave your suggestion below for ordering url patterns a try, and I
> > believe that there is some bug in the code at this point. This is all
> > based on latest CVS.
> >
> > The security constraints are as follows:
> >
> > <!-- Default configuration: secure all to begin with -->
> >
> > <security-constraint>
> >    <web-resource-collection>
> >       <web-resource-name>Basic Secured resources</web-resource-name>
> >       <url-pattern>/*</url-pattern>
> >    </web-resource-collection>
> >    <auth-constraint>
> >      <role-name>member</role-name>
> >    </auth-constraint>
> > </security-constraint>
> >
> > <security-constraint>
> >    <web-resource-collection>
> >       <web-resource-name>Public</web-resource-name>
> >       <url-pattern>/index.jsp</url-pattern>
> >       <url-pattern>/public-index.jsp</url-pattern>
> >       <url-pattern>/public/*</url-pattern>
> >    </web-resource-collection>
> > </security-constraint>
> >
> >
> >
> > I inserted some debugging code just after the sort in
> > SecurityFilter.init(); the output is as follows:
> >
> > SecurityFilter.init: ordered patterns:
> >   1) /public/*         (order in config file: 4  type: 1  len: 1 )
> >   2) /*                (order in config file: 1  type: 1  len: 0 )
> >   3) /index.jsp        (order in config file: 2  type: 3  len: 0 )
> >   4) /public-index.jsp (order in config file: 3  type: 3  len: 0 )
> >
> >
> > According to your statements below, the type 3 patterns should come first.
> >
> > Is this correct?
> >
> > For reference, the code inserted right after the
> > Collections.sort(patternList);
> > is:
> >
> > System.out.println("SecurityFilter.init: ordered patterns:");
> > order = 1;
> > for (Iterator i = patternList.iterator(); i.hasNext();) {
> > URLPattern pat =  (URLPattern) i.next();
> > System.out.println("  "+order+") "+pat.getPattern() +
> >                 " (order in config file: "+pat.getOrder()+
> >                 "  type: "+pat.getPatternType()+"  len:
> >                         "+pat.getPathLength()+" )");
> > order++;
> > }
> >
> >
> >
> >
> > On Wed, 1 Jan 2003, Max Cooper wrote:
> >
> > > Rob,
> > >
> > > I am in the process of converting SecurityFilter to the no-regex scheme
> > > recently submitted by Chris N. in some messages to this list. This
> scheme
> > > works for the pattern language defined in the Servlet spec, which is the
> > > document that guides development on SecurityFilter.
> > >
> > > >From your description, it sounds like you should be able to do what you
> need
> > > with the standard patterns. Here's an example (that should work with the
> > > current implementation; replace the '/*' pattern with '/' when the
> default
> > > servlet support is fixed/added in SecurityFilter):
> > >
> > >    <security-constraint>
> > >       <web-resource-collection>
> > >          <web-resource-name>Secure</web-resource-name>
> > >          <url-pattern>/*</url-pattern>
> > >       </web-resource-collection>
> > >       <auth-constraint>
> > >          <role-name>role_that_all_authenticated_users_have</role-name>
> > >       </auth-constraint>
> > >    </security-constraint>
> > >
> > >    <security-constraint>
> > >       <web-resource-collection>
> > >          <web-resource-name>Public</web-resource-name>
> > >          <url-pattern>/index.jsp</url-pattern>
> > >          <url-pattern>/public/*</url-pattern>
> > >       </web-resource-collection>
> > >    </security-constraint>
> > >
> > > The order of pattern matching should be:
> > >
> > > /index.jsp (EXACT_TYPE)
> > > /public/* (PATH_TYPE, comes before /* because it has more path elements
> than
> > > than /*)
> > > /*
> > >
> > > So visitors should be able to get to the index.jsp page and anything in
> > > /public without being authenticated (since no auth-constraints are set
> for
> > > those patterns). Everything else will require the user to be
> authenticated
> > > and in the role_that_all_authenticated_users_have role to gain access.
> If
> > > the configuration above doesn't work as you need it to, please post
> about
> > > what doesn't seem to work. It is off-the-cuff rather than tested, so it
> > > might not be quite right.
> > >
> > > I am interested in the possibilities of supporting more advanced
> security
> > > based on URL patterns, but spec compliance is the primary goal. Perhaps
> a
> > > regex system will be added back in as "extended features" are desired.
> Some
> > > matching based on a more powerful pattern language, perhaps including
> the
> > > query string, with plug-ins for determining access would be a useful way
> to
> > > separate security processing from functional processing, for instance.
> > > Imagine a mapping of the pattern /accountDetails.do* to a piece of code
> > > (specfied by a class name that implements a security checking interface)
> > > that will take the URL with the query string (or just the request) and
> then
> > > decide if access should be allowed or denied. The check would be by who
> owns
> > > the account rather than roles in this case (though normal role-based
> > > patterns may be processed first). Any persistent objects that need to be
> > > loaded for the security check could be passed via request attributes to
> the
> > > functional level (with some pain of coupling the security and functional
> > > layers), and perhaps different responses could be supported for error
> > > ("account does not exist") versus "access denied" cases, if that would
> be
> > > useful. Anyway, this example doesn't require regex stuff, but perhaps as
> we
> > > flesh out some more requirements, regex support will be needed again. It
> > > would probably be best to offer these extended features as a separate
> filter
> > > for use with container-managed authentication for portability, though
> > > perhaps there is something to gain by having SecurityFilter support both
> the
> > > container-clone stuff and the extended features. These are just ideas at
> > > this point with no code to speak of at this time.
> > >
> > > -Max
> > >
> > > ----- Original Message -----
> > > From: "Robert Ellis Parrott" <[email protected]>
> > > To: <securityfilter-user-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
> > > Sent: Tuesday, December 31, 2002 2:38 PM
> > > Subject: [securityfilter-user] Regex use
> > >
> > >
> > > >
> > > > I looked into SecurityFilter originally because I needed to protect
> > > > almost all resources within a webapp except for a few that represent a
> > > > front door view, and login page components, and I thought that regex
> > > > functionality could do this for me. I had hoped that I could specify a
> > > > regex in the config file, since they are so powerful.
> > > >
> > > > However, the way that SecurityFilter works is that it assumes a
> > > > significantly simpler URL Pattern in the config file, so that my regex
> > > > expressions are mauled up.
> > > >
> > > > What I had wanted to do was match almost every URL expect those under
> a
> > > > /public directory, and one index.jsp page, so that instead of manually
> > > > securing a resource, the default is that it's secure and you have to
> > > > manually unsecure it.
> > > >
> > > > I propose that true and untampered regex functionality be included in
> the
> > > > matching code; this is a small modification, but allows for much more
> > > > powerful matching ability. I've made a modification to URLPattern to
> > > > accomplish this; basically, prefixing a URLPattern value by "RE:"
> tells
> > > > URLPattern to interpret it as a true regular expression, and compiler
> it
> > > > as is. I don't think that the string "RE:" will clash with any URL
> > > > pattern.
> > > >
> > > > And as for the suggestions that regex capability be removed, I agree
> that
> > > > it might be removed for some pattern types, but should still be
> available,
> > > > at least for this functionality.
> > > >
> > > > rob
> > > >
> > > >
> > > >
> > > >
> > >
> patch: ---------------------------------------------------------------------
> > > >
> > > > Index: URLPattern.java
> > > > ===================================================================
> > > > RCS file:
> > > >
> > >
> /cvsroot/securityfilter/securityfilter/src/share/org/securityfilter/filter/U
> > > RLPattern.java,v
> > > > retrieving revision 1.1
> > > > diff -r1.1 URLPattern.java
> > > > 85a86,90
> > > > > /**
> > > > > * Pattern type for patterns that are regular expressions themselves;
> > > > > * they are preceeded by "RE:".
> > > > > */
> > > > >    public static final int RE_TYPE = 4;
> > > > 189c194,197
> > > > <       if (pattern.startsWith("*.")) {
> > > > ---
> > > > >
> > > > >   if (pattern.startsWith("RE:") ) {
> > > > >          patternType = URLPattern.RE_TYPE;
> > > > >       } else if (pattern.startsWith("*.")) {
> > > > 251a260,263
> > > > >
> > > > >   // however, if RE_TYPE, assume that input was valid RE, and just
> > > remove "RE:" prefix
> > > > >   if (patternType == RE_TYPE) { convertedPattern =
> > > pattern.substring(3);}
> > > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > -------------------------------------------------------
> > > > This sf.net email is sponsored by:ThinkGeek
> > > > Welcome to geek heaven.
> > > > http://thinkgeek.com/sf
> > > > _______________________________________________
> > > > securityfilter-user mailing list
> > > > securityfilter-user-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> > > > https://lists.sourceforge.net/lists/listinfo/securityfilter-user
> > > >
> > >
> > >
> >
> >
> >
> > -------------------------------------------------------
> > This sf.net email is sponsored by:ThinkGeek
> > Welcome to geek heaven.
> > http://thinkgeek.com/sf
> > _______________________________________________
> > securityfilter-user mailing list
> > securityfilter-user-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> > https://lists.sourceforge.net/lists/listinfo/securityfilter-user
> >
>
>



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf