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

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


The following commit(s) were added to refs/heads/main by this push:
     new f6bb04b28 Add support for the extended range of options in OpenSSL 3.x 
onwards
f6bb04b28 is described below

commit f6bb04b28f234a35c21a2997963195ae1d86de69
Author: Mark Thomas <[email protected]>
AuthorDate: Wed Aug 26 17:25:38 2026 +0100

    Add support for the extended range of options in OpenSSL 3.x onwards
    
    This will need matching changes in Tomcat
---
 native/src/ssl.c                  | 34 ++++++++++++++++++++++++++++------
 native/src/sslcontext.c           | 35 +++++++++++++++++++++++++++++------
 xdocs/miscellaneous/changelog.xml |  6 ++++++
 3 files changed, 63 insertions(+), 12 deletions(-)

diff --git a/native/src/ssl.c b/native/src/ssl.c
index 84bad1388..3995cbbf8 100644
--- a/native/src/ssl.c
+++ b/native/src/ssl.c
@@ -1074,16 +1074,38 @@ TCN_IMPLEMENT_CALL(void, SSL, setOptions)(TCN_STDARGS, 
jlong ssl,
         return;
     }
 
-#ifndef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
-    /* Clear the flag if not supported */
-    if (opt & 0x00040000) {
-        opt &= ~0x00040000;
+    SSL_set_options(ssl_, ((jlong) opt) & 0xFFFFFFFFLL);
+}
+
+TCN_IMPLEMENT_CALL(jint, SSL, getOptions)(TCN_STDARGS, jlong ssl)
+{
+    SSL *ssl_ = J2P(ssl, SSL *);
+
+    UNREFERENCED_STDARGS;
+
+    if (ssl_ == NULL) {
+        tcn_ThrowException(e, "ssl is null");
+        return 0;
     }
-#endif
+
+    return SSL_get_options(ssl_);
+}
+
+TCN_IMPLEMENT_CALL(void, SSL, setOptionsLong)(TCN_STDARGS, jlong ssl, jlong 
opt)
+{
+    SSL *ssl_ = J2P(ssl, SSL *);
+
+    UNREFERENCED_STDARGS;
+
+    if (ssl_ == NULL) {
+        tcn_ThrowException(e, "ssl is null");
+        return;
+    }
+
     SSL_set_options(ssl_, opt);
 }
 
-TCN_IMPLEMENT_CALL(jint, SSL, getOptions)(TCN_STDARGS, jlong ssl)
+TCN_IMPLEMENT_CALL(jlong, SSL, getOptionsLong)(TCN_STDARGS, jlong ssl)
 {
     SSL *ssl_ = J2P(ssl, SSL *);
 
diff --git a/native/src/sslcontext.c b/native/src/sslcontext.c
index 6c74b2369..9365cdd3e 100644
--- a/native/src/sslcontext.c
+++ b/native/src/sslcontext.c
@@ -299,12 +299,7 @@ TCN_IMPLEMENT_CALL(void, SSLContext, 
setOptions)(TCN_STDARGS, jlong ctx,
 
     UNREFERENCED_STDARGS;
     TCN_ASSERT(ctx != 0);
-#ifndef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
-    /* Clear the flag if not supported */
-    if (opt & 0x00040000)
-        opt &= ~0x00040000;
-#endif
-    SSL_CTX_set_options(c->ctx, opt);
+    SSL_CTX_set_options(c->ctx, ((jlong) opt) & 0xFFFFFFFFLL);
 }
 
 TCN_IMPLEMENT_CALL(jint, SSLContext, getOptions)(TCN_STDARGS, jlong ctx)
@@ -322,6 +317,34 @@ TCN_IMPLEMENT_CALL(void, SSLContext, 
clearOptions)(TCN_STDARGS, jlong ctx,
 {
     tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
 
+    UNREFERENCED_STDARGS;
+    TCN_ASSERT(ctx != 0);
+    SSL_CTX_clear_options(c->ctx, ((jlong) opt) & 0xFFFFFFFFLL);
+}
+
+TCN_IMPLEMENT_CALL(void, SSLContext, setOptionsLong)(TCN_STDARGS, jlong ctx, 
jlong opt)
+{
+    tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
+
+    UNREFERENCED_STDARGS;
+    TCN_ASSERT(ctx != 0);
+    SSL_CTX_set_options(c->ctx, opt);
+}
+
+TCN_IMPLEMENT_CALL(jlong, SSLContext, getOptionsLong)(TCN_STDARGS, jlong ctx)
+{
+    tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
+
+    UNREFERENCED_STDARGS;
+    TCN_ASSERT(ctx != 0);
+
+    return SSL_CTX_get_options(c->ctx);
+}
+
+TCN_IMPLEMENT_CALL(void, SSLContext, clearOptionsLong)(TCN_STDARGS, jlong ctx, 
jlong opt)
+{
+    tcn_ssl_ctxt_t *c = J2P(ctx, tcn_ssl_ctxt_t *);
+
     UNREFERENCED_STDARGS;
     TCN_ASSERT(ctx != 0);
     SSL_CTX_clear_options(c->ctx, opt);
diff --git a/xdocs/miscellaneous/changelog.xml 
b/xdocs/miscellaneous/changelog.xml
index 50ca0dae9..004efd3ae 100644
--- a/xdocs/miscellaneous/changelog.xml
+++ b/xdocs/miscellaneous/changelog.xml
@@ -55,6 +55,12 @@
       protocol in the list, use it rather than the last protocol offered by the
       client. (markt)
     </fix>
+    <fix>
+      Add support for the extended range of options available from OpenSSL
+      3.0.x. The options flag is now a 64-bit unsigned int (represented by a
+      Java long) rather than a 32-bit unsigned int (represented by a Java 
int). 
+      (markt)
+    </fix>
   </changelog>
 </section>
 <section name="2.0.15" rtext="2026-06-15">


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

Reply via email to