diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2007-12-11 02:08:59 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2007-12-11 02:08:59 +0000 |
commit | 5eb56611e3053c2d64f04eb9932a67d314647ecc (patch) | |
tree | 554acfbd80b95e9e7f57f8f8fd2e19719a68e0b3 | |
parent | 075e410205185f6f2d91a93223ae75edcc12c559 (diff) | |
download | postgresql-5eb56611e3053c2d64f04eb9932a67d314647ecc.tar.gz postgresql-5eb56611e3053c2d64f04eb9932a67d314647ecc.zip |
Make vacuumlo prompt for password when needed, thus making its -W
switch optional, as is the case for every other one of our programs.
I had already documented its -W as being optional, so this is bringing
the code into line with the docs ...
-rw-r--r-- | contrib/vacuumlo/vacuumlo.c | 54 |
1 files changed, 36 insertions, 18 deletions
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c index 763257267f8..5bfd378f8a0 100644 --- a/contrib/vacuumlo/vacuumlo.c +++ b/contrib/vacuumlo/vacuumlo.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/contrib/vacuumlo/vacuumlo.c,v 1.33 2007/01/05 22:19:18 momjian Exp $ + * $PostgreSQL: pgsql/contrib/vacuumlo/vacuumlo.c,v 1.34 2007/12/11 02:08:59 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -61,32 +61,50 @@ vacuumlo(char *database, struct _param * param) int matched; int deleted; int i; - char *password = NULL; + static char *password = NULL; + bool new_pass; - if (param->pg_prompt) + if (param->pg_prompt && password == NULL) + password = simple_prompt("Password: ", 100, false); + + /* + * Start the connection. Loop until we have a password if requested by + * backend. + */ + do { - password = simple_prompt("Password: ", 32, 0); - if (!password) + new_pass = false; + + conn = PQsetdbLogin(param->pg_host, + param->pg_port, + NULL, + NULL, + database, + param->pg_user, + password); + if (!conn) { - fprintf(stderr, "failed to get password\n"); - exit(1); + fprintf(stderr, "Connection to database \"%s\" failed\n", + database); + return -1; } - } - conn = PQsetdbLogin(param->pg_host, - param->pg_port, - NULL, - NULL, - database, - param->pg_user, - password - ); + if (PQstatus(conn) == CONNECTION_BAD && + PQconnectionNeedsPassword(conn) && + password == NULL && + !feof(stdin)) + { + PQfinish(conn); + password = simple_prompt("Password: ", 100, false); + new_pass = true; + } + } while (new_pass); /* check to see that the backend connection was successfully made */ if (PQstatus(conn) == CONNECTION_BAD) { - fprintf(stderr, "Connection to database '%s' failed:\n", database); - fprintf(stderr, "%s", PQerrorMessage(conn)); + fprintf(stderr, "Connection to database \"%s\" failed:\n%s", + database, PQerrorMessage(conn)); PQfinish(conn); return -1; } |