On 11/03/2026 14:30, Dimitris Soumis wrote:
On Tue, Jan 13, 2026 at 12:26 AM Mark Thomas <[email protected]> wrote:

On 12/01/2026 18:10, Christopher Schultz wrote:
Mark,

Should this kind of thing go under "Notable Changes"?

https://tomcat.apache.org/
migration-11.0.html#Tomcat_11.0.x_noteable_changes

I ask because updating tcnative on *NIX is a whole separate process, and
should probably be done before attempting to upgrade Tomcat itself.

Yes, it probably should. Remind me if I forget to do that when I update
the site after the release.


Kind reminder regarding the above.

Tx. Done.

Mark





Mark



-chris

On 1/12/26 10:55 AM, [email protected] wrote:
This is an automated email from the ASF dual-hosted git repository.

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


The following commit(s) were added to refs/heads/main by this push:
       new 666456c1cf Update minimum Tomcat Native version to
1.3.4/2.0.12
666456c1cf is described below

commit 666456c1cff8a23c44b92f033d50fdce9874266e
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 31602e7018..37d1805d6f 100644
--- a/java/org/apache/catalina/core/LocalStrings.properties
+++ b/java/org/apache/catalina/core/LocalStrings.properties
@@ -84,9 +84,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 569684ca84..4a1d0e3369 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -205,6 +205,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]



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



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





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

Reply via email to