From 1944cdc98273dbb8439ad9b387ca2858531afcf0 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 27 Mar 2018 12:31:34 -0400 Subject: libpq: PQhost to return active connected host or hostaddr Previously, PQhost didn't return the connected host details when the connection type was CHT_HOST_ADDRESS (i.e., via hostaddr). Instead, it returned the complete host connection parameter (which could contain multiple hosts) or the default host details, which was confusing and arguably incorrect. Change this to return the actually connected host or hostaddr irrespective of the connection type. When hostaddr but no host was specified, hostaddr is now returned. Never return the original host connection parameter, and document that PQhost cannot be relied on before the connection is established. PQport is similarly changed to always return the active connection port and never the original connection parameter. Author: Hari Babu Reviewed-by: Michael Paquier Reviewed-by: Kyotaro HORIGUCHI Reviewed-by: David G. Johnston --- src/interfaces/libpq/fe-connect.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c index 39c19998c22..f3057e9d6f5 100644 --- a/src/interfaces/libpq/fe-connect.c +++ b/src/interfaces/libpq/fe-connect.c @@ -6017,19 +6017,18 @@ PQhost(const PGconn *conn) { if (!conn) return NULL; - if (conn->connhost != NULL && - conn->connhost[conn->whichhost].type != CHT_HOST_ADDRESS) - return conn->connhost[conn->whichhost].host; - else if (conn->pghost != NULL && conn->pghost[0] != '\0') - return conn->pghost; - else + + if (conn->connhost != NULL) { -#ifdef HAVE_UNIX_SOCKETS - return DEFAULT_PGSOCKET_DIR; -#else - return DefaultHost; -#endif + if (conn->connhost[conn->whichhost].host != NULL && + conn->connhost[conn->whichhost].host[0] != '\0') + return conn->connhost[conn->whichhost].host; + else if (conn->connhost[conn->whichhost].hostaddr != NULL && + conn->connhost[conn->whichhost].hostaddr[0] != '\0') + return conn->connhost[conn->whichhost].hostaddr; } + + return ""; } char * @@ -6037,9 +6036,11 @@ PQport(const PGconn *conn) { if (!conn) return NULL; + if (conn->connhost != NULL) return conn->connhost[conn->whichhost].port; - return conn->pgport; + + return ""; } char * -- cgit v1.2.3