Author: markt Date: Tue Dec 15 19:00:23 2009 New Revision: 890942 URL: http://svn.apache.org/viewvc?rev=890942&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48300 Only the APR lifecycle listener should try and initialise APR
Modified: tomcat/tc6.0.x/trunk/STATUS.txt tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/AprLifecycleListener.java tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Modified: tomcat/tc6.0.x/trunk/STATUS.txt URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=890942&r1=890941&r2=890942&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/STATUS.txt (original) +++ tomcat/tc6.0.x/trunk/STATUS.txt Tue Dec 15 19:00:23 2009 @@ -394,12 +394,6 @@ +1: markt -1: -* Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48300 - Only the APR lifecycle listener should try and initialise APR - http://people.apache.org/~markt/patches/2009-11-27-bug48300-tc6.patch - +1: markt, jfclere, jim - -1: - * Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=47342 Fix NPE on replicated context start Patch provided by Keiichi Fujino Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java?rev=890942&r1=890941&r2=890942&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/connector/Connector.java Tue Dec 15 19:00:23 2009 @@ -18,7 +18,6 @@ package org.apache.catalina.connector; -import java.lang.reflect.Method; import java.net.URLEncoder; import java.util.HashMap; @@ -32,6 +31,7 @@ import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleListener; import org.apache.catalina.Service; +import org.apache.catalina.core.AprLifecycleListener; import org.apache.catalina.core.StandardEngine; import org.apache.catalina.util.LifecycleSupport; import org.apache.catalina.util.StringManager; @@ -605,54 +605,6 @@ } - // ---------------------------------------------- APR Version Constants - - private static final int TCN_REQUIRED_MAJOR = 1; - private static final int TCN_REQUIRED_MINOR = 1; - private static final int TCN_REQUIRED_PATCH = 17; - private static boolean aprInitialized = false; - - // APR init support - private static synchronized void initializeAPR() - { - if (aprInitialized) { - return; - } - int major = 0; - int minor = 0; - int patch = 0; - try { - String methodName = "initialize"; - Class paramTypes[] = new Class[1]; - paramTypes[0] = String.class; - Object paramValues[] = new Object[1]; - paramValues[0] = null; - Class clazz = Class.forName("org.apache.tomcat.jni.Library"); - Method method = clazz.getMethod(methodName, paramTypes); - method.invoke(null, paramValues); - major = clazz.getField("TCN_MAJOR_VERSION").getInt(null); - minor = clazz.getField("TCN_MINOR_VERSION").getInt(null); - patch = clazz.getField("TCN_PATCH_VERSION").getInt(null); - } catch (Throwable t) { - return; - } - if ((major != TCN_REQUIRED_MAJOR) || - (minor != TCN_REQUIRED_MINOR) || - (patch < TCN_REQUIRED_PATCH)) { - try { - // Terminate the APR in case the version - // is below required. - String methodName = "terminate"; - Method method = Class.forName("org.apache.tomcat.jni.Library") - .getMethod(methodName, (Class [])null); - method.invoke(null, (Object []) null); - } catch (Throwable t) { - // Ignore - } - return; - } - aprInitialized = true; - } /** * Set the Coyote protocol which will be used by the connector. @@ -661,10 +613,7 @@ */ public void setProtocol(String protocol) { - // Test APR support - initializeAPR(); - - if (aprInitialized) { + if (AprLifecycleListener.isAprAvailable()) { if ("HTTP/1.1".equals(protocol)) { setProtocolHandlerClassName ("org.apache.coyote.http11.Http11AprProtocol"); Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/AprLifecycleListener.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/AprLifecycleListener.java?rev=890942&r1=890941&r2=890942&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/AprLifecycleListener.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/core/AprLifecycleListener.java Tue Dec 15 19:00:23 2009 @@ -34,7 +34,7 @@ /** * Implementation of <code>LifecycleListener</code> that will init and * and destroy APR. - * + * * @author Remy Maucherat * @author Filip Hanik * @version $Revision$ $Date$ @@ -49,7 +49,7 @@ /** * The string manager for this package. */ - protected StringManager sm = + protected static StringManager sm = StringManager.getManager(Constants.Package); @@ -67,6 +67,13 @@ protected static String SSLRandomSeed = "builtin"; protected static boolean sslInitialized = false; protected static boolean aprInitialized = false; + protected static boolean sslAvailable = false; + protected static boolean aprAvailable = false; + + public static boolean isAprAvailable() { + init(); + return aprAvailable; + } // ---------------------------------------------- LifecycleListener Methods @@ -78,8 +85,8 @@ public void lifecycleEvent(LifecycleEvent event) { if (Lifecycle.INIT_EVENT.equals(event.getType())) { - aprInitialized = init(); - if (aprInitialized) { + init(); + if (aprAvailable) { try { initializeSSL(); } catch (Throwable t) { @@ -91,7 +98,7 @@ } } } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) { - if (!aprInitialized) { + if (!aprAvailable) { return; } try { @@ -117,14 +124,16 @@ method.invoke(null, (Object []) null); } - private boolean init() + private static void init() { int major = 0; int minor = 0; int patch = 0; if (aprInitialized) { - return true; + return; } + aprInitialized = true; + try { String methodName = "initialize"; Class paramTypes[] = new Class[1]; @@ -145,7 +154,7 @@ log.debug(sm.getString("aprListener.aprInit", System.getProperty("java.library.path")), t); } - return false; + return; } if ((major != TCN_REQUIRED_MAJOR) || (minor != TCN_REQUIRED_MINOR) || @@ -162,7 +171,7 @@ } catch (Throwable t) { // Ignore } - return false; + return; } if (patch < TCN_RECOMMENDED_PV) { if (!log.isDebugEnabled()) { @@ -190,7 +199,7 @@ // Log APR flags log.info(sm.getString("aprListener.flags", Library.APR_HAVE_IPV6, Library.APR_HAS_SENDFILE, Library.APR_HAS_SO_ACCEPTFILTER, Library.APR_HAS_RANDOM)); - return true; + aprAvailable = true; } private static synchronized void initializeSSL() @@ -205,6 +214,8 @@ //only once per VM return; } + sslInitialized = true; + String methodName = "randSet"; Class paramTypes[] = new Class[1]; paramTypes[0] = String.class; @@ -220,7 +231,7 @@ method = clazz.getMethod(methodName, paramTypes); method.invoke(null, paramValues); - sslInitialized = true; + sslAvailable = true; } public String getSSLEngine() { @@ -238,4 +249,5 @@ public void setSSLRandomSeed(String SSLRandomSeed) { this.SSLRandomSeed = SSLRandomSeed; } + } Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=890942&r1=890941&r2=890942&view=diff ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Tue Dec 15 19:00:23 2009 @@ -343,6 +343,10 @@ Provide a workaround for CVE-2009-3555, the TLS renegotiation issue for the default Blocking IO Java connector. </fix> + <fix> + <bug>48300</bug>: Only the APR lifecycle listener should try and + initialise APR. (markt) + </fix> </changelog> </subsection> <subsection name="Jasper"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org