From 5a3b714f2b7e9aaa5efa23dbc103a8f057f54708 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Tue, 15 Feb 2022 12:05:28 +0900 Subject: [PATCH v8 1/2] Fix sanity check for PGHOST[ADDR] in pg_upgrade with Windows paths The checks currently done at the startup of pg_upgrade for PGHOST and PGHOSTADDR to avoid any attempt to access to an external cluster would fail when attempting to use Windows paths, or even temporary paths prefixed by '@'. is_unixsock_path() is designed to detect such cases, so use it rather than assuming that all valid paths are prefixed with a slash. Issue found while testing the tests of pg_upgrade through the CI on Windows. Based on an analysis from me and a solution from Andres Freund. --- src/bin/pg_upgrade/server.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_upgrade/server.c b/src/bin/pg_upgrade/server.c index 7878d233de..265137e86b 100644 --- a/src/bin/pg_upgrade/server.c +++ b/src/bin/pg_upgrade/server.c @@ -11,6 +11,7 @@ #include "common/connect.h" #include "fe_utils/string_utils.h" +#include "libpq/pqcomm.h" #include "pg_upgrade.h" static PGconn *get_db_conn(ClusterInfo *cluster, const char *db_name); @@ -368,7 +369,7 @@ check_pghost_envvar(void) if (value && strlen(value) > 0 && /* check for 'local' host values */ (strcmp(value, "localhost") != 0 && strcmp(value, "127.0.0.1") != 0 && - strcmp(value, "::1") != 0 && value[0] != '/')) + strcmp(value, "::1") != 0 && !is_unixsock_path(value))) pg_fatal("libpq environment variable %s has a non-local server value: %s\n", option->envvar, value); } -- 2.34.1