Port fix for bug 41722. role-link in web.xml should be optional.
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 24 Jun 2007 17:28:45 +0000 (17:28 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sun, 24 Jun 2007 17:28:45 +0000 (17:28 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@550263 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/deploy/SecurityRoleRef.java [new file with mode: 0644]
java/org/apache/catalina/startup/WebRuleSet.java
webapps/docs/changelog.xml

diff --git a/java/org/apache/catalina/deploy/SecurityRoleRef.java b/java/org/apache/catalina/deploy/SecurityRoleRef.java
new file mode 100644 (file)
index 0000000..e5af75c
--- /dev/null
@@ -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());
+
+    }
+
+
+}
index cd8fd4c..683e595 100644 (file)
@@ -27,6 +27,7 @@ import org.apache.catalina.Wrapper;
 import org.apache.catalina.deploy.ContextHandler;
 import org.apache.catalina.deploy.ContextService;
 import org.apache.catalina.deploy.SecurityConstraint;
+import org.apache.catalina.deploy.SecurityRoleRef;
 import org.apache.tomcat.util.IntrospectionUtils;
 import org.apache.tomcat.util.digester.CallMethodRule;
 import org.apache.tomcat.util.digester.CallParamRule;
@@ -445,10 +446,14 @@ public class WebRuleSet extends RuleSetBase {
         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);
@@ -623,7 +628,6 @@ final class SetPublicIdRule extends Rule {
     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();
@@ -870,3 +874,32 @@ final class ServiceQnameRule extends Rule {
     }
 }
 
+/**
+ * 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
index 2b7ad50..ace7974 100644 (file)
          Tomcat 5. (markt)
       </fix>
       <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>42361</bug>: Handle multi-part forms when saving requests during
          FORM authentication process. Patch provided by Peter Runge. (markt)
       </fix>
@@ -53,7 +57,7 @@
       </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>