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.


>
> 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]
>
>

Reply via email to