Add no-ssl2-method
authorKurt Roeckx <kurt@roeckx.be>
Wed, 9 Mar 2016 17:10:52 +0000 (18:10 +0100)
committerKurt Roeckx <kurt@roeckx.be>
Mon, 14 Mar 2016 20:13:59 +0000 (21:13 +0100)
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
MR: #2341

CHANGES
ssl/s2_meth.c
ssl/ssl.h
util/mk1mf.pl
util/mkdef.pl
util/ssleay.num

diff --git a/CHANGES b/CHANGES
index d0bc8347e66d9574d16e02a1aeb790ac6b0723d0..4e118e6d11d6091db901e448dc33ff983b560ca6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,10 @@
      default.
      [Kurt Roeckx]
 
+  *) Only remove the SSLv2 methods with the no-ssl2-method option. When the
+     methods are enabled and ssl2 is disabled the methods return NULL.
+     [Kurt Roeckx]
+
  Changes between 1.0.2f and 1.0.2g [1 Mar 2016]
 
   * Disable weak ciphers in SSLv3 and up in default builds of OpenSSL.
index 019d9dcf6c7f4d5c63025e0a0f6dcbef520e8bbd..73885b7ecff8e7671d820659ca65170a8b13a7b6 100644 (file)
@@ -57,7 +57,8 @@
  */
 
 #include "ssl_locl.h"
-#ifndef OPENSSL_NO_SSL2
+#ifndef OPENSSL_NO_SSL2_METHOD
+# ifndef OPENSSL_NO_SSL2
 # include <stdio.h>
 # include <openssl/objects.h>
 
@@ -72,10 +73,19 @@ static const SSL_METHOD *ssl2_get_method(int ver)
 
 IMPLEMENT_ssl2_meth_func(SSLv2_method,
                          ssl2_accept, ssl2_connect, ssl2_get_method)
-#else                           /* !OPENSSL_NO_SSL2 */
+
+# else /* !OPENSSL_NO_SSL2 */
 
 const SSL_METHOD *SSLv2_method(void) { return NULL; }
 const SSL_METHOD *SSLv2_client_method(void) { return NULL; }
 const SSL_METHOD *SSLv2_server_method(void) { return NULL; }
 
+# endif
+
+#else /* !OPENSSL_NO_SSL2_METHOD */
+
+# if PEDANTIC
+static void *dummy = &dummy;
+# endif
+
 #endif
index 2e84b95611d95eefdd9fbbf0cc07066bfbb7acec..5ef56faa509903c771a42acfbf7443ea7ae54687 100644 (file)
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -2345,9 +2345,11 @@ const char *SSL_get_version(const SSL *s);
 /* This sets the 'default' SSL version that SSL_new() will create */
 int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth);
 
+# ifndef OPENSSL_NO_SSL2_METHOD
 const SSL_METHOD *SSLv2_method(void); /* SSLv2 */
 const SSL_METHOD *SSLv2_server_method(void); /* SSLv2 */
 const SSL_METHOD *SSLv2_client_method(void); /* SSLv2 */
+# endif
 
 # ifndef OPENSSL_NO_SSL3_METHOD
 const SSL_METHOD *SSLv3_method(void); /* SSLv3 */
index 2629a1c5dd645bfdaa2955a25746e4126e4305ee..9029c5135737e62c1cd940caf7602f5e45a82483 100755 (executable)
@@ -1198,6 +1198,7 @@ sub read_options
                "nw-mwasm" => \$nw_mwasm,
                "gaswin" => \$gaswin,
                "no-ssl2" => \$no_ssl2,
+               "no-ssl2-method" => 0,
                "no-ssl3" => \$no_ssl3,
                "no-ssl3-method" => 0,
                "no-tlsext" => \$no_tlsext,
index c57c7f748eda47c540acc3c2d6375152e0b370eb..b9b159a00c8044423e956a55cb7b49b806d6575a 100755 (executable)
@@ -107,6 +107,8 @@ my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF",
                         "CAPIENG",
                         # SSL v2
                         "SSL2",
+                        # SSL v2 method
+                        "SSL2_METHOD",
                         # SSL v3 method
                         "SSL3_METHOD",
                         # JPAKE
@@ -145,7 +147,7 @@ my $no_fp_api; my $no_static_engine=1; my $no_gmp; my $no_deprecated;
 my $no_rfc3779; my $no_psk; my $no_tlsext; my $no_cms; my $no_capieng;
 my $no_jpake; my $no_srp; my $no_ssl2; my $no_ec2m; my $no_nistp_gcc; 
 my $no_nextprotoneg; my $no_sctp; my $no_srtp; my $no_ssl_trace;
-my $no_unit_test; my $no_ssl3_method;
+my $no_unit_test; my $no_ssl3_method; my $no_ssl2_method;
 
 my $fips;
 
@@ -240,6 +242,7 @@ foreach (@ARGV, split(/ /, $options))
        elsif (/^no-ec_nistp_64_gcc_128$/)      { $no_nistp_gcc=1; }
        elsif (/^no-nextprotoneg$/)     { $no_nextprotoneg=1; }
        elsif (/^no-ssl2$/)     { $no_ssl2=1; }
+       elsif (/^no-ssl2-method$/) { $no_ssl2_method=1; }
        elsif (/^no-ssl3-method$/) { $no_ssl3_method=1; }
        elsif (/^no-ssl-trace$/) { $no_ssl_trace=1; }
        elsif (/^no-capieng$/)  { $no_capieng=1; }
@@ -1215,6 +1218,7 @@ sub is_valid
                        if ($keyword eq "EC_NISTP_64_GCC_128" && $no_nistp_gcc)
                                        { return 0; }
                        if ($keyword eq "SSL2" && $no_ssl2) { return 0; }
+                       if ($keyword eq "SSL2_METHOD" && $no_ssl2_method) { return 0; }
                        if ($keyword eq "SSL3_METHOD" && $no_ssl3_method) { return 0; }
                        if ($keyword eq "SSL_TRACE" && $no_ssl_trace) { return 0; }
                        if ($keyword eq "CAPIENG" && $no_capieng) { return 0; }
index 5a8991350c50fb20700744ea0afa8fbdc62b5425..5760bc42a2519b9359db7468586d1c5a423cfd2b 100755 (executable)
@@ -98,9 +98,9 @@ SSLeay_add_ssl_algorithms               109   NOEXIST::FUNCTION:
 SSLv23_client_method                    110    EXIST::FUNCTION:RSA
 SSLv23_method                           111    EXIST::FUNCTION:RSA
 SSLv23_server_method                    112    EXIST::FUNCTION:RSA
-SSLv2_client_method                     113    EXIST::FUNCTION:RSA,SSL2
-SSLv2_method                            114    EXIST::FUNCTION:RSA,SSL2
-SSLv2_server_method                     115    EXIST::FUNCTION:RSA,SSL2
+SSLv2_client_method                     113    EXIST::FUNCTION:RSA,SSL2_METHOD
+SSLv2_method                            114    EXIST::FUNCTION:RSA,SSL2_METHOD
+SSLv2_server_method                     115    EXIST::FUNCTION:RSA,SSL2_METHOD
 SSLv3_client_method                     116    EXIST::FUNCTION:SSL3_METHOD
 SSLv3_method                            117    EXIST::FUNCTION:SSL3_METHOD
 SSLv3_server_method                     118    EXIST::FUNCTION:SSL3_METHOD