summaryrefslogtreecommitdiff
path: root/src/bin/pg_dump/pg_backup_db.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_dump/pg_backup_db.c')
-rw-r--r--src/bin/pg_dump/pg_backup_db.c56
1 files changed, 23 insertions, 33 deletions
diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c
index aeb34989e8..5f8039e982 100644
--- a/src/bin/pg_dump/pg_backup_db.c
+++ b/src/bin/pg_dump/pg_backup_db.c
@@ -5,7 +5,7 @@
* Implements the basic DB functions used by the archiver.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.75 2006/10/04 00:30:05 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.76 2007/07/08 19:07:38 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -123,13 +123,11 @@ ReconnectToServer(ArchiveHandle *AH, const char *dbname, const char *username)
static PGconn *
_connectDB(ArchiveHandle *AH, const char *reqdb, const char *requser)
{
- int need_pass;
PGconn *newConn;
- char *password = NULL;
- int badPwd = 0;
- int noPwd = 0;
char *newdb;
char *newuser;
+ char *password = NULL;
+ bool new_pass;
if (!reqdb)
newdb = PQdb(AH->connection);
@@ -152,7 +150,7 @@ _connectDB(ArchiveHandle *AH, const char *reqdb, const char *requser)
do
{
- need_pass = false;
+ new_pass = false;
newConn = PQsetdbLogin(PQhost(AH->connection), PQport(AH->connection),
NULL, NULL, newdb,
newuser, password);
@@ -161,30 +159,23 @@ _connectDB(ArchiveHandle *AH, const char *reqdb, const char *requser)
if (PQstatus(newConn) == CONNECTION_BAD)
{
- noPwd = (strcmp(PQerrorMessage(newConn),
- PQnoPasswordSupplied) == 0);
- badPwd = (strncmp(PQerrorMessage(newConn),
- "Password authentication failed for user", 39) == 0);
-
- if (noPwd || badPwd)
- {
- if (badPwd)
- fprintf(stderr, "Password incorrect\n");
-
- fprintf(stderr, "Connecting to %s as %s\n",
- newdb, newuser);
-
- need_pass = true;
- if (password)
- free(password);
- password = simple_prompt("Password: ", 100, false);
- }
- else
+ if (!PQconnectionUsedPassword(newConn))
die_horribly(AH, modulename, "could not reconnect to database: %s",
PQerrorMessage(newConn));
PQfinish(newConn);
+
+ if (password)
+ fprintf(stderr, "Password incorrect\n");
+
+ fprintf(stderr, "Connecting to %s as %s\n",
+ newdb, newuser);
+
+ if (password)
+ free(password);
+ password = simple_prompt("Password: ", 100, false);
+ new_pass = true;
}
- } while (need_pass);
+ } while (new_pass);
if (password)
free(password);
@@ -214,7 +205,7 @@ ConnectDatabase(Archive *AHX,
{
ArchiveHandle *AH = (ArchiveHandle *) AHX;
char *password = NULL;
- bool need_pass = false;
+ bool new_pass;
if (AH->connection)
die_horribly(AH, modulename, "already connected to a database\n");
@@ -235,7 +226,7 @@ ConnectDatabase(Archive *AHX,
*/
do
{
- need_pass = false;
+ new_pass = false;
AH->connection = PQsetdbLogin(pghost, pgport, NULL, NULL,
dbname, username, password);
@@ -243,16 +234,15 @@ ConnectDatabase(Archive *AHX,
die_horribly(AH, modulename, "failed to connect to database\n");
if (PQstatus(AH->connection) == CONNECTION_BAD &&
- strcmp(PQerrorMessage(AH->connection), PQnoPasswordSupplied) == 0 &&
+ PQconnectionUsedPassword(AH->connection) &&
+ password == NULL &&
!feof(stdin))
{
PQfinish(AH->connection);
- need_pass = true;
- free(password);
- password = NULL;
password = simple_prompt("Password: ", 100, false);
+ new_pass = true;
}
- } while (need_pass);
+ } while (new_pass);
if (password)
free(password);