Author: markt Date: Fri May 14 23:43:51 2010 New Revision: 944518 URL: http://svn.apache.org/viewvc?rev=944518&view=rev Log: TCK failures: Fix remaining failures with APR/native and a security Manager
Modified: tomcat/trunk/TOMCAT-7-RELEASE-PLAN.txt tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Modified: tomcat/trunk/TOMCAT-7-RELEASE-PLAN.txt URL: http://svn.apache.org/viewvc/tomcat/trunk/TOMCAT-7-RELEASE-PLAN.txt?rev=944518&r1=944517&r2=944518&view=diff ============================================================================== --- tomcat/trunk/TOMCAT-7-RELEASE-PLAN.txt (original) +++ tomcat/trunk/TOMCAT-7-RELEASE-PLAN.txt Fri May 14 23:43:51 2010 @@ -27,8 +27,7 @@ 3. Implement all the new Servlet 3 features NOTE: Status is based on a review of the specification, not the TCK tests - - Sections 1 to 15 - - Strict spec compliance requires deployment descriptor validation + - Done 4. Do an initial release (from trunk) - Create tc7.0.x\tags to hold release tags - Done Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java?rev=944518&r1=944517&r2=944518&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardHostValve.java Fri May 14 23:43:51 2010 @@ -20,6 +20,8 @@ package org.apache.catalina.core; import java.io.IOException; +import java.security.AccessController; +import java.security.PrivilegedAction; import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; @@ -126,8 +128,14 @@ final class StandardHostValve if( context.getLoader() != null ) { // Not started - it should check for availability first // This should eventually move to Engine, it's generic. - 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()); + } } if (request.isAsyncSupported()) { request.setAsyncSupported(context.getPipeline().isAsyncSupported()); @@ -155,8 +163,14 @@ final class StandardHostValve } // Restore the context classloader - Thread.currentThread().setContextClassLoader - (StandardHostValve.class.getClassLoader()); + if (Globals.IS_SECURITY_ENABLED) { + PrivilegedAction<Void> pa = new PrivilegedSetTccl( + StandardHostValve.class.getClassLoader()); + AccessController.doPrivileged(pa); + } else { + Thread.currentThread().setContextClassLoader + (StandardHostValve.class.getClassLoader()); + } } @@ -449,5 +463,18 @@ final class StandardHostValve } + + 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; + } + } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=944518&r1=944517&r2=944518&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri May 14 23:43:51 2010 @@ -17,10 +17,13 @@ package org.apache.tomcat.util.net; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.RejectedExecutionException; +import org.apache.catalina.Globals; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.jni.Address; @@ -36,6 +39,7 @@ import org.apache.tomcat.jni.SSLSocket; import org.apache.tomcat.jni.Socket; import org.apache.tomcat.jni.Status; + /** * APR tailored thread pool, providing the following services: * <ul> @@ -759,7 +763,29 @@ public class AprEndpoint extends Abstrac */ protected boolean processSocket(long socket, SocketStatus status) { try { - getExecutor().execute(new SocketEventProcessor(socket, status)); + if (status == SocketStatus.OPEN || status == SocketStatus.STOP || + status == SocketStatus.TIMEOUT) { + SocketEventProcessor proc = + new SocketEventProcessor(socket, status); + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + try { + if (Globals.IS_SECURITY_ENABLED) { + PrivilegedAction<Void> pa = new PrivilegedSetTccl( + getClass().getClassLoader()); + AccessController.doPrivileged(pa); + } else { + Thread.currentThread().setContextClassLoader( + getClass().getClassLoader()); + } + getExecutor().execute(proc); + } finally { + if (Globals.IS_SECURITY_ENABLED) { + PrivilegedAction<Void> pa = new PrivilegedSetTccl(loader); + AccessController.doPrivileged(pa); + } else { + Thread.currentThread().setContextClassLoader(loader); + } + } } } catch (RejectedExecutionException x) { log.warn("Socket processing request was rejected for:"+socket,x); return false; @@ -1481,5 +1507,17 @@ public class AprEndpoint extends Abstrac } - + 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; + } + } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=944518&r1=944517&r2=944518&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Fri May 14 23:43:51 2010 @@ -542,8 +542,7 @@ public class JIoEndpoint extends Abstrac protected ConcurrentLinkedQueue<SocketWrapper<Socket>> waitingRequests = new ConcurrentLinkedQueue<SocketWrapper<Socket>>(); - private static class PrivilegedSetTccl - implements PrivilegedAction<Void> { + private static class PrivilegedSetTccl implements PrivilegedAction<Void> { private ClassLoader cl; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org