fix_ssl_tests_scram_v2.patch

text/plain

Filename: fix_ssl_tests_scram_v2.patch
Type: text/plain
Part: 0
Message: Re: pgsql: Implement channel binding tls-server-end-point for SCRAM

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
Series: patch v2
File+
src/test/perl/TestLib.pm 22 0
src/test/ssl/t/002_scram.pl 17 4
diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index 72826d5bad..c49b4336c1 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -26,6 +26,7 @@ our @EXPORT = qw(
   slurp_dir
   slurp_file
   append_to_file
+  config_check
   system_or_bail
   system_log
   run_log
@@ -221,6 +222,27 @@ sub append_to_file
 	close $fh;
 }
 
+# Check presence of a given regexp within pg_config.h for the installation
+# where tests are running, returning a match status result depending on
+# that.
+sub config_check
+{
+	my ($regexp) = @_;
+	my ($stdout, $stderr);
+	my $result = IPC::Run::run [ 'pg_config', '--includedir' ], '>',
+		\$stdout, '2>', \$stderr;
+
+	print("# Checking for match with expression \"$regexp\" in pg_config.h\n");
+
+	die "could not execute pg_config" if $result != 1;
+	chomp($stdout);
+
+	open my $pg_config_h, '<', "$stdout/pg_config.h" or die "$!";
+	my $match = (grep {/^$regexp/} <$pg_config_h>);
+	close $pg_config_h;
+	return $match;
+}
+
 #
 # Test functions
 #
diff --git a/src/test/ssl/t/002_scram.pl b/src/test/ssl/t/002_scram.pl
index 3f425e00f0..73c8f7adf2 100644
--- a/src/test/ssl/t/002_scram.pl
+++ b/src/test/ssl/t/002_scram.pl
@@ -11,6 +11,10 @@ use File::Copy;
 # This is the hostname used to connect to the server.
 my $SERVERHOSTADDR = '127.0.0.1';
 
+# Determine whether build supports tls-server-end-point.
+my $supports_tls_server_end_point =
+	TestLib::config_check("#define HAVE_X509_GET_SIGNATURE_NID 1");
+
 # Allocation of base connection string shared among multiple tests.
 my $common_connstr;
 
@@ -44,10 +48,19 @@ test_connect_ok($common_connstr,
 	"SCRAM authentication with tls-unique as channel binding");
 test_connect_ok($common_connstr,
 	"scram_channel_binding=''",
-	"SCRAM authentication without channel binding");
-test_connect_ok($common_connstr,
-	"scram_channel_binding=tls-server-end-point",
-	"SCRAM authentication with tls-server-end-point as channel binding");
+				"SCRAM authentication without channel binding");
+if ($supports_tls_server_end_point)
+{
+	test_connect_ok($common_connstr,
+					"scram_channel_binding=tls-server-end-point",
+					"SCRAM authentication with tls-server-end-point as channel binding");
+}
+else
+{
+	test_connect_fails($common_connstr,
+					"scram_channel_binding=tls-server-end-point",
+					"SCRAM authentication with tls-server-end-point as channel binding");
+}
 test_connect_fails($common_connstr,
 	"scram_channel_binding=not-exists",
 	"SCRAM authentication with invalid channel binding");