public inbox for [email protected]  
help / color / mirror / Atom feed
From: Jianghua Yang <[email protected]>
To: Dagfinn Ilmari Mannsåker <[email protected]>
Cc: [email protected]
Cc: Robert Treat <[email protected]>
Cc: David G. Johnston <[email protected]>
Cc: [email protected]
Subject: Re: [PATCH] initdb: Treat empty -U argument as unset username
Date: Wed, 2 Jul 2025 07:17:28 -0700
Message-ID: <CAAZLFmRX6ekqhUy+zjEzugnS=hGjoU359atjCZC3yxnFRZ6c6g@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>
References: <CAAZLFmRK+XFp=mqCeruyNVkqGq5mH45CP+e-8oNttPRtLuB5eQ@mail.gmail.com>
	<CAKFQuwbVK=oANp9XLdQknd7o9jJOUFQanUtG3QAh-3kuaM5tJw@mail.gmail.com>
	<CAAZLFmSKrcovMSauueWg=8VdZN-fHPH2ZengZRKA8AfgST6o6w@mail.gmail.com>
	<CAKFQuwaCPkb8=2_V3121Ei0MBrg02FLRNQbcAcyzCO3dAha=Gw@mail.gmail.com>
	<CABV9wwOOpOijL9sY03KV3WNvgMxVFsyfvfYbfy2MYfn40z0yyQ@mail.gmail.com>
	<[email protected]>
	<CAAZLFmSY_s6TOsiTwjzqrc2Y4uShATuWcEEN8O8cdtpkS=zfLg@mail.gmail.com>
	<[email protected]>

Thanks for the feedback!

I've updated the test to use `command_fails_like()` instead of
`command_fails()`, so it now asserts that the error message matches the
expected stderr output.
I also changed the test invocation to use the `-U => ''` syntax for
consistency, as seen in the adjacent `--username` test.


Let me know if any further adjustments are needed.

Best regards,
Jianghua Yang

Dagfinn Ilmari Mannsåker <[email protected]> 于2025年7月2日周三 07:09写道:

> Jianghua Yang <[email protected]> writes:
>
> > - A regression test is added to `src/bin/initdb/t/001_initdb.pl` to
> verify
> > that the case `initdb -U ''` fails as expected.
> [ ... ]
> > diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/
> 001_initdb.pl
> > index 15dd10ce40a..67eb53064f6 100644
> > --- a/src/bin/initdb/t/001_initdb.pl
> > +++ b/src/bin/initdb/t/001_initdb.pl
> > @@ -37,6 +37,10 @@ command_fails(
> >  command_fails([ 'initdb', '--username' => 'pg_test', $datadir ],
> >       'role names cannot begin with "pg_"');
> >
> > +command_fails(
> > +     [ 'initdb', '-U', '', $datadir ],
> > +     'empty username not allowed');
> > +
>
> This only tests that it fails, not that it fails as expected.  It should
> use command_fails_like() to check that stderr contains the expected
> error.  Also, it shoud use => between the -U option and its argument, as
> seen in the above test with --username.
>
> - ilmari
>


Attachments:

  [application/octet-stream] 0001-initdb-Reject-empty-string-for-U-username-option-v3.patch (1.7K, 3-0001-initdb-Reject-empty-string-for-U-username-option-v3.patch)
  download | inline diff:
From 58cbbf1812022ead2bdab4a313b230624f97e7b0 Mon Sep 17 00:00:00 2001
From: Jianghua Yang <[email protected]>
Date: Wed, 2 Jul 2025 06:48:48 -0700
Subject: [PATCH] initdb: Reject empty string for -U/--username option v3

Previously, passing an empty string to the -U or --username option
(e.g., `initdb -U ''`) would cause confusing errors during bootstrap,
as initdb attempted to create a role with an empty name.

This patch adds an explicit check for empty usernames and exits
immediately with a clear error message.

A test case is added to verify that initdb fails when -U is given an
empty string.
---
 src/bin/initdb/initdb.c        | 2 ++
 src/bin/initdb/t/001_initdb.pl | 7 +++++++
 2 files changed, 9 insertions(+)

diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 62bbd08d9f6..ad5675fd120 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -3291,6 +3291,8 @@ main(int argc, char *argv[])
 				pwprompt = true;
 				break;
 			case 'U':
+				if (optarg[0] == '\0')
+					pg_fatal("superuser name must not be empty.");
 				username = pg_strdup(optarg);
 				break;
 			case 'd':
diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl
index b7ef7ed8d06..0109925af85 100644
--- a/src/bin/initdb/t/001_initdb.pl
+++ b/src/bin/initdb/t/001_initdb.pl
@@ -37,6 +37,13 @@ command_fails(
 command_fails([ 'initdb', '--username' => 'pg_test', $datadir ],
 	'role names cannot begin with "pg_"');
 
+command_fails_like(
+	[ 'initdb', '--username' => '', $datadir ],
+	qr/superuser name must not be empty./,
+	'empty username not allowed');
+
+
+
 mkdir $datadir;
 
 # make sure we run one successful test without a TZ setting so we test
-- 
2.39.5 (Apple Git-154)



view thread (16+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]
  Subject: Re: [PATCH] initdb: Treat empty -U argument as unset username
  In-Reply-To: <CAAZLFmRX6ekqhUy+zjEzugnS=hGjoU359atjCZC3yxnFRZ6c6g@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox