From b3e68fba986fab573e3c1f3992996e181121e44e Mon Sep 17 00:00:00 2001 From: markt Date: Sat, 29 Nov 2008 19:01:57 +0000 Subject: [PATCH] Fix some TCK failures when using a security manager. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@721704 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/core/DefaultInstanceManager.java | 14 ++++++++++++-- .../org/apache/catalina/security/SecurityClassLoad.java | 15 +++++++++++++++ .../jasper/runtime/JspApplicationContextImpl.java | 17 +++++++++++++++-- 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/java/org/apache/catalina/core/DefaultInstanceManager.java b/java/org/apache/catalina/core/DefaultInstanceManager.java index cc7a76fed..254289f66 100644 --- a/java/org/apache/catalina/core/DefaultInstanceManager.java +++ b/java/org/apache/catalina/core/DefaultInstanceManager.java @@ -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(){ + public Method[] run(){ + return clazz.getDeclaredMethods(); + } + }); + } else { + methods = clazz.getDeclaredMethods(); + } Method preDestroy = null; for (Method method : methods) { if (method.isAnnotationPresent(PreDestroy.class)) { diff --git a/java/org/apache/catalina/security/SecurityClassLoad.java b/java/org/apache/catalina/security/SecurityClassLoad.java index 23d45ca9c..7cd230f5e 100644 --- a/java/org/apache/catalina/security/SecurityClassLoad.java +++ b/java/org/apache/catalina/security/SecurityClassLoad.java @@ -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"); } diff --git a/java/org/apache/jasper/runtime/JspApplicationContextImpl.java b/java/org/apache/jasper/runtime/JspApplicationContextImpl.java index a6431d344..0087a9023 100644 --- a/java/org/apache/jasper/runtime/JspApplicationContextImpl.java +++ b/java/org/apache/jasper/runtime/JspApplicationContextImpl.java @@ -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() { + public ELContextImpl run() { + return new ELContextImpl(r); + } + }); + } else { + ctx = new ELContextImpl(r); + } ctx.putContext(JspContext.class, context); // alert all ELContextListeners -- 2.11.0