Skip to content

Commit 6e19b35

Browse files
committed
Check for OpenSSL 3.5.0+ instead of each function
1 parent c04fb7f commit 6e19b35

2 files changed

Lines changed: 16 additions & 45 deletions

File tree

ext/openssl/extconf.rb

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -169,27 +169,11 @@ def find_openssl_library
169169
# added in 3.5.0
170170
have_func("SSL_get0_peer_signature_name(NULL, NULL)", ssl_h)
171171

172-
# QUIC support - added in OpenSSL 3.2.0
173-
have_func("OSSL_QUIC_client_method()", ssl_h)
174-
have_func("OSSL_QUIC_client_thread_method()", ssl_h)
175-
have_func("SSL_new_stream(NULL, 0)", ssl_h)
176-
have_func("SSL_accept_stream(NULL, 0)", ssl_h)
177-
have_func("SSL_stream_conclude(NULL)", ssl_h)
178-
have_func("SSL_get_stream_id(NULL)", ssl_h)
179-
have_func("SSL_set_default_stream_mode(NULL, 0)", ssl_h)
180-
have_func("SSL_set_blocking_mode(NULL, 0)", ssl_h)
181-
have_func("SSL_get_blocking_mode(NULL)", ssl_h)
182-
have_func("SSL_handle_events(NULL)", ssl_h)
183-
have_func("SSL_get_event_timeout(NULL, NULL, NULL)", ssl_h)
184-
have_func("SSL_get0_connection(NULL)", ssl_h)
185-
have_func("SSL_is_connection(NULL)", ssl_h)
186-
have_func("SSL_set1_initial_peer_addr(NULL, NULL)", ssl_h)
187-
have_func("OSSL_QUIC_server_method()", ssl_h)
188-
have_func("SSL_new_listener(NULL, 0)", ssl_h)
189-
have_func("SSL_accept_connection(NULL, 0)", ssl_h)
190-
have_func("SSL_get_accept_connection_queue_len(NULL)", ssl_h)
191-
have_func("SSL_listen(NULL)", ssl_h)
192-
have_func("SSL_set_incoming_stream_policy(NULL, 0, 0)", ssl_h)
172+
# QUIC support - requires OpenSSL 3.5.0+, not available in LibreSSL
173+
if is_openssl && checking_for("OpenSSL version >= 3.5.0") {
174+
try_static_assert("OPENSSL_VERSION_NUMBER >= 0x30500000L", "openssl/opensslv.h") }
175+
$defs.push("-DHAVE_OSSL_QUIC_CLIENT_METHOD")
176+
end
193177

194178
Logging::message "=== Checking done. ===\n"
195179

ext/openssl/ossl_ssl.c

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1587,11 +1587,11 @@ ossl_sslctx_s_quic(VALUE klass, VALUE quic_sym)
15871587

15881588
if (quic_id == rb_intern("client"))
15891589
method = OSSL_QUIC_client_method();
1590-
#ifdef HAVE_OSSL_QUIC_CLIENT_THREAD_METHOD
1590+
#ifdef OSSL_USE_QUIC
15911591
else if (quic_id == rb_intern("client_thread"))
15921592
method = OSSL_QUIC_client_thread_method();
15931593
#endif
1594-
#ifdef HAVE_OSSL_QUIC_SERVER_METHOD
1594+
#ifdef OSSL_USE_QUIC
15951595
else if (quic_id == rb_intern("server"))
15961596
method = OSSL_QUIC_server_method();
15971597
#endif
@@ -1739,7 +1739,7 @@ ossl_ssl_initialize(int argc, VALUE *argv, VALUE self)
17391739

17401740
SSL_set_ex_data(ssl, ossl_ssl_ex_ptr_idx, (void *)self);
17411741
SSL_set_info_callback(ssl, ssl_info_cb);
1742-
#ifdef HAVE_SSL_SET_BLOCKING_MODE
1742+
#ifdef OSSL_USE_QUIC
17431743
// Always set non-blocking mode for QUIC connections
17441744
// This is a no-op on non-QUIC connections
17451745
SSL_set_blocking_mode(ssl, 0);
@@ -2902,7 +2902,7 @@ ossl_ssl_accept_stream_nonblock(int argc, VALUE *argv, VALUE self)
29022902
ossl_raise(eSSLErrorWaitReadable, "accept_stream would block");
29032903
}
29042904

2905-
#ifdef HAVE_SSL_SET_BLOCKING_MODE
2905+
#ifdef OSSL_USE_QUIC
29062906
// Always set non-blocking mode for QUIC connections
29072907
// This is a no-op on non-QUIC connections
29082908
SSL_set_blocking_mode(stream_ssl, 0);
@@ -3055,7 +3055,7 @@ ossl_ssl_is_init_finished(VALUE self)
30553055
return SSL_is_init_finished(ssl) ? Qtrue : Qfalse;
30563056
}
30573057

