зеркало из https://github.com/github/ruby.git
[ruby/openssl] Undefine `OpenSSL::SSL` for no socket platforms
This fixes a linkage error about `ossl_ssl_type` on platforms which do
not have socket, like WASI.
Even before this patch, some items are disabled under `OPENSSL_NO_SOCK` since
ee22fad45d
However, due to some new use of OpenSSL::SSL::Socket over the past few years,
the build under `OPENSSL_NO_SOCK` had been broken.
This patch guards whole `OpenSSL::SSL` items by `OPENSSL_NO_SOCK`.
[ky: adjusted to apply on top of my previous commit that removed the
OpenSSL::ExtConfig, and added a guard to lib/openssl/ssl.rb.]
https://github.com/ruby/openssl/commit/b0cfac6a96
This commit is contained in:
Родитель
e6ca644329
Коммит
782777a803
|
@ -11,6 +11,9 @@
|
||||||
=end
|
=end
|
||||||
|
|
||||||
require "openssl/buffering"
|
require "openssl/buffering"
|
||||||
|
|
||||||
|
if defined?(OpenSSL::SSL)
|
||||||
|
|
||||||
require "io/nonblock"
|
require "io/nonblock"
|
||||||
require "ipaddr"
|
require "ipaddr"
|
||||||
require "socket"
|
require "socket"
|
||||||
|
@ -540,3 +543,5 @@ YoaOffgTf5qxiwkjnlVZQc3whgnEt9FpVMvQ9eknyeGB5KHfayAc3+hUAvI3/Cr3
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
*/
|
*/
|
||||||
#include "ossl.h"
|
#include "ossl.h"
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_SOCK
|
||||||
#define numberof(ary) (int)(sizeof(ary)/sizeof((ary)[0]))
|
#define numberof(ary) (int)(sizeof(ary)/sizeof((ary)[0]))
|
||||||
|
|
||||||
#if !defined(OPENSSL_NO_NEXTPROTONEG) && !OSSL_IS_LIBRESSL
|
#if !defined(OPENSSL_NO_NEXTPROTONEG) && !OSSL_IS_LIBRESSL
|
||||||
|
@ -1540,7 +1541,6 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self)
|
||||||
/*
|
/*
|
||||||
* SSLSocket class
|
* SSLSocket class
|
||||||
*/
|
*/
|
||||||
#ifndef OPENSSL_NO_SOCK
|
|
||||||
static inline int
|
static inline int
|
||||||
ssl_started(SSL *ssl)
|
ssl_started(SSL *ssl)
|
||||||
{
|
{
|
||||||
|
@ -2568,6 +2568,7 @@ Init_ossl_ssl(void)
|
||||||
rb_mWaitWritable = rb_define_module_under(rb_cIO, "WaitWritable");
|
rb_mWaitWritable = rb_define_module_under(rb_cIO, "WaitWritable");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_SOCK
|
||||||
id_call = rb_intern_const("call");
|
id_call = rb_intern_const("call");
|
||||||
ID_callback_state = rb_intern_const("callback_state");
|
ID_callback_state = rb_intern_const("callback_state");
|
||||||
|
|
||||||
|
@ -2942,9 +2943,6 @@ Init_ossl_ssl(void)
|
||||||
* Document-class: OpenSSL::SSL::SSLSocket
|
* Document-class: OpenSSL::SSL::SSLSocket
|
||||||
*/
|
*/
|
||||||
cSSLSocket = rb_define_class_under(mSSL, "SSLSocket", rb_cObject);
|
cSSLSocket = rb_define_class_under(mSSL, "SSLSocket", rb_cObject);
|
||||||
#ifdef OPENSSL_NO_SOCK
|
|
||||||
rb_define_method(cSSLSocket, "initialize", rb_f_notimplement, -1);
|
|
||||||
#else
|
|
||||||
rb_define_alloc_func(cSSLSocket, ossl_ssl_s_alloc);
|
rb_define_alloc_func(cSSLSocket, ossl_ssl_s_alloc);
|
||||||
rb_define_method(cSSLSocket, "initialize", ossl_ssl_initialize, -1);
|
rb_define_method(cSSLSocket, "initialize", ossl_ssl_initialize, -1);
|
||||||
rb_undef_method(cSSLSocket, "initialize_copy");
|
rb_undef_method(cSSLSocket, "initialize_copy");
|
||||||
|
@ -2979,7 +2977,6 @@ Init_ossl_ssl(void)
|
||||||
# ifdef OSSL_USE_NEXTPROTONEG
|
# ifdef OSSL_USE_NEXTPROTONEG
|
||||||
rb_define_method(cSSLSocket, "npn_protocol", ossl_ssl_npn_protocol, 0);
|
rb_define_method(cSSLSocket, "npn_protocol", ossl_ssl_npn_protocol, 0);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
|
||||||
|
|
||||||
rb_define_const(mSSL, "VERIFY_NONE", INT2NUM(SSL_VERIFY_NONE));
|
rb_define_const(mSSL, "VERIFY_NONE", INT2NUM(SSL_VERIFY_NONE));
|
||||||
rb_define_const(mSSL, "VERIFY_PEER", INT2NUM(SSL_VERIFY_PEER));
|
rb_define_const(mSSL, "VERIFY_PEER", INT2NUM(SSL_VERIFY_PEER));
|
||||||
|
@ -3141,4 +3138,5 @@ Init_ossl_ssl(void)
|
||||||
DefIVarID(io);
|
DefIVarID(io);
|
||||||
DefIVarID(context);
|
DefIVarID(context);
|
||||||
DefIVarID(hostname);
|
DefIVarID(hostname);
|
||||||
|
#endif /* !defined(OPENSSL_NO_SOCK) */
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "ossl.h"
|
#include "ossl.h"
|
||||||
|
|
||||||
|
#ifndef OPENSSL_NO_SOCK
|
||||||
VALUE cSSLSession;
|
VALUE cSSLSession;
|
||||||
static VALUE eSSLSession;
|
static VALUE eSSLSession;
|
||||||
|
|
||||||
|
@ -299,6 +300,7 @@ static VALUE ossl_ssl_session_to_text(VALUE self)
|
||||||
return ossl_membio2str(out);
|
return ossl_membio2str(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* !defined(OPENSSL_NO_SOCK) */
|
||||||
|
|
||||||
void Init_ossl_ssl_session(void)
|
void Init_ossl_ssl_session(void)
|
||||||
{
|
{
|
||||||
|
@ -307,6 +309,7 @@ void Init_ossl_ssl_session(void)
|
||||||
mSSL = rb_define_module_under(mOSSL, "SSL");
|
mSSL = rb_define_module_under(mOSSL, "SSL");
|
||||||
eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError);
|
eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError);
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef OPENSSL_NO_SOCK
|
||||||
cSSLSession = rb_define_class_under(mSSL, "Session", rb_cObject);
|
cSSLSession = rb_define_class_under(mSSL, "Session", rb_cObject);
|
||||||
eSSLSession = rb_define_class_under(cSSLSession, "SessionError", eOSSLError);
|
eSSLSession = rb_define_class_under(cSSLSession, "SessionError", eOSSLError);
|
||||||
|
|
||||||
|
@ -324,4 +327,5 @@ void Init_ossl_ssl_session(void)
|
||||||
rb_define_method(cSSLSession, "to_der", ossl_ssl_session_to_der, 0);
|
rb_define_method(cSSLSession, "to_der", ossl_ssl_session_to_der, 0);
|
||||||
rb_define_method(cSSLSession, "to_pem", ossl_ssl_session_to_pem, 0);
|
rb_define_method(cSSLSession, "to_pem", ossl_ssl_session_to_pem, 0);
|
||||||
rb_define_method(cSSLSession, "to_text", ossl_ssl_session_to_text, 0);
|
rb_define_method(cSSLSession, "to_text", ossl_ssl_session_to_text, 0);
|
||||||
|
#endif /* !defined(OPENSSL_NO_SOCK) */
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче