Seems like a bug to me.  Let's file a Jira issue.

Regards,
Alan

Jeff Genender wrote, On 7/29/2005 8:05 AM:


David Jencks wrote:

I think our behavior is correct. I don't quite understand what the other possibilities are. FWIW, I don't think we should bend over backward to support jsp pages not mentioned web.xml.


DJ, we have to support the behavior (to a degree - its in the JACC spec).

Per the JACC spec:

*******************
B.19 Calling isUserInRole from JSP not mapped to a Servlet

Checking a WebRoleRefPermission requires the name of a Servlet to identify the scope of the reference to role translation. The name of a scoping servlet has not been established for an unmapped JSP. Resolution– For every security role in the web application add a WebRoleRefPermission to the corresponding role. The name of all such permissions shall be the empty string, and the actions of each permission shall be the corresponding role name. When checking a WebRoleRefPermission from a JSP not mapped to a servlet, use a permission with the empty string as its name and with the argument to isUserInRole as its actions. This specification will require that containers implement this resolution when the Servlet Specification requires that containers test the caller for membership in the role named by the argument to isUserInRole when isUserInRole is called from an unmapped JSP.
*******************

In the JAASJettyRealm.isUserInRole() I see a call to JettyServletHolder.getCurrentServletName(). Does getCurrentServletName() return an empty String as required by the spec when its using an unmapped JSP? I cannot find any code that specifically does this. In Tomcat's version of TomcatGeronimoRealm.getServletName() I literally coded:

       /**
         * JACC v1.0 secion B.19
         */
        if (name.equals("jsp")) {
            name = "";
        }


Please let me know if I am not seeing something here or am not understanding this correctly.

Jeff



thanks
david jencks

On Jul 28, 2005, at 7:52 PM, Jeff Genender wrote:

Yes...there might be a bug here...

IIRC, the Jetty JACC code did not test for JACC v1.0 section B.19 which is an explicit test for JSPs under JACC. I am not sure if this is the case here...but it sounds like it.

I would like to see what David Jencks or Alan thinks about this.

Jeff

Gianny Damour wrote:

Hi,
I have been trying to understand why I was not able to make the Java Pet Store Supplier Application to pass a security check and I think that I have discovered a potential bug. Prior to log it, I would like to confirm that this is not a code issue in PetStore.
The scenario is rather simple:
* the url "/RcvrRequestProcessor" is secured and only the "administator" role can access it;
* a FORM based authentication is configured to log in the users;
* the url "/RcvrRequestProcessor" plays the role of a dispatcher servlet and forwards to the jsp file "/displayinventory.jsp"; * within the jsp "/displayinventory.jsp" there is the following security check " request.isUserInRole("administrator")"; and
* this security check fails.
I think that the security configuration is OK as I can log in and successfully access the url "/RcvrRequestProcessor", which requires an "administrator" role.
However, isUserInRole fails. This is the Permission which is tested:
(javax.security.jacc.WebRoleRefPermission jsp administrator)
Against the following Permissions:
[EMAIL PROTECTED] (
(javax.security.jacc.WebResourcePermission /RcvrRequestProcessor GET,POST) (javax.security.jacc.WebRoleRefPermission PopulateServlet administrator) (javax.security.jacc.WebRoleRefPermission RcvrRequestProcessor administrator)
)
The "jsp" portion of the Permission being tested is the name of the servlet being processed and comes from a JettyServletHolder automatically registered for the processing of jsp files. If I add to the web.xml DD the following elements to explicitly register the jsp "/displayinventory.jsp", then isUserInRole works as expected:
 <servlet>
   <servlet-name>/displayinventory.jsp</servlet-name>
   <jsp-file>/displayinventory.jsp</jsp-file>
 </servlet>
 <servlet-mapping>
   <servlet-name>/displayinventory.jsp</servlet-name>
   <url-pattern>/displayinventory.jsp</url-pattern>
 </servlet-mapping>
Indeed, with this explicit mapping, when isUserInRole is executed, the Permission to be tested is: (javax.security.jacc.WebRoleRefPermission /displayinventory.jsp administrator)
And the Permissions is:
[EMAIL PROTECTED] (
(javax.security.jacc.WebRoleRefPermission /displayinventory.jsp administrator) (javax.security.jacc.WebRoleRefPermission PopulateServlet administrator) (javax.security.jacc.WebRoleRefPermission RcvrRequestProcessor administrator) (javax.security.jacc.WebResourcePermission /RcvrRequestProcessor GET,POST)
)
As a matter of fact, I am not sure if this is a bug in our implementation or in PetStore (FYI, I have found another configuration issue for an ejb-jar.xml DD).
Any idea?
Thanks,
Gianny





Reply via email to