]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
OpenSSL::Test: Avoid running IPv6 related tests if IPv6 was explicitly disabled
authorRichard Levitte <levitte@openssl.org>
Thu, 27 Jun 2024 06:30:28 +0000 (08:30 +0200)
committerRichard Levitte <levitte@openssl.org>
Sat, 29 Jun 2024 06:40:53 +0000 (08:40 +0200)
It's possible to disable IPv6  explicitly when configuring OpenSSL.  In that
case, IPv6 related tests should be skipped.

This is solved by having OpenSSL::Test::Utils::have_IPv6() check configuration
first, before trying to determine if the machine supports IPv6.

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/24748)

(cherry picked from commit 5a9c90b1e59b2c368876229862fbff29f2bcf006)

util/perl/OpenSSL/Test/Utils.pm

index dcff6a5c996795fc4cee8c8dd504607dfa68fca2..90469cd6fe3dcb9641017617c008705f770839c2 100644 (file)
@@ -72,6 +72,8 @@ Returns an item from the %config hash in \$TOP/configdata.pm.
 =item B<have_IPv6>
 
 Return true if IPv4 / IPv6 is possible to use on the current system.
+Additionally, B<have_IPv6> also checks how OpenSSL was configured,
+i.e. if IPv6 was explicitly disabled with -DOPENSSL_USE_IPv6=0.
 
 =back
 
@@ -80,6 +82,7 @@ Return true if IPv4 / IPv6 is possible to use on the current system.
 our %available_protocols;
 our %disabled;
 our %config;
+our %target;
 my $configdata_loaded = 0;
 
 sub load_configdata {
@@ -91,6 +94,7 @@ sub load_configdata {
           %available_protocols = %configdata::available_protocols;
           %disabled = %configdata::disabled;
           %config = %configdata::config;
+          %target = %configdata::target;
     };
     $configdata_loaded = 1;
 }
@@ -221,6 +225,18 @@ sub have_IPv4 {
 }
 
 sub have_IPv6 {
+    if ($have_IPv6 < 0) {
+        load_configdata() unless $configdata_loaded;
+        # If OpenSSL is configured with IPv6 explicitly disabled, no IPv6
+        # related tests should be performed.  In other words, pretend IPv6
+        # isn't present.
+        $have_IPv6 = 0
+            if grep { $_ eq 'OPENSSL_USE_IPV6=0' } @{$config{CPPDEFINES}};
+        # Similarly, if a config target has explicitly disabled IPv6, no
+        # IPv6 related tests should be performed.
+        $have_IPv6 = 0
+            if grep { $_ eq 'OPENSSL_USE_IPV6=0' } @{$target{defines}};
+    }
     if ($have_IPv6 < 0) {
         $have_IPv6 = check_IP("::1");
     }