mirror of
https://github.com/postgres/postgres.git
synced 2026-05-27 12:00:13 -04:00
Add raw_connect and raw_connect_works to Cluster.pm
These two routines will be used in a test of an upcoming fix. This
commit affects the v14~v17 range. v18 and newer versions already
include them, thanks to 85ec945b78.
Security: CVE-2026-6479
Backpatch-through: 14
This commit is contained in:
parent
01b5ef7df0
commit
6dffaeb8e5
1 changed files with 76 additions and 0 deletions
|
|
@ -284,6 +284,82 @@ sub connstr
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
|
|
||||||
|
=item $node->raw_connect()
|
||||||
|
|
||||||
|
Open a raw TCP or Unix domain socket connection to the server. This is
|
||||||
|
used by low-level protocol and connection limit tests.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub raw_connect
|
||||||
|
{
|
||||||
|
my ($self) = @_;
|
||||||
|
my $pgport = $self->port;
|
||||||
|
my $pghost = $self->host;
|
||||||
|
|
||||||
|
my $socket;
|
||||||
|
if ($PostgreSQL::Test::Utils::use_unix_sockets)
|
||||||
|
{
|
||||||
|
require IO::Socket::UNIX;
|
||||||
|
my $path = "$pghost/.s.PGSQL.$pgport";
|
||||||
|
|
||||||
|
$socket = IO::Socket::UNIX->new(
|
||||||
|
Type => SOCK_STREAM(),
|
||||||
|
Peer => $path,
|
||||||
|
) or die "Cannot create socket - $IO::Socket::errstr\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$socket = IO::Socket::INET->new(
|
||||||
|
PeerHost => $pghost,
|
||||||
|
PeerPort => $pgport,
|
||||||
|
Proto => 'tcp'
|
||||||
|
) or die "Cannot create socket - $IO::Socket::errstr\n";
|
||||||
|
}
|
||||||
|
return $socket;
|
||||||
|
}
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
|
=item $node->raw_connect_works()
|
||||||
|
|
||||||
|
Check if raw_connect() function works on this platform. This should
|
||||||
|
be called to SKIP any tests that require raw_connect().
|
||||||
|
|
||||||
|
This tries to connect to the server, to test whether it works or not,,
|
||||||
|
so the server is up and running. Otherwise this can return 0 even if
|
||||||
|
there's nothing wrong with raw_connect() itself.
|
||||||
|
|
||||||
|
Notably, raw_connect() does not work on Unix domain sockets on
|
||||||
|
Strawberry perl 5.26.3.1 on Windows, which we use in Cirrus CI images
|
||||||
|
as of this writing. It dies with "not implemented on this
|
||||||
|
architecture".
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub raw_connect_works
|
||||||
|
{
|
||||||
|
my ($self) = @_;
|
||||||
|
|
||||||
|
# If we're using Unix domain sockets, we need a working
|
||||||
|
# IO::Socket::UNIX implementation.
|
||||||
|
if ($PostgreSQL::Test::Utils::use_unix_sockets)
|
||||||
|
{
|
||||||
|
eval {
|
||||||
|
my $sock = $self->raw_connect();
|
||||||
|
$sock->close();
|
||||||
|
};
|
||||||
|
if ($@ =~ /not implemented/)
|
||||||
|
{
|
||||||
|
diag "IO::Socket::UNIX does not work: $@";
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
=pod
|
||||||
|
|
||||||
=item $node->group_access()
|
=item $node->group_access()
|
||||||
|
|
||||||
Does the data dir allow group access?
|
Does the data dir allow group access?
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue