]> granicus.if.org Git - postgresql/commitdiff
Have config_sspi_auth() permit IPv6 localhost connections.
authorNoah Misch <noah@leadboat.com>
Thu, 25 Dec 2014 18:52:03 +0000 (13:52 -0500)
committerNoah Misch <noah@leadboat.com>
Thu, 25 Dec 2014 19:03:21 +0000 (14:03 -0500)
Windows versions later than Windows Server 2003 map "localhost" to ::1.
Account for that in the generated pg_hba.conf, fixing another oversight
in commit f6dc6dd5ba54d52c0733aaafc50da2fbaeabb8b0.  Back-patch to 9.0,
like that commit.

David Rowley and Noah Misch

src/test/regress/pg_regress.c
src/tools/msvc/Mkvcbuild.pm

index 0b3f645579c65e0f146ca1e43be8e7ca7d0c9c43..ff124ba0097c69b89ae6a677571b9b1d00b648d0 100644 (file)
@@ -1039,6 +1039,7 @@ config_sspi_auth(const char *pgdata)
                           *domainname;
        char            username[128];
        DWORD           sz = sizeof(username) - 1;
+       bool            have_ipv6;
        char            fname[MAXPGPATH];
        int                     res;
        FILE       *hba,
@@ -1058,6 +1059,28 @@ config_sspi_auth(const char *pgdata)
                exit(2);
        }
 
+       /*
+        * Like initdb.c:setup_config(), determine whether the platform recognizes
+        * ::1 (IPv6 loopback) as a numeric host address string.
+        */
+       {
+               struct addrinfo *gai_result;
+               struct addrinfo hints;
+               WSADATA         wsaData;
+
+               hints.ai_flags = AI_NUMERICHOST;
+               hints.ai_family = AF_UNSPEC;
+               hints.ai_socktype = 0;
+               hints.ai_protocol = 0;
+               hints.ai_addrlen = 0;
+               hints.ai_canonname = NULL;
+               hints.ai_addr = NULL;
+               hints.ai_next = NULL;
+
+               have_ipv6 = (WSAStartup(MAKEWORD(2, 2), &wsaData) == 0 &&
+                                        getaddrinfo("::1", NULL, &hints, &gai_result) == 0);
+       }
+
        /* Check a Write outcome and report any error. */
 #define CW(cond)       \
        do { \
@@ -1089,6 +1112,9 @@ config_sspi_auth(const char *pgdata)
        CW(fputs("# Configuration written by config_sspi_auth()\n", hba) >= 0);
        CW(fputs("host all all 127.0.0.1/32  sspi include_realm=1 map=regress\n",
                         hba) >= 0);
+       if (have_ipv6)
+               CW(fputs("host all all ::1/128  sspi include_realm=1 map=regress\n",
+                                hba) >= 0);
        CW(fclose(hba) == 0);
 
        snprintf(fname, sizeof(fname), "%s/pg_ident.conf", pgdata);
index 5e5b90226950a18a23801729ddb64a5705b6fe5a..973ed824dba7229d1b659f1c879aca77f5489cdd 100644 (file)
@@ -307,6 +307,7 @@ sub mkvcbuild
        $pgregress_ecpg->AddIncludeDir('src\test\regress');
        $pgregress_ecpg->AddDefine('HOST_TUPLE="i686-pc-win32vc"');
        $pgregress_ecpg->AddDefine('FRONTEND');
+       $pgregress_ecpg->AddLibrary('ws2_32.lib');
        $pgregress_ecpg->AddReference($libpgport);
 
        my $isolation_tester =
@@ -332,6 +333,7 @@ sub mkvcbuild
        $pgregress_isolation->AddIncludeDir('src\test\regress');
        $pgregress_isolation->AddDefine('HOST_TUPLE="i686-pc-win32vc"');
        $pgregress_isolation->AddDefine('FRONTEND');
+       $pgregress_isolation->AddLibrary('ws2_32.lib');
        $pgregress_isolation->AddReference($libpgport);
 
        # src/bin
@@ -561,6 +563,8 @@ sub mkvcbuild
        $pgregress->AddFile('src\test\regress\pg_regress_main.c');
        $pgregress->AddIncludeDir('src\port');
        $pgregress->AddDefine('HOST_TUPLE="i686-pc-win32vc"');
+       $pgregress->AddDefine('FRONTEND');
+       $pgregress->AddLibrary('ws2_32.lib');
        $pgregress->AddReference($libpgport);
 
        $solution->Save();