summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--ext/openssl/ossl_ssl.c6
-rw-r--r--test/openssl/test_pair.rb7
-rw-r--r--test/openssl/utils.rb5
4 files changed, 25 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 9809b47242..3f72913e6f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Thu Jun 9 19:46:22 2016 Kazuki Yamaguchi <k@rhe.jp>
+
+ * ext/openssl/ossl_ssl.c: Add define guards for OPENSSL_NO_EC.
+ SSL_CTX_set_ecdh_auto() is defined even when ECDH is disabled in
+ OpenSSL's configuration. This fixes r55214.
+
+ * test/openssl/test_pair.rb (test_ecdh_curves): Skip if the OpenSSL does
+ not support ECDH.
+
+ * test/openssl/utils.rb (start_server): Ignore error in
+ SSLContext#ecdh_curves=.
+
Thu Jun 9 18:12:42 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
* Makefile.in (un-runnable): fail with proper error message.
diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c
index 1ee06583dd..5876946183 100644
--- a/ext/openssl/ossl_ssl.c
+++ b/ext/openssl/ossl_ssl.c
@@ -163,7 +163,7 @@ ossl_sslctx_s_alloc(VALUE klass)
RTYPEDDATA_DATA(obj) = ctx;
SSL_CTX_set_ex_data(ctx, ossl_ssl_ex_ptr_idx, (void*)obj);
-#if defined(HAVE_SSL_CTX_SET_ECDH_AUTO)
+#if !defined(OPENSSL_NO_EC) && defined(HAVE_SSL_CTX_SET_ECDH_AUTO)
/* We use SSL_CTX_set1_curves_list() to specify the curve used in ECDH. It
* allows to specify multiple curve names and OpenSSL will select
* automatically from them. In OpenSSL 1.0.2, the automatic selection has to
@@ -285,7 +285,7 @@ ossl_tmp_dh_callback(SSL *ssl, int is_export, int keylength)
}
#endif /* OPENSSL_NO_DH */
-#if !defined(OPENSSL_NO_EC)
+#if !defined(OPENSSL_NO_EC) && defined(HAVE_SSL_CTX_SET_TMP_ECDH_CALLBACK)
static VALUE
ossl_call_tmp_ecdh_callback(VALUE args)
{
@@ -2300,7 +2300,7 @@ Init_ossl_ssl(void)
*/
rb_attr(cSSLContext, rb_intern("client_cert_cb"), 1, 1, Qfalse);
-#if defined(HAVE_SSL_CTX_SET_TMP_ECDH_CALLBACK)
+#if !defined(OPENSSL_NO_EC) && defined(HAVE_SSL_CTX_SET_TMP_ECDH_CALLBACK)
/*
* A callback invoked when ECDH parameters are required.
*
diff --git a/test/openssl/test_pair.rb b/test/openssl/test_pair.rb
index 5cb6627c87..b90b4de372 100644
--- a/test/openssl/test_pair.rb
+++ b/test/openssl/test_pair.rb
@@ -433,7 +433,12 @@ module OpenSSL::TestPairM
sock1, sock2 = tcp_pair
ctx1 = OpenSSL::SSL::SSLContext.new
- ctx1.ciphers = "ECDH"
+ begin
+ ctx1.ciphers = "ECDH"
+ rescue OpenSSL::SSL::SSLError
+ skip "ECDH is not enabled in this OpenSSL" if $!.message =~ /no cipher match/
+ raise
+ end
ctx1.ecdh_curves = "P-384:P-521"
ctx1.security_level = 0
s1 = OpenSSL::SSL::SSLSocket.new(sock1, ctx1)
diff --git a/test/openssl/utils.rb b/test/openssl/utils.rb
index e4861fa688..f306b5d3d8 100644
--- a/test/openssl/utils.rb
+++ b/test/openssl/utils.rb
@@ -298,7 +298,10 @@ AQjjxMXhwULlmuR/K+WwlaZPiLIBYalLAZQ7ZbOPeVkJ8ePao0eLAgEC
ctx.cert = @svr_cert
ctx.key = @svr_key
ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::TEST_KEY_DH1024 }
- ctx.ecdh_curves = "P-256"
+ begin
+ ctx.ecdh_curves = "P-256"
+ rescue NotImplementedError
+ end
ctx.verify_mode = verify_mode
ctx_proc.call(ctx) if ctx_proc