Re: Improving psql's \password command

Nathan Bossart <bossartn@amazon.com>

From: "Bossart, Nathan" <bossartn@amazon.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>
Date: 2021-11-19T23:03:26Z
Lists: pgsql-hackers

Attachments

On 11/19/21, 9:17 AM, "Tom Lane" <tgl@sss.pgh.pa.us> wrote:
> "Bossart, Nathan" <bossartn@amazon.com> writes:
>> Okay, here is an attempt at adding control-C support for \prompt and
>> \connect.  It was reasonably straightforward.  I did have to teach
>> simple_prompt_extended() to add a newline after a cancellation when
>> "echo" is true.
>
> LGTM, pushed after very minor fooling with the comments.

Thanks!

>> I think that's it for psql.  After a quick glance, I didn't see any
>> other obvious candidates for control-C support, but I'll look a little
>> closer to be sure.
>
> Hmm, initdb's prompt-for-superuser-password might need it.
> I think the rest of our frontend programs don't trap SIGINT,
> or at least don't do so while requesting user input.

I'm able to cancel the superuser password prompt in initdb already.
It looks like the signal handlers aren't set up until after
get_su_pwd().  I did find some missing control-C handling in
pg_receivewal/pg_recvlogical, though.  Attached is a patch for those.

Nathan

Commits

  1. pg_receivewal, pg_recvlogical: allow canceling initial password prompt.

  2. Allow psql's other uses of simple_prompt() to be interrupted by ^C.

  3. Provide a variant of simple_prompt() that can be interrupted by ^C.

  4. Make psql's \password default to CURRENT_USER, not PQuser(conn).