mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	Avoid warnings in tests when openssl binary isn't available
The SSL tests for pg_stat_ssl tries to exactly match the serial
from the certificate by extracting it with the openssl binary.
If that fails due to the binary not being available, a fallback
match is used, but the attempt to execute a missing binary adds
a warning to the output which can confuse readers for a failure
in the test.  Fix by only attempting if the openssl binary was
found by autoconf/meson.
Backpatch down to v16 where commit c8e4030d1b made the test
use the OPENSSL variable from autoconf/meson instead of a hard-
coded value.
Author: Daniel Gustafsson <daniel@yesql.se>
Reported-by: Christoph Berg <myon@debian.org>
Discussion: https://postgr.es/m/aNPSp1-RIAs3skZm@msg.df7cb.de
Backpatch-through: 16
			
			
This commit is contained in:
		| @@ -702,30 +702,28 @@ TODO: | |||||||
|  |  | ||||||
| # pg_stat_ssl | # pg_stat_ssl | ||||||
|  |  | ||||||
| my $serialno = `$ENV{OPENSSL} x509 -serial -noout -in ssl/client.crt`; | # If the openssl program isn't available, or fails to run, fall back to a | ||||||
| if ($? == 0) | # generic integer match rather than skipping the test. | ||||||
|  | my $serialno = '\d+'; | ||||||
|  |  | ||||||
|  | if ($ENV{OPENSSL} ne '') | ||||||
| { | { | ||||||
| 	# OpenSSL prints serial numbers in hexadecimal and converting the serial | 	$serialno = `$ENV{OPENSSL} x509 -serial -noout -in ssl/client.crt`; | ||||||
| 	# from hex requires a 64-bit capable Perl as the serialnumber is based on | 	if ($? == 0) | ||||||
| 	# the current timestamp. On 32-bit fall back to checking for it being an |  | ||||||
| 	# integer like how we do when grabbing the serial fails. |  | ||||||
| 	if ($Config{ivsize} == 8) |  | ||||||
| 	{ | 	{ | ||||||
| 		$serialno =~ s/^serial=//; | 		# OpenSSL prints serial numbers in hexadecimal and converting the serial | ||||||
| 		$serialno =~ s/\s+//g; | 		# from hex requires a 64-bit capable Perl as the serialnumber is based on | ||||||
| 		$serialno = hex($serialno); | 		# the current timestamp. On 32-bit fall back to checking for it being an | ||||||
|  | 		# integer like how we do when grabbing the serial fails. | ||||||
|  | 		if ($Config{ivsize} == 8) | ||||||
|  | 		{ | ||||||
|  | 			no warnings qw(portable); | ||||||
|  |  | ||||||
|  | 			$serialno =~ s/^serial=//; | ||||||
|  | 			$serialno =~ s/\s+//g; | ||||||
|  | 			$serialno = hex($serialno); | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		$serialno = '\d+'; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| else |  | ||||||
| { |  | ||||||
| 	# OpenSSL isn't functioning on the user's PATH. This probably isn't worth |  | ||||||
| 	# skipping the test over, so just fall back to a generic integer match. |  | ||||||
| 	warn "couldn't run \"$ENV{OPENSSL} x509\" to get client cert serialno"; |  | ||||||
| 	$serialno = '\d+'; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| command_like( | command_like( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user