Fix some TCK failures when using a security manager.
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 29 Nov 2008 19:01:57 +0000 (19:01 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Sat, 29 Nov 2008 19:01:57 +0000 (19:01 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@721704 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/core/DefaultInstanceManager.java
java/org/apache/catalina/security/SecurityClassLoad.java
java/org/apache/jasper/runtime/JspApplicationContextImpl.java

index cc7a76f..254289f 100644 (file)
@@ -205,14 +205,24 @@ public class DefaultInstanceManager implements InstanceManager {
      * @throws java.lang.reflect.InvocationTargetException
      *                                if call fails
      */
-    protected void preDestroy(Object instance, Class<?> clazz)
+    protected void preDestroy(Object instance, final Class<?> clazz)
             throws IllegalAccessException, InvocationTargetException {
         Class<?> superClass = clazz.getSuperclass();
         if (superClass != Object.class) {
             preDestroy(instance, superClass);
         }
 
-        Method[] methods = clazz.getDeclaredMethods();
+        Method[] methods;
+        if (Globals.IS_SECURITY_ENABLED) {
+            methods = AccessController.doPrivileged(
+                    new PrivilegedAction<Method[]>(){
+                public Method[] run(){
+                    return clazz.getDeclaredMethods();
+                }
+            });
+        } else {
+            methods = clazz.getDeclaredMethods();
+        }
         Method preDestroy = null;
         for (Method method : methods) {
             if (method.isAnnotationPresent(PreDestroy.class)) {
index 23d45ca..7cd230f 100644 (file)
@@ -64,6 +64,21 @@ public final class SecurityClassLoad {
              "core.ContainerBase$PrivilegedAddChild");
         loader.loadClass
             (basePackage +
+             "core.DefaultInstanceManager$1");
+        loader.loadClass
+            (basePackage +
+             "core.DefaultInstanceManager$2");
+        loader.loadClass
+            (basePackage +
+             "core.DefaultInstanceManager$3");
+        loader.loadClass
+            (basePackage +
+             "core.DefaultInstanceManager$4");
+        loader.loadClass
+            (basePackage +
+             "core.DefaultInstanceManager$5");
+        loader.loadClass
+            (basePackage +
              "core.ApplicationHttpRequest$AttributeNamesEnumerator");
     }
     
index a6431d3..0087a90 100644 (file)
@@ -16,6 +16,8 @@
  */
 package org.apache.jasper.runtime;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -37,6 +39,7 @@ import javax.servlet.jsp.el.ImplicitObjectELResolver;
 import javax.servlet.jsp.el.ScopedAttributeELResolver;
 
 import org.apache.el.ExpressionFactoryImpl;
+import org.apache.jasper.Constants;
 import org.apache.jasper.el.ELContextImpl;
 
 /**
@@ -88,8 +91,18 @@ public class JspApplicationContextImpl implements JspApplicationContext {
                }
 
                // create ELContext for JspContext
-               ELResolver r = this.createELResolver();
-               ELContextImpl ctx = new ELContextImpl(r);
+               final ELResolver r = this.createELResolver();
+               ELContextImpl ctx;
+               if (Constants.IS_SECURITY_ENABLED) {
+                   ctx = AccessController.doPrivileged(
+                           new PrivilegedAction<ELContextImpl>() {
+                               public ELContextImpl run() {
+                                   return new ELContextImpl(r);
+                               }
+                           });
+               } else {
+                   ctx = new ELContextImpl(r);
+               }
                ctx.putContext(JspContext.class, context);
 
                // alert all ELContextListeners