Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 681cca8

Browse files
committed
Blind attempt to fix SSPI-auth case in 010_dump_connstr.pl.
Up to now, pg_regress --config-auth had a hard-wired assumption that the target cluster uses the default bootstrap superuser name. pg_dump's 010_dump_connstr.pl TAP test uses non-default superuser names, and was klugily getting around the restriction by listing the desired superuser name as a role to "create". This is pretty confusing (or at least, it confused me). Let's make it clearer by allowing --config-auth mode to be told the bootstrap superuser name. Repurpose the existing --user switch for that, since it has no other function in --config-auth mode. Per buildfarm. I don't have an environment at hand in which I can test this fix, but the buildfarm should soon show if it works. Discussion: https://postgr.es/m/3142.1561840611@sss.pgh.pa.us
1 parent c91504b commit 681cca8

File tree

2 files changed

+33
-20
lines changed

2 files changed

+33
-20
lines changed

src/bin/pg_dump/t/010_dump_connstr.pl

+9-6
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@
5555
# prep pg_hba.conf and pg_ident.conf
5656
$node->run_log(
5757
[
58-
$ENV{PG_REGRESS}, '--config-auth',
59-
$node->data_dir, '--create-role',
58+
$ENV{PG_REGRESS}, '--config-auth',
59+
$node->data_dir, '--user',
60+
$src_bootstrap_super, '--create-role',
6061
"$username1,$username2,$username3,$username4"
6162
]);
6263
$node->start;
@@ -181,8 +182,9 @@
181182
$envar_node->run_log(
182183
[
183184
$ENV{PG_REGRESS}, '--config-auth',
184-
$envar_node->data_dir, '--create-role',
185-
"$dst_bootstrap_super,$restore_super"
185+
$envar_node->data_dir, '--user',
186+
$dst_bootstrap_super, '--create-role',
187+
$restore_super
186188
]);
187189
$envar_node->start;
188190

@@ -213,8 +215,9 @@
213215
$cmdline_node->run_log(
214216
[
215217
$ENV{PG_REGRESS}, '--config-auth',
216-
$cmdline_node->data_dir, '--create-role',
217-
"$dst_bootstrap_super,$restore_super"
218+
$cmdline_node->data_dir, '--user',
219+
$dst_bootstrap_super, '--create-role',
220+
$restore_super
218221
]);
219222
$cmdline_node->start;
220223
$cmdline_node->run_log(

src/test/regress/pg_regress.c

+24-14
Original file line numberDiff line numberDiff line change
@@ -965,13 +965,15 @@ current_windows_user(const char **acct, const char **dom)
965965
* Rewrite pg_hba.conf and pg_ident.conf to use SSPI authentication. Permit
966966
* the current OS user to authenticate as the bootstrap superuser and as any
967967
* user named in a --create-role option.
968+
*
969+
* In --config-auth mode, the --user switch can be used to specify the
970+
* bootstrap superuser's name, otherwise we assume it is the default.
968971
*/
969972
static void
970-
config_sspi_auth(const char *pgdata)
973+
config_sspi_auth(const char *pgdata, const char *superuser_name)
971974
{
972975
const char *accountname,
973976
*domainname;
974-
const char *username;
975977
char *errstr;
976978
bool have_ipv6;
977979
char fname[MAXPGPATH];
@@ -980,17 +982,25 @@ config_sspi_auth(const char *pgdata)
980982
*ident;
981983
_stringlist *sl;
982984

983-
/*
984-
* "username", the initdb-chosen bootstrap superuser name, may always
985-
* match "accountname", the value SSPI authentication discovers. The
986-
* underlying system functions do not clearly guarantee that.
987-
*/
985+
/* Find out the name of the current OS user */
988986
current_windows_user(&accountname, &domainname);
989-
username = get_user_name(&errstr);
990-
if (username == NULL)
987+
988+
/* Determine the bootstrap superuser's name */
989+
if (superuser_name == NULL)
991990
{
992-
fprintf(stderr, "%s: %s\n", progname, errstr);
993-
exit(2);
991+
/*
992+
* Compute the default superuser name the same way initdb does.
993+
*
994+
* It's possible that this result always matches "accountname", the
995+
* value SSPI authentication discovers. But the underlying system
996+
* functions do not clearly guarantee that.
997+
*/
998+
superuser_name = get_user_name(&errstr);
999+
if (superuser_name == NULL)
1000+
{
1001+
fprintf(stderr, "%s: %s\n", progname, errstr);
1002+
exit(2);
1003+
}
9941004
}
9951005

9961006
/*
@@ -1067,7 +1077,7 @@ config_sspi_auth(const char *pgdata)
10671077
* bother escaping embedded double-quote characters.
10681078
*/
10691079
CW(fprintf(ident, "regress \"%s@%s\" %s\n",
1070-
accountname, domainname, fmtHba(username)) >= 0);
1080+
accountname, domainname, fmtHba(superuser_name)) >= 0);
10711081
for (sl = extraroles; sl; sl = sl->next)
10721082
CW(fprintf(ident, "regress \"%s@%s\" %s\n",
10731083
accountname, domainname, fmtHba(sl->str)) >= 0);
@@ -2227,7 +2237,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
22272237
if (config_auth_datadir)
22282238
{
22292239
#ifdef ENABLE_SSPI
2230-
config_sspi_auth(config_auth_datadir);
2240+
config_sspi_auth(config_auth_datadir, user);
22312241
#endif
22322242
exit(0);
22332243
}
@@ -2354,7 +2364,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc
23542364
* "initdb" command, this can't truncate.
23552365
*/
23562366
snprintf(buf, sizeof(buf), "%s/data", temp_instance);
2357-
config_sspi_auth(buf);
2367+
config_sspi_auth(buf, NULL);
23582368
#elif !defined(HAVE_UNIX_SOCKETS)
23592369
#error Platform has no means to secure the test installation.
23602370
#endif

0 commit comments

Comments
 (0)