aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/initdb/initdb.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index aad6ba5639f..54d338d013f 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -135,6 +135,7 @@ static const char *default_text_search_config = "";
static char *username = "";
static bool pwprompt = false;
static char *pwfilename = NULL;
+static char *superuser_password = NULL;
static const char *authmethodhost = "";
static const char *authmethodlocal = "";
static bool debug = false;
@@ -255,7 +256,7 @@ static void test_config_settings(void);
static void setup_config(void);
static void bootstrap_template1(void);
static void setup_auth(FILE *cmdfd);
-static void get_set_pwd(FILE *cmdfd);
+static void get_su_pwd(void);
static void setup_depend(FILE *cmdfd);
static void setup_sysviews(FILE *cmdfd);
static void setup_description(FILE *cmdfd);
@@ -1544,13 +1545,17 @@ setup_auth(FILE *cmdfd)
for (line = pg_authid_setup; *line != NULL; line++)
PG_CMD_PUTS(*line);
+
+ if (superuser_password)
+ PG_CMD_PRINTF2("ALTER USER \"%s\" WITH PASSWORD E'%s';\n\n",
+ username, escape_quotes(superuser_password));
}
/*
- * get the superuser password if required, and call postgres to set it
+ * get the superuser password if required
*/
static void
-get_set_pwd(FILE *cmdfd)
+get_su_pwd(void)
{
char *pwd1,
*pwd2;
@@ -1560,6 +1565,8 @@ get_set_pwd(FILE *cmdfd)
/*
* Read password from terminal
*/
+ printf("\n");
+ fflush(stdout);
pwd1 = simple_prompt("Enter new superuser password: ", 100, false);
pwd2 = simple_prompt("Enter it again: ", 100, false);
if (strcmp(pwd1, pwd2) != 0)
@@ -1609,10 +1616,7 @@ get_set_pwd(FILE *cmdfd)
}
- PG_CMD_PRINTF2("ALTER USER \"%s\" WITH PASSWORD E'%s';\n\n",
- username, escape_quotes(pwd1));
-
- free(pwd1);
+ superuser_password = pwd1;
}
/*
@@ -3279,8 +3283,6 @@ initialize_data_directory(void)
PG_CMD_OPEN;
setup_auth(cmdfd);
- if (pwprompt || pwfilename)
- get_set_pwd(cmdfd);
setup_depend(cmdfd);
@@ -3569,6 +3571,9 @@ main(int argc, char *argv[])
else
printf(_("Data page checksums are disabled.\n"));
+ if (pwprompt || pwfilename)
+ get_su_pwd();
+
printf("\n");
initialize_data_directory();