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
pull/247/head
Daniel Gustafsson 2 months ago
parent 3a7225ed37
commit 150a1b3287
  1. 42
      src/test/ssl/t/001_ssltests.pl

@ -748,33 +748,29 @@ TODO:
# pg_stat_ssl
my $serialno = `$ENV{OPENSSL} x509 -serial -noout -in ssl/client.crt`;
if ($? == 0)
{
# OpenSSL prints serial numbers in hexadecimal and converting the serial
# from hex requires a 64-bit capable Perl as the serialnumber is based on
# 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);
# If the openssl program isn't available, or fails to run, fall back to a
# generic integer match rather than skipping the test.
my $serialno = '\d+';
$serialno =~ s/^serial=//;
$serialno =~ s/\s+//g;
$serialno = hex($serialno);
}
else
if ($ENV{OPENSSL} ne '')
{
$serialno = `$ENV{OPENSSL} x509 -serial -noout -in ssl/client.crt`;
if ($? == 0)
{
$serialno = '\d+';
# OpenSSL prints serial numbers in hexadecimal and converting the serial
# from hex requires a 64-bit capable Perl as the serialnumber is based on
# 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
{
# 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(
[

Loading…
Cancel
Save