From fea4d1eb9195c9489ef50a4fac418eb6a7956168 Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 14 Jan 2010 21:33:58 +0000 Subject: [PATCH] Fix TCK failures with security manager due to fix for bug 47774 git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@899420 13f79535-47bb-0310-9956-ffa450edef68 --- .../catalina/security/SecurityClassLoad.java | 2 ++ .../apache/catalina/session/StandardSession.java | 33 ++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/java/org/apache/catalina/security/SecurityClassLoad.java b/java/org/apache/catalina/security/SecurityClassLoad.java index 483eac66b..01ddac3d4 100644 --- a/java/org/apache/catalina/security/SecurityClassLoad.java +++ b/java/org/apache/catalina/security/SecurityClassLoad.java @@ -99,6 +99,8 @@ public final class SecurityClassLoad { loader.loadClass (basePackage + "session.StandardSession"); loader.loadClass + (basePackage + "session.StandardSession$PrivilegedSetTccl"); + loader.loadClass (basePackage + "session.StandardSession$1"); loader.loadClass diff --git a/java/org/apache/catalina/session/StandardSession.java b/java/org/apache/catalina/session/StandardSession.java index 19f061272..5236e27fb 100644 --- a/java/org/apache/catalina/session/StandardSession.java +++ b/java/org/apache/catalina/session/StandardSession.java @@ -710,8 +710,14 @@ public class StandardSession if (context.getLoader() != null && context.getLoader().getClassLoader() != null) { oldTccl = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader( - context.getLoader().getClassLoader()); + if (Globals.IS_SECURITY_ENABLED) { + PrivilegedAction pa = new PrivilegedSetTccl( + context.getLoader().getClassLoader()); + AccessController.doPrivileged(pa); + } else { + Thread.currentThread().setContextClassLoader( + context.getLoader().getClassLoader()); + } } try { Object listeners[] = context.getApplicationLifecycleListeners(); @@ -747,7 +753,13 @@ public class StandardSession } } finally { if (oldTccl != null) { - Thread.currentThread().setContextClassLoader(oldTccl); + if (Globals.IS_SECURITY_ENABLED) { + PrivilegedAction pa = + new PrivilegedSetTccl(oldTccl); + AccessController.doPrivileged(pa); + } else { + Thread.currentThread().setContextClassLoader(oldTccl); + } } } @@ -1732,6 +1744,21 @@ public class StandardSession } + private static class PrivilegedSetTccl + implements PrivilegedAction { + + private ClassLoader cl; + + PrivilegedSetTccl(ClassLoader cl) { + this.cl = cl; + } + + public Void run() { + Thread.currentThread().setContextClassLoader(cl); + return null; + } + } + } -- 2.11.0