Skip to content

Commit

Permalink
Merge pull request #558 from kateinoigakukun/katei/fix-no-sock-support
Browse files Browse the repository at this point in the history
Undefine `OpenSSL::SSL` for no socket platforms
  • Loading branch information
rhenium authored Dec 22, 2022
2 parents 1b60365 + b0cfac6 commit 75bbc8a
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 23 deletions.
23 changes: 3 additions & 20 deletions ext/openssl/ossl_ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*/
#include "ossl.h"

#ifndef OPENSSL_NO_SOCK
#define numberof(ary) (int)(sizeof(ary)/sizeof((ary)[0]))

#if !defined(OPENSSL_NO_NEXTPROTONEG) && !OSSL_IS_LIBRESSL
Expand All @@ -33,7 +34,6 @@
} while (0)

VALUE mSSL;
static VALUE mSSLExtConfig;
static VALUE eSSLError;
VALUE cSSLContext;
VALUE cSSLSocket;
Expand Down Expand Up @@ -1541,7 +1541,6 @@ ossl_sslctx_flush_sessions(int argc, VALUE *argv, VALUE self)
/*
* SSLSocket class
*/
#ifndef OPENSSL_NO_SOCK
static inline int
ssl_started(SSL *ssl)
{
Expand Down Expand Up @@ -2569,6 +2568,7 @@ Init_ossl_ssl(void)
rb_mWaitWritable = rb_define_module_under(rb_cIO, "WaitWritable");
#endif

#ifndef OPENSSL_NO_SOCK
id_call = rb_intern_const("call");
ID_callback_state = rb_intern_const("callback_state");

Expand All @@ -2591,16 +2591,6 @@ Init_ossl_ssl(void)
*/
mSSL = rb_define_module_under(mOSSL, "SSL");

/* Document-module: OpenSSL::ExtConfig
*
* This module contains configuration information about the SSL extension,
* for example if socket support is enabled, or the host name TLS extension
* is enabled. Constants in this module will always be defined, but contain
* +true+ or +false+ values depending on the configuration of your OpenSSL
* installation.
*/
mSSLExtConfig = rb_define_module_under(mOSSL, "ExtConfig");

/* Document-class: OpenSSL::SSL::SSLError
*
* Generic error class raised by SSLSocket and SSLContext.
Expand Down Expand Up @@ -2763,8 +2753,6 @@ Init_ossl_ssl(void)
*/
rb_attr(cSSLContext, rb_intern_const("session_remove_cb"), 1, 1, Qfalse);

rb_define_const(mSSLExtConfig, "HAVE_TLSEXT_HOST_NAME", Qtrue);

/*
* A callback invoked whenever a new handshake is initiated on an
* established connection. May be used to disable renegotiation entirely.
Expand Down Expand Up @@ -2955,11 +2943,6 @@ Init_ossl_ssl(void)
* Document-class: OpenSSL::SSL::SSLSocket
*/
cSSLSocket = rb_define_class_under(mSSL, "SSLSocket", rb_cObject);
#ifdef OPENSSL_NO_SOCK
rb_define_const(mSSLExtConfig, "OPENSSL_NO_SOCK", Qtrue);
rb_define_method(cSSLSocket, "initialize", rb_f_notimplement, -1);
#else
rb_define_const(mSSLExtConfig, "OPENSSL_NO_SOCK", Qfalse);
rb_define_alloc_func(cSSLSocket, ossl_ssl_s_alloc);
rb_define_method(cSSLSocket, "initialize", ossl_ssl_initialize, -1);
rb_undef_method(cSSLSocket, "initialize_copy");
Expand Down Expand Up @@ -2994,7 +2977,6 @@ Init_ossl_ssl(void)
# ifdef OSSL_USE_NEXTPROTONEG
rb_define_method(cSSLSocket, "npn_protocol", ossl_ssl_npn_protocol, 0);
# endif
#endif

rb_define_const(mSSL, "VERIFY_NONE", INT2NUM(SSL_VERIFY_NONE));
rb_define_const(mSSL, "VERIFY_PEER", INT2NUM(SSL_VERIFY_PEER));
Expand Down Expand Up @@ -3156,4 +3138,5 @@ Init_ossl_ssl(void)
DefIVarID(io);
DefIVarID(context);
DefIVarID(hostname);
#endif /* !defined(OPENSSL_NO_SOCK) */
}
4 changes: 4 additions & 0 deletions ext/openssl/ossl_ssl_session.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "ossl.h"

#ifndef OPENSSL_NO_SOCK
VALUE cSSLSession;
static VALUE eSSLSession;

Expand Down Expand Up @@ -299,6 +300,7 @@ static VALUE ossl_ssl_session_to_text(VALUE self)
return ossl_membio2str(out);
}

#endif /* !defined(OPENSSL_NO_SOCK) */

void Init_ossl_ssl_session(void)
{
Expand All @@ -307,6 +309,7 @@ void Init_ossl_ssl_session(void)
mSSL = rb_define_module_under(mOSSL, "SSL");
eOSSLError = rb_define_class_under(mOSSL, "OpenSSLError", rb_eStandardError);
#endif
#ifndef OPENSSL_NO_SOCK
cSSLSession = rb_define_class_under(mSSL, "Session", rb_cObject);
eSSLSession = rb_define_class_under(cSSLSession, "SessionError", eOSSLError);

Expand All @@ -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_pem", ossl_ssl_session_to_pem, 0);
rb_define_method(cSSLSession, "to_text", ossl_ssl_session_to_text, 0);
#endif /* !defined(OPENSSL_NO_SOCK) */
}
5 changes: 5 additions & 0 deletions lib/openssl/ssl.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
=end

require "openssl/buffering"

if defined?(OpenSSL::SSL)

require "io/nonblock"
require "ipaddr"
require "socket"
Expand Down Expand Up @@ -540,3 +543,5 @@ def close
end
end
end

end
2 changes: 1 addition & 1 deletion test/openssl/test_pair.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
require_relative 'utils'
require_relative 'ut_eof'

if defined?(OpenSSL)
if defined?(OpenSSL::SSL)

module OpenSSL::SSLPairM
def setup
Expand Down
2 changes: 1 addition & 1 deletion test/openssl/test_ssl.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require_relative "utils"

if defined?(OpenSSL)
if defined?(OpenSSL::SSL)

class OpenSSL::TestSSL < OpenSSL::SSLTestCase
def test_bad_socket
Expand Down
2 changes: 1 addition & 1 deletion test/openssl/test_ssl_session.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require_relative "utils"

if defined?(OpenSSL)
if defined?(OpenSSL::SSL)

class OpenSSL::TestSSLSession < OpenSSL::SSLTestCase
def test_session
Expand Down

0 comments on commit 75bbc8a

Please sign in to comment.