3058-
#ifdef HAVE_SSL_NEW_LISTENER
3058+
#ifdef OSSL_USE_QUIC
30593059
/*
30603060
* call-seq:
30613061
* SSLSocket.new_listener(io, context:) => SSLSocket
@@ -3097,13 +3097,8 @@ ossl_ssl_new_listener(int argc, VALUE *argv, VALUE klass)
30973097

30983098
listener_obj = TypedData_Wrap_Struct(cSSLSocket, &ossl_ssl_type, listener);
30993099
SSL_set_ex_data(listener, ossl_ssl_ex_ptr_idx, (void *)listener_obj);
3100-
#ifdef HAVE_SSL_SET_BLOCKING_MODE
3101-
// Always set non-blocking mode for QUIC connections
3102-
// This is a no-op on non-QUIC connections
31033100
SSL_set_blocking_mode(listener, 0);
3104-
// This is also a no-op on non-QUIC connections
31053101
SSL_set_default_stream_mode(listener, SSL_DEFAULT_STREAM_MODE_NONE);
3106-
#endif
31073102

31083103
rb_ivar_set(listener_obj, id_i_io, v_io);
31093104
rb_ivar_set(listener_obj, id_i_context, v_ctx);
@@ -3113,18 +3108,16 @@ ossl_ssl_new_listener(int argc, VALUE *argv, VALUE klass)
31133108
}
31143109
#endif
31153110

3116-
#ifdef HAVE_SSL_ACCEPT_CONNECTION
3111+
#ifdef OSSL_USE_QUIC
31173112
static VALUE
31183113
ossl_ssl_wrap_connection(VALUE self, SSL *conn_ssl)
31193114
{
31203115
VALUE conn_obj;
31213116

31223117
conn_obj = TypedData_Wrap_Struct(cSSLSocket, &ossl_ssl_type, conn_ssl);
31233118
SSL_set_ex_data(conn_ssl, ossl_ssl_ex_ptr_idx, (void *)conn_obj);
3124-
#ifdef HAVE_SSL_SET_BLOCKING_MODE
31253119
SSL_set_blocking_mode(conn_ssl, 0);
31263120
SSL_set_default_stream_mode(conn_ssl, SSL_DEFAULT_STREAM_MODE_NONE);
3127-
#endif
31283121

31293122
rb_ivar_set(conn_obj, id_i_io, rb_attr_get(self, id_i_io));
31303123
rb_ivar_set(conn_obj, id_i_context, rb_attr_get(self, id_i_context));
@@ -3188,7 +3181,7 @@ ossl_ssl_accept_connection_nonblock(int argc, VALUE *argv, VALUE self)
31883181
}
31893182
#endif
31903183

3191-
#ifdef HAVE_SSL_LISTEN
3184+
#ifdef OSSL_USE_QUIC
31923185
/*
31933186
* call-seq:
31943187
* ssl.listen => self
@@ -3208,7 +3201,7 @@ ossl_ssl_listen(VALUE self)
32083201
}
32093202
#endif
32103203

3211-
#ifdef HAVE_SSL_GET_ACCEPT_CONNECTION_QUEUE_LEN
3204+
#ifdef OSSL_USE_QUIC
32123205
/*
32133206
* call-seq:
32143207
* ssl.accept_connection_queue_len => Integer
@@ -3226,7 +3219,7 @@ ossl_ssl_accept_connection_queue_len(VALUE self)
32263219
}
32273220
#endif
32283221

3229-
#ifdef HAVE_SSL_SET_INCOMING_STREAM_POLICY
3222+
#ifdef OSSL_USE_QUIC
32303223
/*
32313224
* call-seq:
32323225
* ssl.incoming_stream_policy = policy
@@ -3715,17 +3708,11 @@ Init_ossl_ssl(void)
37153708
rb_define_const(mSSL, "STREAM_FLAG_UNI", UINT2NUM(SSL_STREAM_FLAG_UNI));
37163709
/* Do not block when creating a stream */
37173710
rb_define_const(mSSL, "STREAM_FLAG_NO_BLOCK", UINT2NUM(SSL_STREAM_FLAG_NO_BLOCK));
3718-
#ifdef HAVE_SSL_NEW_LISTENER
3711+
#ifdef OSSL_USE_QUIC
37193712
rb_define_singleton_method(cSSLSocket, "new_listener", ossl_ssl_new_listener, -1);
3720-
#endif
3721-
#ifdef HAVE_SSL_ACCEPT_CONNECTION
37223713
rb_define_method(cSSLSocket, "accept_connection", ossl_ssl_accept_connection, 0);
37233714
rb_define_method(cSSLSocket, "accept_connection_nonblock", ossl_ssl_accept_connection_nonblock, -1);
3724-
#endif
3725-
#ifdef HAVE_SSL_LISTEN
37263715
rb_define_method(cSSLSocket, "listen", ossl_ssl_listen, 0);
3727-
#endif
3728-
#ifdef HAVE_SSL_GET_ACCEPT_CONNECTION_QUEUE_LEN
37293716
rb_define_method(cSSLSocket, "accept_connection_queue_len", ossl_ssl_accept_connection_queue_len, 0);
37303717
#endif
37313718
#ifdef HAVE_SSL_POLL
@@ -3756,7 +3743,7 @@ Init_ossl_ssl(void)
37563743
rb_define_const(mSSL, "POLL_EVENT_OSE", ULL2NUM(SSL_POLL_EVENT_OSE));
37573744
rb_define_const(mSSL, "POLL_FLAG_NO_HANDLE_EVENTS", ULL2NUM(SSL_POLL_FLAG_NO_HANDLE_EVENTS));
37583745
#endif
3759-
#ifdef HAVE_SSL_SET_INCOMING_STREAM_POLICY
3746+
#ifdef OSSL_USE_QUIC
37603747
rb_define_method(cSSLSocket, "incoming_stream_policy=", ossl_ssl_set_incoming_stream_policy, 1);
37613748
rb_define_const(mSSL, "INCOMING_STREAM_POLICY_AUTO", INT2NUM(SSL_INCOMING_STREAM_POLICY_AUTO));
37623749
rb_define_const(mSSL, "INCOMING_STREAM_POLICY_ACCEPT", INT2NUM(SSL_INCOMING_STREAM_POLICY_ACCEPT));

0 commit comments

Comments
 (0)