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

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

commit 44102847855f1f4a579a0dcfa1325fd9e58f4404
Author: Mark Thomas <[email protected]>
AuthorDate: Mon Jan 12 15:55:30 2026 +0000

    Update minimum Tomcat Native version to 1.3.4/2.0.12
    
    This is in preparation for adding TLS 1.3 config support and expanding
    the OCSP config support
---
 .../apache/catalina/core/AprLifecycleListener.java | 54 +++++++++++++++++-----
 .../apache/catalina/core/LocalStrings.properties   |  4 +-
 webapps/docs/changelog.xml                         |  6 +++
 3 files changed, 52 insertions(+), 12 deletions(-)

diff --git a/java/org/apache/catalina/core/AprLifecycleListener.java 
b/java/org/apache/catalina/core/AprLifecycleListener.java
index bf047c362d..d10d9591fe 100644
--- a/java/org/apache/catalina/core/AprLifecycleListener.java
+++ b/java/org/apache/catalina/core/AprLifecycleListener.java
@@ -64,12 +64,17 @@ public class AprLifecycleListener implements 
LifecycleListener {
 
     // ---------------------------------------------- Constants
 
-    protected static final int TCN_REQUIRED_MAJOR = 1;
-    protected static final int TCN_REQUIRED_MINOR = 2;
-    protected static final int TCN_REQUIRED_PATCH = 34;
+    private static final int TCN_1_REQUIRED_MINOR = 3;
+    private static final int TCN_1_REQUIRED_PATCH = 4;
+    private static final int TCN_1_RECOMMENDED_MINOR = 3;
+    private static final int TCN_1_RECOMMENDED_PATCH = 4;
+
+    protected static final int TCN_REQUIRED_MAJOR = 2;
+    protected static final int TCN_REQUIRED_MINOR = 0;
+    protected static final int TCN_REQUIRED_PATCH = 12;
     protected static final int TCN_RECOMMENDED_MAJOR = 2;
     protected static final int TCN_RECOMMENDED_MINOR = 0;
-    protected static final int TCN_RECOMMENDED_PV = 5;
+    protected static final int TCN_RECOMMENDED_PV = 12;
 
 
     // ---------------------------------------------- Properties
@@ -209,9 +214,6 @@ public class AprLifecycleListener implements 
LifecycleListener {
     }
 
     private static void init() {
-        int rqver = TCN_REQUIRED_MAJOR * 1000 + TCN_REQUIRED_MINOR * 100 + 
TCN_REQUIRED_PATCH;
-        int rcver = TCN_RECOMMENDED_MAJOR * 1000 + TCN_RECOMMENDED_MINOR * 100 
+ TCN_RECOMMENDED_PV;
-
         if (org.apache.tomcat.jni.AprStatus.isAprInitialized()) {
             return;
         }
@@ -249,9 +251,34 @@ public class AprLifecycleListener implements 
LifecycleListener {
             }
             return;
         }
+
+        /*
+         * With parallel development of 1.x and 2.x there are now minimum and 
recommended versions for both branches.
+         *
+         * The minimum required version is increased when the Tomcat Native 
API is changed (typically extended) to
+         * include functionality that Tomcat expects to always be present.
+         *
+         * The minimum recommended version is increased when there is a change 
in Tomcat Native that while not required
+         * is recommended (such as bug fixes).
+         */
+        int rqver;
+        int rcver;
+        if (tcnMajor == 1) {
+            rqver = 1000 + TCN_1_REQUIRED_MINOR * 100 + TCN_1_REQUIRED_PATCH;
+            rcver = 1000 + TCN_1_RECOMMENDED_MINOR * 100 + 
TCN_1_RECOMMENDED_PATCH;
+        } else {
+            rqver = TCN_REQUIRED_MAJOR * 1000 + TCN_REQUIRED_MINOR * 100 + 
TCN_REQUIRED_PATCH;
+            rcver = TCN_RECOMMENDED_MAJOR * 1000 + TCN_RECOMMENDED_MINOR * 100 
+ TCN_RECOMMENDED_PV;
+        }
+
         if (tcnVersion < rqver) {
-            log.error(sm.getString("aprListener.tcnInvalid", 
Library.versionString(),
-                    TCN_REQUIRED_MAJOR + "." + TCN_REQUIRED_MINOR + "." + 
TCN_REQUIRED_PATCH));
+            if (tcnMajor == 1) {
+                log.error(sm.getString("aprListener.tcnInvalid.1", 
Library.versionString(),
+                        "1." + TCN_1_REQUIRED_MINOR + "." + 
TCN_1_REQUIRED_PATCH));
+            } else {
+                log.error(sm.getString("aprListener.tcnInvalid", 
Library.versionString(),
+                        TCN_REQUIRED_MAJOR + "." + TCN_REQUIRED_MINOR + "." + 
TCN_REQUIRED_PATCH));
+            }
             try {
                 // Terminate the APR in case the version
                 // is below required.
@@ -263,8 +290,13 @@ public class AprLifecycleListener implements 
LifecycleListener {
             return;
         }
         if (tcnVersion < rcver) {
-            initInfoLogMessages.add(sm.getString("aprListener.tcnVersion", 
Library.versionString(),
-                    TCN_RECOMMENDED_MAJOR + "." + TCN_RECOMMENDED_MINOR + "." 
+ TCN_RECOMMENDED_PV));
+            if (tcnMajor == 1) {
+                
initInfoLogMessages.add(sm.getString("aprListener.tcnVersion.1", 
Library.versionString(),
+                        "1." + TCN_1_RECOMMENDED_MINOR + "." + 
TCN_1_RECOMMENDED_PATCH));
+            } else {
+                initInfoLogMessages.add(sm.getString("aprListener.tcnVersion", 
Library.versionString(),
+                        TCN_RECOMMENDED_MAJOR + "." + TCN_RECOMMENDED_MINOR + 
"." + TCN_RECOMMENDED_PV));
+            }
         }
 
         initInfoLogMessages
diff --git a/java/org/apache/catalina/core/LocalStrings.properties 
b/java/org/apache/catalina/core/LocalStrings.properties
index 7258f44a23..df0e718344 100644
--- a/java/org/apache/catalina/core/LocalStrings.properties
+++ b/java/org/apache/catalina/core/LocalStrings.properties
@@ -90,9 +90,11 @@ aprListener.requireNotInFIPSMode=AprLifecycleListener is 
configured to require t
 aprListener.skipFIPSInitialization=Already in FIPS mode; skipping FIPS 
initialization.
 aprListener.sslInit=Failed to initialize the SSLEngine.
 aprListener.sslRequired=[{0}] is not a valid value for SSLEngine when using 
version [{1}] of the Tomcat Native library since SSL is required for version 
2.x onwards.
-aprListener.tcnInvalid=An incompatible version [{0}] of the Apache Tomcat 
Native library is installed, while Tomcat requires version [{1}]
+aprListener.tcnInvalid=An incompatible version [{0}] of the Apache Tomcat 
Native library is installed, while Tomcat requires at least version [{1}]
+aprListener.tcnInvalid.1=An incompatible version [{0}] of the Apache Tomcat 
Native library is installed, while Tomcat requires at least version [{1}] of 
Tomcat Native 1.x
 aprListener.tcnValid=Loaded Apache Tomcat Native library [{0}] using APR 
version [{1}].
 aprListener.tcnVersion=An older version [{0}] of the Apache Tomcat Native 
library is installed, while Tomcat recommends a minimum version of [{1}]
+aprListener.tcnVersion.1=An older version [{0}] of the Apache Tomcat Native 
library is installed, while Tomcat recommends a minimum version of [{1}] of 
Tomcat Native 1.x
 aprListener.tooLateForFIPSMode=Cannot setFIPSMode: SSL has already been 
initialized
 aprListener.tooLateForSSLEngine=Cannot setSSLEngine: SSL has already been 
initialized
 aprListener.tooLateForSSLRandomSeed=Cannot setSSLRandomSeed: SSL has already 
been initialized
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index ba7919093c..ad25e4f943 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -121,6 +121,12 @@
         <bug>69918</bug>: Ensure request parameters are correctly parsed for 
HTTP/2 requests
         when the content-length header is not set. (dsoumis)
       </fix>
+      <update>
+        Enable minimum and recommended Tomcat Native versions to be set
+        separately for Tomcat Native 1.x and 2.x. Update the minimum and
+        recommended versions for Tomcat Native 1.x to 1.3.4. Update the minimum
+        and recommended versions for Tomcat Native 2.x to 2.0.12. (markt)
+      </update>
     </changelog>
   </subsection>
   <subsection name="Coyote">


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

Reply via email to