From: markt Date: Sun, 24 Jun 2007 17:28:45 +0000 (+0000) Subject: Port fix for bug 41722. role-link in web.xml should be optional. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=dffbbaae30d0a7066bd6588be5bae64f0554ddd0;p=tomcat7.0 Port fix for bug 41722. role-link in web.xml should be optional. git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@550263 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/deploy/SecurityRoleRef.java b/java/org/apache/catalina/deploy/SecurityRoleRef.java new file mode 100644 index 000000000..e5af75cbf --- /dev/null +++ b/java/org/apache/catalina/deploy/SecurityRoleRef.java @@ -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; + + +/** + *

Representation of a security role reference for a web application, as + * represented in a <security-role-ref> element + * in the deployment descriptor.

+ * + * @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()); + + } + + +} diff --git a/java/org/apache/catalina/startup/WebRuleSet.java b/java/org/apache/catalina/startup/WebRuleSet.java index cd8fd4ccf..683e59513 100644 --- a/java/org/apache/catalina/startup/WebRuleSet.java +++ b/java/org/apache/catalina/startup/WebRuleSet.java @@ -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 diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 2b7ad50a9..ace7974cb 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -27,6 +27,10 @@ Tomcat 5. (markt) + 41722: Make the role-link element optional (as required by + the spec) when using a security-role-ref element. (markt) + + 42361: Handle multi-part forms when saving requests during FORM authentication process. Patch provided by Peter Runge. (markt) @@ -53,7 +57,7 @@ 42547: 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)