diff options
author | Noah Misch <noah@leadboat.com> | 2014-11-29 12:31:43 -0500 |
---|---|---|
committer | Noah Misch <noah@leadboat.com> | 2014-11-29 12:34:14 -0500 |
commit | 36e52479852ee3343b901c1744faa690f5fac242 (patch) | |
tree | 6213a7b1d53e05e39ac504cba15394aa48565eeb /src | |
parent | 27b6f9ce7b12f82599f95f296abe7bb8942a6041 (diff) | |
download | postgresql-36e52479852ee3343b901c1744faa690f5fac242.tar.gz postgresql-36e52479852ee3343b901c1744faa690f5fac242.zip |
Reimplement 9f80f4835a55a1cbffcda5d23a617917f3286c14 with PQconninfo().
Apart from ignoring "hostaddr" set to the empty string, this behaves
identically to its predecessor. Back-patch to 9.4, where the original
commit first appeared.
Reviewed by Fujii Masao.
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/psql/command.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 58052876d69..39bd3617b94 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -302,14 +302,33 @@ exec_command(const char *cmd, else if (strcmp(cmd, "conninfo") == 0) { char *db = PQdb(pset.db); - char *host = PQhost(pset.db); if (db == NULL) printf(_("You are currently not connected to a database.\n")); else { + char *host; + PQconninfoOption *connOptions; + PQconninfoOption *option; + + host = PQhost(pset.db); if (host == NULL) host = DEFAULT_PGSOCKET_DIR; + /* A usable "hostaddr" overrides the basic sense of host. */ + connOptions = PQconninfo(pset.db); + if (connOptions == NULL) + { + psql_error("out of memory\n"); + exit(EXIT_FAILURE); + } + for (option = connOptions; option && option->keyword; option++) + if (strcmp(option->keyword, "hostaddr") == 0) + { + if (option->val != NULL && option->val[0] != '\0') + host = option->val; + break; + } + /* If the host is an absolute path, the connection is via socket */ if (is_absolute_path(host)) printf(_("You are connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n"), @@ -318,6 +337,8 @@ exec_command(const char *cmd, printf(_("You are connected to database \"%s\" as user \"%s\" on host \"%s\" at port \"%s\".\n"), db, PQuser(pset.db), host, PQport(pset.db)); printSSLInfo(); + + PQconninfoFree(connOptions); } } |