Commit fed19f31 authored by Noah Misch's avatar Noah Misch

Don't connect() to a wildcard address in test_postmaster_connection().

At least OpenBSD, NetBSD, and Windows don't support it.  This repairs
pg_ctl for listen_addresses='0.0.0.0' and listen_addresses='::'.  Since
pg_ctl prefers to test a Unix-domain socket, Windows users are most
likely to need this change.  Back-patch to 9.1 (all supported versions).
This could change pg_ctl interaction with loopback-interface firewall
rules.  Therefore, in 9.4 and earlier (released branches), activate the
change only on known-affected platforms.

Reported (bug #13611) and designed by Kondo Yuta.
parent fba60e57
...@@ -646,9 +646,20 @@ test_postmaster_connection(pgpid_t pm_pid, bool do_checkpoint) ...@@ -646,9 +646,20 @@ test_postmaster_connection(pgpid_t pm_pid, bool do_checkpoint)
return PQPING_NO_ATTEMPT; return PQPING_NO_ATTEMPT;
} }
/* If postmaster is listening on "*", use localhost */ /*
* Map listen-only addresses to counterparts usable
* for establishing a connection. connect() to "::"
* or "0.0.0.0" is not portable to OpenBSD 5.0 or to
* Windows Server 2008, and connect() to "::" is
* additionally not portable to NetBSD 6.0. (Cygwin
* does handle both addresses, though.)
*/
if (strcmp(host_str, "*") == 0) if (strcmp(host_str, "*") == 0)
strcpy(host_str, "localhost"); strcpy(host_str, "localhost");
else if (strcmp(host_str, "0.0.0.0") == 0)
strcpy(host_str, "127.0.0.1");
else if (strcmp(host_str, "::") == 0)
strcpy(host_str, "::1");
/* /*
* We need to set connect_timeout otherwise on Windows * We need to set connect_timeout otherwise on Windows
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment