diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2015-11-27 14:13:53 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2015-11-27 14:13:53 -0500 |
commit | 40cb21f70b4ef2721c38be6628298fb21fa7d2d2 (patch) | |
tree | 23f6cd0c7e96c9cde87942ca74e1e8dfed307e66 /src/bin/psql/command.c | |
parent | 92e38182d7c8947a4ebbc1123b44f1245e232e85 (diff) | |
download | postgresql-40cb21f70b4ef2721c38be6628298fb21fa7d2d2.tar.gz postgresql-40cb21f70b4ef2721c38be6628298fb21fa7d2d2.zip |
Improve PQhost() to return useful data for default Unix-socket connections.
Previously, if no host information had been specified at connection time,
PQhost() would return NULL (unless you are on Windows, in which case you
got "localhost"). This is an unhelpful definition for a couple of reasons:
it can cause corner-case crashes in applications (cf commit c5ef8ce53d),
and there's no well-defined way for applications to find out the socket
directory path that's actually in use. As an example of the latter
problem, psql substituted DEFAULT_PGSOCKET_DIR for NULL in a couple of
places, but this is subtly wrong because it's conceivable that psql is
using a libpq shared library that was built with a different setting.
Hence, change PQhost() to return DEFAULT_PGSOCKET_DIR when appropriate,
and strip out the now-dead substitutions in psql. (There is still one
remaining reference to DEFAULT_PGSOCKET_DIR in psql, in prompt.c, which
I don't see a nice way to get rid of. But it only controls a prompt
abbreviation decision, so it seems noncritical.)
Also update the docs for PQhost, which had never previously mentioned
the possibility of a socket directory path being returned. In passing
fix the outright-incorrect code comment about PGconn.pgunixsocket.
Diffstat (limited to 'src/bin/psql/command.c')
-rw-r--r-- | src/bin/psql/command.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index 3a82e37401c..438a4ec8ea2 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -322,8 +322,6 @@ exec_command(const char *cmd, 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) @@ -1750,16 +1748,14 @@ do_connect(char *dbname, char *user, char *host, char *port) /* * Any change in the parameters read above makes us discard the password. * We also discard it if we're to use a conninfo rather than the - * positional syntax. Note that currently, PQhost() can return NULL for a - * default Unix-socket connection, so we have to allow NULL for host. + * positional syntax. */ if (has_connection_string) keep_password = false; else keep_password = (user && PQuser(o_conn) && strcmp(user, PQuser(o_conn)) == 0) && - ((host && PQhost(o_conn) && strcmp(host, PQhost(o_conn)) == 0) || - (host == NULL && PQhost(o_conn) == NULL)) && + (host && PQhost(o_conn) && strcmp(host, PQhost(o_conn)) == 0) && (port && PQport(o_conn) && strcmp(port, PQport(o_conn)) == 0); /* @@ -1890,8 +1886,6 @@ do_connect(char *dbname, char *user, char *host, char *port) { char *host = PQhost(pset.db); - if (host == NULL) - host = DEFAULT_PGSOCKET_DIR; /* If the host is an absolute path, the connection is via socket */ if (is_absolute_path(host)) printf(_("You are now connected to database \"%s\" as user \"%s\" via socket in \"%s\" at port \"%s\".\n"), |