reuse_password_for_vacuum_db_v2.patch
application/octet-stream
Filename: reuse_password_for_vacuum_db_v2.patch
Type: application/octet-stream
Part: 0
Patch
Format: context
Series: patch v2
| File | + | − |
|---|---|---|
| src/bin/scripts/clusterdb.c | 1 | 0 |
| src/bin/scripts/common.c | 14 | 0 |
| src/bin/scripts/common.h | 1 | 0 |
| src/bin/scripts/createlang.c | 2 | 0 |
| src/bin/scripts/createuser.c | 1 | 0 |
| src/bin/scripts/droplang.c | 2 | 0 |
| src/bin/scripts/dropuser.c | 1 | 0 |
| src/bin/scripts/reindexdb.c | 2 | 0 |
| src/bin/scripts/vacuumdb.c | 7 | 0 |
*** a/src/bin/scripts/clusterdb.c
--- b/src/bin/scripts/clusterdb.c
***************
*** 203,209 **** cluster_one_database(const char *dbname, bool verbose, const char *table,
appendPQExpBuffer(&sql, " %s", table);
appendPQExpBufferChar(&sql, ';');
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
if (!executeMaintenanceCommand(conn, sql.data, echo))
{
--- 203,209 ----
appendPQExpBuffer(&sql, " %s", table);
appendPQExpBufferChar(&sql, ';');
! conn = connectDatabase(dbname, host, port, username, NULL, prompt_password,
progname, false);
if (!executeMaintenanceCommand(conn, sql.data, echo))
{
*** a/src/bin/scripts/common.c
--- b/src/bin/scripts/common.c
***************
*** 54,70 **** handle_help_version_opts(int argc, char *argv[],
/*
* Make a database connection with the given parameters. An
* interactive password prompt is automatically issued if required.
*/
PGconn *
connectDatabase(const char *dbname, const char *pghost, const char *pgport,
! const char *pguser, enum trivalue prompt_password,
const char *progname, bool fail_ok)
{
PGconn *conn;
! char *password = NULL;
bool new_pass;
! if (prompt_password == TRI_YES)
password = simple_prompt("Password: ", 100, false);
/*
--- 54,71 ----
/*
* Make a database connection with the given parameters. An
* interactive password prompt is automatically issued if required.
+ * Caller has to free the password if the output returns a password.
*/
PGconn *
connectDatabase(const char *dbname, const char *pghost, const char *pgport,
! const char *pguser, char **saved_password, enum trivalue prompt_password,
const char *progname, bool fail_ok)
{
PGconn *conn;
! char *password = saved_password ? *saved_password : NULL;
bool new_pass;
! if (prompt_password == TRI_YES && password == NULL)
password = simple_prompt("Password: ", 100, false);
/*
***************
*** 116,122 **** connectDatabase(const char *dbname, const char *pghost, const char *pgport,
}
} while (new_pass);
! if (password)
free(password);
/* check to see that the backend connection was successfully made */
--- 117,129 ----
}
} while (new_pass);
! /*
! * save the password for future reference,
! * in case if caller requests it.
! */
! if (saved_password)
! *saved_password = password;
! else if (password)
free(password);
/* check to see that the backend connection was successfully made */
***************
*** 149,162 **** connectMaintenanceDatabase(const char *maintenance_db, const char *pghost,
/* If a maintenance database name was specified, just connect to it. */
if (maintenance_db)
return connectDatabase(maintenance_db, pghost, pgport, pguser,
! prompt_password, progname, false);
/* Otherwise, try postgres first and then template1. */
! conn = connectDatabase("postgres", pghost, pgport, pguser, prompt_password,
progname, true);
if (!conn)
conn = connectDatabase("template1", pghost, pgport, pguser,
! prompt_password, progname, false);
return conn;
}
--- 156,169 ----
/* If a maintenance database name was specified, just connect to it. */
if (maintenance_db)
return connectDatabase(maintenance_db, pghost, pgport, pguser,
! NULL, prompt_password, progname, false);
/* Otherwise, try postgres first and then template1. */
! conn = connectDatabase("postgres", pghost, pgport, pguser, NULL, prompt_password,
progname, true);
if (!conn)
conn = connectDatabase("template1", pghost, pgport, pguser,
! NULL, prompt_password, progname, false);
return conn;
}
*** a/src/bin/scripts/common.h
--- b/src/bin/scripts/common.h
***************
*** 30,36 **** extern void handle_help_version_opts(int argc, char *argv[],
help_handler hlp);
extern PGconn *connectDatabase(const char *dbname, const char *pghost,
! const char *pgport, const char *pguser,
enum trivalue prompt_password, const char *progname,
bool fail_ok);
--- 30,36 ----
help_handler hlp);
extern PGconn *connectDatabase(const char *dbname, const char *pghost,
! const char *pgport, const char *pguser, char **saved_password,
enum trivalue prompt_password, const char *progname,
bool fail_ok);
*** a/src/bin/scripts/createlang.c
--- b/src/bin/scripts/createlang.c
***************
*** 140,146 **** main(int argc, char *argv[])
printQueryOpt popt;
static const bool translate_columns[] = {false, true};
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", "
--- 140,146 ----
printQueryOpt popt;
static const bool translate_columns[] = {false, true};
! conn = connectDatabase(dbname, host, port, username, NULL, prompt_password,
progname, false);
printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", "
***************
*** 180,186 **** main(int argc, char *argv[])
if (*p >= 'A' && *p <= 'Z')
*p += ('a' - 'A');
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
/*
--- 180,186 ----
if (*p >= 'A' && *p <= 'Z')
*p += ('a' - 'A');
! conn = connectDatabase(dbname, host, port, username, NULL, prompt_password,
progname, false);
/*
*** a/src/bin/scripts/createuser.c
--- b/src/bin/scripts/createuser.c
***************
*** 250,256 **** main(int argc, char *argv[])
if (login == 0)
login = TRI_YES;
! conn = connectDatabase("postgres", host, port, username, prompt_password,
progname, false);
initPQExpBuffer(&sql);
--- 250,256 ----
if (login == 0)
login = TRI_YES;
! conn = connectDatabase("postgres", host, port, username, NULL, prompt_password,
progname, false);
initPQExpBuffer(&sql);
*** a/src/bin/scripts/droplang.c
--- b/src/bin/scripts/droplang.c
***************
*** 139,145 **** main(int argc, char *argv[])
printQueryOpt popt;
static const bool translate_columns[] = {false, true};
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", "
--- 139,145 ----
printQueryOpt popt;
static const bool translate_columns[] = {false, true};
! conn = connectDatabase(dbname, host, port, username, NULL, prompt_password,
progname, false);
printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", "
***************
*** 181,187 **** main(int argc, char *argv[])
if (*p >= 'A' && *p <= 'Z')
*p += ('a' - 'A');
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
/*
--- 181,187 ----
if (*p >= 'A' && *p <= 'Z')
*p += ('a' - 'A');
! conn = connectDatabase(dbname, host, port, username, NULL, prompt_password,
progname, false);
/*
*** a/src/bin/scripts/dropuser.c
--- b/src/bin/scripts/dropuser.c
***************
*** 128,134 **** main(int argc, char *argv[])
appendPQExpBuffer(&sql, "DROP ROLE %s%s;",
(if_exists ? "IF EXISTS " : ""), fmtId(dropuser));
! conn = connectDatabase("postgres", host, port, username, prompt_password,
progname, false);
if (echo)
--- 128,134 ----
appendPQExpBuffer(&sql, "DROP ROLE %s%s;",
(if_exists ? "IF EXISTS " : ""), fmtId(dropuser));
! conn = connectDatabase("postgres", host, port, username, NULL, prompt_password,
progname, false);
if (echo)
*** a/src/bin/scripts/reindexdb.c
--- b/src/bin/scripts/reindexdb.c
***************
*** 297,303 **** reindex_one_database(const char *name, const char *dbname, const char *type,
appendPQExpBuffer(&sql, " DATABASE %s", fmtId(name));
appendPQExpBufferChar(&sql, ';');
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
if (!executeMaintenanceCommand(conn, sql.data, echo))
--- 297,303 ----
appendPQExpBuffer(&sql, " DATABASE %s", fmtId(name));
appendPQExpBufferChar(&sql, ';');
! conn = connectDatabase(dbname, host, port, username, NULL, prompt_password,
progname, false);
if (!executeMaintenanceCommand(conn, sql.data, echo))
***************
*** 372,378 **** reindex_system_catalogs(const char *dbname, const char *host, const char *port,
appendPQExpBuffer(&sql, " SYSTEM %s;", dbname);
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
if (!executeMaintenanceCommand(conn, sql.data, echo))
{
--- 372,378 ----
appendPQExpBuffer(&sql, " SYSTEM %s;", dbname);
! conn = connectDatabase(dbname, host, port, username, NULL, prompt_password,
progname, false);
if (!executeMaintenanceCommand(conn, sql.data, echo))
{
*** a/src/bin/scripts/vacuumdb.c
--- b/src/bin/scripts/vacuumdb.c
***************
*** 341,346 **** vacuum_one_database(const char *dbname, vacuumingOptions *vacopts,
--- 341,347 ----
int i;
bool failed = false;
bool parallel = concurrentCons > 1;
+ char *saved_password = NULL;
const char *stage_commands[] = {
"SET default_statistics_target=1; SET vacuum_cost_delay=0;",
"SET default_statistics_target=10; RESET vacuum_cost_delay;",
***************
*** 365,371 **** vacuum_one_database(const char *dbname, vacuumingOptions *vacopts,
fflush(stdout);
}
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
initPQExpBuffer(&sql);
--- 366,372 ----
fflush(stdout);
}
! conn = connectDatabase(dbname, host, port, username, &saved_password, prompt_password,
progname, false);
initPQExpBuffer(&sql);
***************
*** 426,437 **** vacuum_one_database(const char *dbname, vacuumingOptions *vacopts,
{
for (i = 1; i < concurrentCons; i++)
{
! conn = connectDatabase(dbname, host, port, username, prompt_password,
progname, false);
init_slot(slots + i, conn);
}
}
/*
* Prepare all the connections to run the appropriate analyze stage, if
* caller requested that mode.
--- 427,442 ----
{
for (i = 1; i < concurrentCons; i++)
{
! conn = connectDatabase(dbname, host, port, username, &saved_password, prompt_password,
progname, false);
init_slot(slots + i, conn);
}
}
+ /* Free up the saved password after it's use */
+ if (saved_password)
+ free(saved_password);
+
/*
* Prepare all the connections to run the appropriate analyze stage, if
* caller requested that mode.