Author: markt
Date: Sun Jun 24 10:27:18 2007
New Revision: 550262

URL: http://svn.apache.org/viewvc?view=rev&rev=550262
Log:
Fix bug 41722. role-link in web.xml should be optional.

Added:
    
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/deploy/SecurityRoleRef.java
   (with props)
Modified:
    
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/startup/WebRuleSet.java
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml

Added: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/deploy/SecurityRoleRef.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/deploy/SecurityRoleRef.java?view=auto&rev=550262
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/deploy/SecurityRoleRef.java
 (added)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/deploy/SecurityRoleRef.java
 Sun Jun 24 10:27:18 2007
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.catalina.deploy;
+
+
+/**
+ * <p>Representation of a security role reference for a web application, as
+ * represented in a <code>&lt;security-role-ref&gt;</code> element
+ * in the deployment descriptor.</p>
+ *
+ * @author Mark Thomas
+ * @version $Revision$ $Date$
+ * @since Tomcat 5.5
+ */
+
+public class SecurityRoleRef {
+
+
+    // ------------------------------------------------------------- Properties
+
+
+    /**
+     * The (required) role name.
+     */
+    private String name = null;
+
+    public String getName() {
+        return (this.name);
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+    /**
+     * The optional role link.
+     */
+    private String link = null;
+
+    public String getLink() {
+        return (this.link);
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+
+
+    // --------------------------------------------------------- Public Methods
+
+
+    /**
+     * Return a String representation of this object.
+     */
+    public String toString() {
+
+        StringBuffer sb = new StringBuffer("SecurityRoleRef[");
+        sb.append("name=");
+        sb.append(name);
+        if (link != null) {
+            sb.append(", link=");
+            sb.append(link);
+        }
+        sb.append("]");
+        return (sb.toString());
+
+    }
+
+
+}

Propchange: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/deploy/SecurityRoleRef.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/deploy/SecurityRoleRef.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/startup/WebRuleSet.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/startup/WebRuleSet.java?view=diff&rev=550262&r1=550261&r2=550262
==============================================================================
--- 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/startup/WebRuleSet.java
 (original)
+++ 
tomcat/container/tc5.5.x/catalina/src/share/org/apache/catalina/startup/WebRuleSet.java
 Sun Jun 24 10:27:18 2007
@@ -23,6 +23,7 @@
 import org.apache.catalina.Context;
 import org.apache.catalina.Wrapper;
 import org.apache.catalina.deploy.SecurityConstraint;
+import org.apache.catalina.deploy.SecurityRoleRef;
 import org.apache.tomcat.util.digester.Digester;
 import org.apache.tomcat.util.digester.Rule;
 import org.apache.tomcat.util.digester.RuleSetBase;
@@ -383,10 +384,15 @@
         digester.addCallMethod(prefix + "web-app/servlet/run-as/role-name",
                                "setRunAs", 0);
 
-        digester.addCallMethod(prefix + "web-app/servlet/security-role-ref",
-                               "addSecurityReference", 2);
-        digester.addCallParam(prefix + 
"web-app/servlet/security-role-ref/role-link", 1);
-        digester.addCallParam(prefix + 
"web-app/servlet/security-role-ref/role-name", 0);
+        digester.addRule(prefix + "web-app/servlet/security-role-ref",
+                new SecurityRoleRefCreateRule());
+
+        digester.addCallMethod(
+                prefix + "web-app/servlet/security-role-ref/role-link",
+                "setLink", 0);
+        digester.addCallMethod(
+                prefix + "web-app/servlet/security-role-ref/role-name",
+                "setName", 0);
 
         digester.addCallMethod(prefix + "web-app/servlet/servlet-class",
                               "setServletClass", 0);
@@ -561,7 +567,6 @@
     public void begin(String namespace, String name, Attributes attributes)
         throws Exception {
 
-        Context context = (Context) digester.peek(digester.getCount() - 1);
         Object top = digester.peek();
         Class paramClasses[] = new Class[1];
         paramClasses[0] = "String".getClass();
@@ -615,3 +620,33 @@
     }
 
 }
+
+/**
+ * A Rule that adds a security-role-ref to a servlet, allowing for the fact 
that
+ * role-link is an optional element.
+ */
+final class SecurityRoleRefCreateRule extends Rule {
+    
+    public SecurityRoleRefCreateRule() {
+    }
+    
+    public void begin(String namespace, String name, Attributes attributes)
+            throws Exception {
+        SecurityRoleRef securityRoleRef = new SecurityRoleRef();
+        digester.push(securityRoleRef);
+        if (digester.getLogger().isDebugEnabled())
+            digester.getLogger().debug("new SecurityRoleRef");
+    }
+
+    public void end(String namespace, String name)
+            throws Exception {
+        SecurityRoleRef securityRoleRef = (SecurityRoleRef) digester.pop();
+        Wrapper wrapper = (Wrapper) digester.peek();
+        
+        wrapper.addSecurityReference(securityRoleRef.getName(),
+                securityRoleRef.getLink());
+
+        if (digester.getLogger().isDebugEnabled())
+            digester.getLogger().debug("pop SecurityRoleRef");
+    }
+}
\ No newline at end of file

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=550262&r1=550261&r2=550262
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Sun Jun 24 10:27:18 2007
@@ -28,8 +28,12 @@
         Feature provided by George Lindholm and Juergen Herrman (pero)
       </add>
       <fix>
+        <bug>41722</bug>: Make the role-link element optional (as required by
+        the spec) when using a security-role-ref element. (markt)
+      </fix>
+      <fix>
         <bug>42547</bug>: Fix NPE when a ResourceLink in context.xml tries to
-        override an env-entry in web.xml.
+        override an env-entry in web.xml. (markt)
       </fix>
     </changelog>
   </subsection>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to