the attached patch makes initdb -U username work as advertised.

Barring objection I will apply it to head and backpatch to 8.0 and 8.1 branches.

I guess nobody uses this much, or we'd surely have had reports of breakage long before now.

cheers

andrew
Index: src/bin/initdb/initdb.c
===================================================================
RCS file: /cvsroot/pgsql/src/bin/initdb/initdb.c,v
retrieving revision 1.110
diff -c -r1.110 initdb.c
*** src/bin/initdb/initdb.c	18 Feb 2006 16:15:23 -0000	1.110
--- src/bin/initdb/initdb.c	23 Feb 2006 17:12:40 -0000
***************
*** 113,119 ****
  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];
--- 113,118 ----
***************
*** 1385,1391 ****
  		exit_nicely();
  	}
  
! 	bki_lines = replace_token(bki_lines, "POSTGRES", effective_user);
  
  	bki_lines = replace_token(bki_lines, "ENCODING", encodingid);
  
--- 1384,1390 ----
  		exit_nicely();
  	}
  
! 	bki_lines = replace_token(bki_lines, "POSTGRES", username);
  
  	bki_lines = replace_token(bki_lines, "ENCODING", encodingid);
  
***************
*** 1547,1553 ****
  	PG_CMD_OPEN;
  
  	PG_CMD_PRINTF2("ALTER USER \"%s\" WITH PASSWORD '%s';\n",
! 				   effective_user, pwd1);
  
  	PG_CMD_CLOSE;
  
--- 1546,1552 ----
  	PG_CMD_OPEN;
  
  	PG_CMD_PRINTF2("ALTER USER \"%s\" WITH PASSWORD '%s';\n",
! 				   username, pwd1);
  
  	PG_CMD_CLOSE;
  
***************
*** 1866,1872 ****
  	PG_CMD_OPEN;
  
  	priv_lines = replace_token(privileges_setup,
! 							   "$POSTGRES_SUPERUSERNAME", effective_user);
  	for (line = priv_lines; *line != NULL; line++)
  		PG_CMD_PUTS(*line);
  
--- 1865,1871 ----
  	PG_CMD_OPEN;
  
  	priv_lines = replace_token(privileges_setup,
! 							   "$POSTGRES_SUPERUSERNAME", username);
  	for (line = priv_lines; *line != NULL; line++)
  		PG_CMD_PUTS(*line);
  
***************
*** 2446,2451 ****
--- 2445,2451 ----
  				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,2744 ****
  		exit(1);
  	}
  
! 	if (strlen(username))
! 		effective_user = username;
! 	else
! 		effective_user = get_id();
  
  	if (strlen(encoding))
  		encodingid = get_encoding_id(encoding);
--- 2735,2744 ----
  		exit(1);
  	}
  
! 	effective_user = get_id();
! 	if (strlen(username) == 0)
! 		username = effective_user;
! 
  
  	if (strlen(encoding))
  		encodingid = get_encoding_id(encoding);
***************
*** 2767,2773 ****
  				"PG_HBA_SAMPLE=%s\nPG_IDENT_SAMPLE=%s\n",
  				PG_VERSION,
  				pg_data, share_path, bin_path,
! 				effective_user, bki_file,
  				desc_file, shdesc_file,
  				conf_file,
  				hba_file, ident_file);
--- 2767,2773 ----
  				"PG_HBA_SAMPLE=%s\nPG_IDENT_SAMPLE=%s\n",
  				PG_VERSION,
  				pg_data, share_path, bin_path,
! 				username, bki_file,
  				desc_file, shdesc_file,
  				conf_file,
  				hba_file, ident_file);
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to