Fix TCK failures with security manager due to fix for bug 47774
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 14 Jan 2010 21:33:58 +0000 (21:33 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 14 Jan 2010 21:33:58 +0000 (21:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@899420 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/security/SecurityClassLoad.java
java/org/apache/catalina/session/StandardSession.java

index 483eac6..01ddac3 100644 (file)
@@ -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
index 19f0612..5236e27 100644 (file)
@@ -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<Void> 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<Void> 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<Void> {
+
+        private ClassLoader cl;
+
+        PrivilegedSetTccl(ClassLoader cl) {
+            this.cl = cl;
+        }
+
+        public Void run() {
+            Thread.currentThread().setContextClassLoader(cl);
+            return null;
+        }
+    }
+
 }