Skip to content

Instantly share code, notes, and snippets.

@davidfetter
Last active August 29, 2015 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidfetter/146b187eecfbc2538971 to your computer and use it in GitHub Desktop.
Save davidfetter/146b187eecfbc2538971 to your computer and use it in GitHub Desktop.
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index d6247c3..9c2020e 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1611,6 +1611,7 @@ do_connect(char *dbname, char *user, char *host, char *port)
*n_conn;
char *password = NULL;
bool keep_password = true;
+ bool recognized_connection_string = false;
if (!o_conn && (!dbname || !user || !host || !port))
{
@@ -1636,7 +1637,7 @@ do_connect(char *dbname, char *user, char *host, char *port)
if (!port)
port = PQport(o_conn);
- else if (strcmp(port, PQhost(o_conn)) != 0)
+ else if (strcmp(port, PQport(o_conn)) != 0)
keep_password = false;
/*
@@ -1646,6 +1647,11 @@ do_connect(char *dbname, char *user, char *host, char *port)
if (!dbname)
dbname = PQdb(o_conn);
+ recognized_connection_string = recognized_connection_string(dbname);
+
+ if (recognized_connection_string)
+ keep_password = false;
+
/*
* If the user asked to be prompted for a password, ask for one now. If
* not, use the password from the old connection, provided the username
@@ -1662,7 +1668,11 @@ do_connect(char *dbname, char *user, char *host, char *port)
}
else if (o_conn && keep_password)
{
- password = pg_strdup(PQpass(o_conn));
+ password = PQpass(o_conn);
+ if (password && *password)
+ password = pg_strdup(password);
+ else
+ password = NULL;
}
while (true)
@@ -1675,7 +1685,7 @@ do_connect(char *dbname, char *user, char *host, char *port)
keywords[0] = "dbname";
values[0] = dbname;
- if (!recognized_connection_string(dbname))
+ if (recognized_connection_string)
{
keywords[++paramnum] = "host";
values[paramnum] = host;
@@ -1683,9 +1693,9 @@ do_connect(char *dbname, char *user, char *host, char *port)
values[paramnum] = port;
keywords[++paramnum] = "user";
values[paramnum] = user;
- keywords[++paramnum] = "password";
- values[paramnum] = password;
}
+ keywords[++paramnum] = "password";
+ values[paramnum] = password;
keywords[++paramnum] = "fallback_application_name";
values[paramnum] = pset.progname;
keywords[++paramnum] = "client_encoding";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment