]> granicus.if.org Git - postgresql/commitdiff
libpq: Fix inadvertent change in .pgpass lookup behavior.
authorRobert Haas <rhaas@postgresql.org>
Mon, 1 May 2017 15:27:09 +0000 (11:27 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 1 May 2017 15:29:00 +0000 (11:29 -0400)
Commit 274bb2b3857cc987cfa21d14775cae9b0dababa5 caused password file
lookups to use the hostaddr in preference to the host, but that was
not intended and the documented behavior is the opposite.

Report and patch by Kyotaro Horiguchi.

Discussion: http://postgr.es/m/20170428.165432.60857995.horiguchi.kyotaro@lab.ntt.co.jp

src/interfaces/libpq/fe-connect.c

index 74e26edad66c83e7c933258c5e7b6fdd5df71115..eb5aaf70985c9506cb4c2f140c85baa09df89c81 100644 (file)
@@ -978,9 +978,18 @@ connectOptions2(PGconn *conn)
 
                for (i = 0; i < conn->nconnhost; i++)
                {
-                       /* Try to get a password for this host from pgpassfile */
+                       /*
+                        * Try to get a password for this host from pgpassfile. We use host
+                        * name rather than host address in the same manner to PQhost().
+                        */
+                       char *pwhost = conn->connhost[i].host;
+
+                       if (conn->connhost[i].type == CHT_HOST_ADDRESS &&
+                               conn->pghost != NULL && conn->pghost[0] != '\0')
+                               pwhost = conn->pghost;
+
                        conn->connhost[i].password =
-                               passwordFromFile(conn->connhost[i].host,
+                               passwordFromFile(pwhost,
                                                                 conn->connhost[i].port,
                                                                 conn->dbName,
                                                                 conn->pguser,