jfarcand 2002/11/03 21:16:23
Modified: catalina/src/share/org/apache/catalina/security
SecurityConfig.java SecurityClassLoad.java
Log:
Use the catalina.properties file to customize the package protection/access. This
new security m
echanism enable the customization, at runtime, of which package should be protected.
the following package will be protected by default:
o.a.catalina
o.a.jasper(*)
o.a.coyote
o.a.tomcat.util
(*) Tomcat 5 is broken when a JSP use a class from jsp20el.jar and when the
SecurityManager is t
urned on. Even if you remove all the protection, Tomcat fail to properly runs the
example.
o.a.coyote.tomcat5 has been securized in order to support package protection.
Revision Changes Path
1.4 +48 -14
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/security/SecurityConfig.java
Index: SecurityConfig.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/security/SecurityConfig.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SecurityConfig.java 24 Oct 2002 02:43:20 -0000 1.3
+++ SecurityConfig.java 4 Nov 2002 05:16:23 -0000 1.4
@@ -59,6 +59,7 @@
package org.apache.catalina.security;
import java.security.Security;
+import org.apache.catalina.startup.CatalinaProperties;
/**
* Util class to protect Catalina against package access and insertion.
@@ -68,27 +69,51 @@
*/
public final class SecurityConfig{
private static SecurityConfig singleton = null;
+
+ private static org.apache.commons.logging.Log log=
+ org.apache.commons.logging.LogFactory.getLog( SecurityConfig.class );
+
- private final static String PACKAGE_ACCESS = "org.apache.catalina."
- + ",org.apache.jasper."
+ private final static String PACKAGE_ACCESS = "sun.,"
+ + "org.apache.catalina."
+ ",org.apache.jsp."
- + ",org.apache.jk.";
+ + ",org.apache.coyote."
+ + ",org.apache.tomcat.";
- private final static String PACKAGE_DEFINITION= "java."
+ private final static String PACKAGE_DEFINITION= "java.,sun."
+ ",org.apache.catalina."
- + ",org.apache.jasper."
+ ",org.apache.coyote."
- + ",org.apache.jsp."
- + ",org.apache.jk.";
+ + ",org.apache.tomcat."
+ + ",org.apache.jsp.";
+ /**
+ * List of protected package from conf/catalina.properties
+ */
+ private String packageDefinition;
+
+
+ /**
+ * List of protected package from conf/catalina.properties
+ */
+ private String packageAccess;
+
+
/**
* Create a single instance of this class.
*/
- private SecurityConfig(){
+ private SecurityConfig(){
+ try{
+ packageDefinition =
CatalinaProperties.getProperty("package.definition");
+ packageAccess = CatalinaProperties.getProperty("package.access");
+ } catch (java.lang.Exception ex){
+ if (log.isDebugEnabled()){
+ log.debug("Unable to load properties using CatalinaProperties",
ex);
+ }
+ }
}
/**
- * Retuens the singleton instance of that class.
+ * Returns the singleton instance of that class.
* @return an instance of that class.
*/
public static SecurityConfig newInstance(){
@@ -103,7 +128,12 @@
* Set the security package.access value.
*/
public void setPackageAccess(){
- setSecurityProperty("package.access", PACKAGE_ACCESS);
+ // If catalina.properties is missing, protect all by default.
+ if (packageAccess == null){
+ setSecurityProperty("package.access", PACKAGE_ACCESS);
+ } else {
+ setSecurityProperty("package.access", packageAccess);
+ }
}
@@ -111,7 +141,12 @@
* Set the security package.definition value.
*/
public void setPackageDefinition(){
- setSecurityProperty("package.definition", PACKAGE_DEFINITION);
+ // If catalina.properties is missing, protect all by default.
+ if (packageDefinition == null){
+ setSecurityProperty("package.definition", PACKAGE_DEFINITION);
+ } else {
+ setSecurityProperty("package.definition", packageDefinition);
+ }
}
@@ -122,10 +157,9 @@
private final void setSecurityProperty(String properties, String packageList){
if (System.getSecurityManager() != null){
String definition = Security.getProperty(properties);
- if( definition != null && definition.length() > 0 )
+ if( definition != null && definition.length() > 0 ){
definition += ",";
- else
- definition = "sun.,";
+ }
Security.setProperty(properties,
// FIX ME package "javax." was removed to prevent HotSpot
1.2 +88 -7
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/security/SecurityClassLoad.java
Index: SecurityClassLoad.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/security/SecurityClassLoad.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SecurityClassLoad.java 18 Oct 2002 21:29:29 -0000 1.1
+++ SecurityClassLoad.java 4 Nov 2002 05:16:23 -0000 1.2
@@ -70,6 +70,7 @@
* RuntimePermission does not trigger an AccessControlException.
*
* @author Glenn L. Nielsen
+ * @author Jean-Francois Arcand
* @version $Revision$ $Date$
*/
@@ -78,9 +79,21 @@
public static void securityClassLoad(ClassLoader loader)
throws Exception {
- if( System.getSecurityManager() == null )
+ if( System.getSecurityManager() == null ){
return;
-
+ }
+
+ loadCorePackage(loader);
+ loadLoaderPackage(loader);
+ loadSessionPackage(loader);
+ loadUtilPackage(loader);
+ loadJavaxPackage(loader);
+ loadCoyotePackage(loader);
+ }
+
+
+ private final static void loadCorePackage(ClassLoader loader)
+ throws Exception {
String basePackage = "org.apache.catalina.";
loader.loadClass
(basePackage +
@@ -109,18 +122,86 @@
loader.loadClass
(basePackage +
"core.ContainerBase$PrivilegedAddChild");
+ }
+
+
+ private final static void loadLoaderPackage(ClassLoader loader)
+ throws Exception {
+ String basePackage = "org.apache.catalina.";
loader.loadClass
(basePackage +
"loader.WebappClassLoader$PrivilegedFindResource");
+ }
+
+
+ private final static void loadSessionPackage(ClassLoader loader)
+ throws Exception {
+ String basePackage = "org.apache.catalina.";
loader.loadClass
(basePackage + "session.StandardSession");
+ }
+
+
+ private final static void loadUtilPackage(ClassLoader loader)
+ throws Exception {
+ String basePackage = "org.apache.catalina.";
loader.loadClass
(basePackage + "util.CookieTools");
loader.loadClass
(basePackage + "util.URL");
loader.loadClass(basePackage + "util.Enumerator");
+ }
+
+
+ private final static void loadJavaxPackage(ClassLoader loader)
+ throws Exception {
loader.loadClass("javax.servlet.http.Cookie");
-
}
+
+
+ private final static void loadCoyotePackage(ClassLoader loader)
+ throws Exception {
+ String basePackage = "org.apache.coyote.tomcat5.";
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetAttributePrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetParameterMapPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetRequestDispatcherPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetParameterPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetParameterNamesPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetParameterValuePrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetCharacterEncodingPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetHeadersPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetHeaderNamesPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetCookiesPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetLocalePrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteRequestFacade$GetLocalesPrivilegedAction");
+ loader.loadClass
+ (basePackage +
+ "CoyoteResponseFacade$SetContentTypePrivilegedAction");
+ }
+
}
--
To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>