This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new d1882d0389 Simplify logic and only test aprStatusPresent when needed
d1882d0389 is described below

commit d1882d0389dc5ae6f6e32d20fc7f141326aa8779
Author: Mark Thomas <[email protected]>
AuthorDate: Mon Nov 24 22:06:04 2025 +0000

    Simplify logic and only test aprStatusPresent when needed
    
    Add extra test for o.a.t.jni package if APR connector is used.
---
 java/org/apache/catalina/connector/Connector.java  | 32 ++++++++++------------
 .../catalina/connector/LocalStrings.properties     |  1 +
 2 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/java/org/apache/catalina/connector/Connector.java 
b/java/org/apache/catalina/connector/Connector.java
index a10ed79e36..2f2915dce8 100644
--- a/java/org/apache/catalina/connector/Connector.java
+++ b/java/org/apache/catalina/connector/Connector.java
@@ -36,7 +36,6 @@ import org.apache.coyote.Adapter;
 import org.apache.coyote.ProtocolHandler;
 import org.apache.coyote.UpgradeProtocol;
 import org.apache.coyote.http11.AbstractHttp11JsseProtocol;
-import org.apache.coyote.http11.AbstractHttp11Protocol;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.jni.AprStatus;
@@ -1051,6 +1050,10 @@ public class Connector extends LifecycleMBeanBase {
             setParseBodyMethods(getParseBodyMethods());
         }
 
+        if (protocolHandler.isAprRequired() && !aprStatusPresent) {
+            throw new LifecycleException(
+                    
sm.getString("coyoteConnector.protocolHandlerNoJniPackage", 
getProtocolHandlerClassName()));
+        }
         if (protocolHandler.isAprRequired() && !AprStatus.isInstanceCreated()) 
{
             throw new LifecycleException(
                     
sm.getString("coyoteConnector.protocolHandlerNoAprListener", 
getProtocolHandlerClassName()));
@@ -1059,24 +1062,19 @@ public class Connector extends LifecycleMBeanBase {
             throw new LifecycleException(
                     
sm.getString("coyoteConnector.protocolHandlerNoAprLibrary", 
getProtocolHandlerClassName()));
         }
-        if (!protocolHandler.isAprRequired()) {
-            if (JreCompat.isJre22Available() && OpenSSLStatus.getUseOpenSSL() 
&& OpenSSLStatus.isAvailable() &&
-                    protocolHandler instanceof AbstractHttp11Protocol) {
-                // Use FFM and OpenSSL if available
-                AbstractHttp11JsseProtocol<?> jsseProtocolHandler = 
(AbstractHttp11JsseProtocol<?>) protocolHandler;
-                if (jsseProtocolHandler.isSSLEnabled() && 
jsseProtocolHandler.getSslImplementationName() == null) {
-                    // OpenSSL is compatible with the JSSE configuration, so 
use it if it is available
-                    jsseProtocolHandler.setSslImplementationName(
-                            
"org.apache.tomcat.util.net.openssl.panama.OpenSSLImplementation");
-                }
-            } else if (aprStatusPresent && AprStatus.isAprAvailable() && 
AprStatus.getUseOpenSSL() &&
-                    protocolHandler instanceof AbstractHttp11Protocol) {
-                // Use tomcat-native and OpenSSL otherwise, if available
-                AbstractHttp11JsseProtocol<?> jsseProtocolHandler = 
(AbstractHttp11JsseProtocol<?>) protocolHandler;
-                if (jsseProtocolHandler.isSSLEnabled() && 
jsseProtocolHandler.getSslImplementationName() == null) {
-                    // OpenSSL is compatible with the JSSE configuration, so 
use it if APR is available
+        if (protocolHandler instanceof AbstractHttp11JsseProtocol) {
+            AbstractHttp11JsseProtocol<?> jsseProtocolHandler = 
(AbstractHttp11JsseProtocol<?>) protocolHandler;
+            if (jsseProtocolHandler.isSSLEnabled() && 
jsseProtocolHandler.getSslImplementationName() == null) {
+                // If SSL is enabled and a specific implementation isn't 
specified, select the correct default.
+                if (JreCompat.isJre22Available() && 
OpenSSLStatus.getUseOpenSSL() && OpenSSLStatus.isAvailable()) {
+                    // Use FFM and OpenSSL if available
+                    jsseProtocolHandler
+                            
.setSslImplementationName("org.apache.tomcat.util.net.openssl.panama.OpenSSLImplementation");
+                } else if (aprStatusPresent && AprStatus.isAprAvailable() && 
AprStatus.getUseOpenSSL()) {
+                    // Use tomcat-native and OpenSSL otherwise, if available
                     
jsseProtocolHandler.setSslImplementationName(OpenSSLImplementation.class.getName());
                 }
+                // Otherwise the default JSSE will be used
             }
         }
 
diff --git a/java/org/apache/catalina/connector/LocalStrings.properties 
b/java/org/apache/catalina/connector/LocalStrings.properties
index 74b021e4b4..cc43ed06fe 100644
--- a/java/org/apache/catalina/connector/LocalStrings.properties
+++ b/java/org/apache/catalina/connector/LocalStrings.properties
@@ -36,6 +36,7 @@ coyoteConnector.parseBodyMethodNoTrace=TRACE method MUST NOT 
include an entity (
 coyoteConnector.protocolHandlerDestroyFailed=Protocol handler destroy failed
 coyoteConnector.protocolHandlerInitializationFailed=Protocol handler 
initialization failed
 coyoteConnector.protocolHandlerInstantiationFailed=Protocol handler 
instantiation failed
+coyoteConnector.protocolHandlerNoJniPackage=The configured protocol [{0}] 
requires the org.apache.tomcat.jni package which is not available
 coyoteConnector.protocolHandlerNoAprLibrary=The configured protocol [{0}] 
requires the APR/native library which is not available
 coyoteConnector.protocolHandlerNoAprListener=The configured protocol [{0}] 
requires the AprLifecycleListener which is not available
 coyoteConnector.protocolHandlerPauseFailed=Protocol handler pause failed


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to