From b5fe16d09fdc7f6135c2d788deb637fe81e90bf7 Mon Sep 17 00:00:00 2001
From: Andrew Dunstan <andrew@dunslane.net>
Date: Fri, 24 Feb 2006 00:55:49 +0000
Subject: [PATCH] make initdb -U username work as advertised; back out bogus
 patch at rev 1.42 and supply real fix for problem it tried to address.

---
 src/bin/initdb/initdb.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 9b35151640c..460aa3d5ee0 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -42,7 +42,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  * Portions taken from FreeBSD.
  *
- * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.110 2006/02/18 16:15:23 petere Exp $
+ * $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.111 2006/02/24 00:55:49 adunstan Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -113,7 +113,6 @@ static char *conversion_file;
 static char *info_schema_file;
 static char *features_file;
 static char *system_views_file;
-static char *effective_user;
 static bool made_new_pgdata = false;
 static bool found_existing_pgdata = false;
 static char infoversion[100];
@@ -1385,7 +1384,7 @@ bootstrap_template1(char *short_version)
 		exit_nicely();
 	}
 
-	bki_lines = replace_token(bki_lines, "POSTGRES", effective_user);
+	bki_lines = replace_token(bki_lines, "POSTGRES", username);
 
 	bki_lines = replace_token(bki_lines, "ENCODING", encodingid);
 
@@ -1547,7 +1546,7 @@ get_set_pwd(void)
 	PG_CMD_OPEN;
 
 	PG_CMD_PRINTF2("ALTER USER \"%s\" WITH PASSWORD '%s';\n",
-				   effective_user, pwd1);
+				   username, pwd1);
 
 	PG_CMD_CLOSE;
 
@@ -1866,7 +1865,7 @@ setup_privileges(void)
 	PG_CMD_OPEN;
 
 	priv_lines = replace_token(privileges_setup,
-							   "$POSTGRES_SUPERUSERNAME", effective_user);
+							   "$POSTGRES_SUPERUSERNAME", username);
 	for (line = priv_lines; *line != NULL; line++)
 		PG_CMD_PUTS(*line);
 
@@ -2446,6 +2445,7 @@ main(int argc, char *argv[])
 				ret;
 	int			option_index;
 	char	   *short_version;
+    char       *effective_user;
 	char	   *pgdenv;			/* PGDATA value gotten from and sent to
 								 * environment */
 	char		bin_dir[MAXPGPATH];
@@ -2735,10 +2735,10 @@ main(int argc, char *argv[])
 		exit(1);
 	}
 
-	if (strlen(username))
-		effective_user = username;
-	else
-		effective_user = get_id();
+	effective_user = get_id();
+	if (strlen(username) == 0)
+		username = effective_user;
+
 
 	if (strlen(encoding))
 		encodingid = get_encoding_id(encoding);
@@ -2767,7 +2767,7 @@ main(int argc, char *argv[])
 				"PG_HBA_SAMPLE=%s\nPG_IDENT_SAMPLE=%s\n",
 				PG_VERSION,
 				pg_data, share_path, bin_path,
-				effective_user, bki_file,
+				username, bki_file,
 				desc_file, shdesc_file,
 				conf_file,
 				hba_file, ident_file);
-- 
GitLab