Re: BUG #10794: psql sometimes ignores .psqlrc

From: Stephen Frost <sfrost(at)snowman(dot)net>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Marko Tiikkaja <marko(at)joh(dot)to>, pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #10794: psql sometimes ignores .psqlrc
Date: 2014-07-16 02:05:14
Message-ID: 20140716020514.GU16422@tamriel.snowman.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

* Tom Lane (tgl(at)sss(dot)pgh(dot)pa(dot)us) wrote:
> Marko Tiikkaja <marko(at)joh(dot)to> writes:
> > On 6/28/14, 11:13 PM, marko(at)joh(dot)to wrote:
> >> If I press ctrl-C while psql is prompting for a password but then log in
> >> (either because I used -W and the server isn't expecting a password or if I
> >> subsequently typed in the correct password), .psqlrc isn't processed. This
> >> seems quite dangerous if the user is e.g. assuming a specific value for
> >> AUTOCOMMIT.
>
> > (seeing that back branch releases are upcoming..) Ping?
>
> I can reproduce that in 9.3, but not in 9.4/HEAD: now, if you control-C at
> the password prompt, the program just exits instantly. That's evidently a
> result of commit 9099e4afe, which postponed the installation of the SIGINT
> handler till after the password prompt. What is happening in the earlier
> branches is that the SIGINT handler is setting cancel_pressed, which
> doesn't affect collection of the password, but which the main loop then
> takes as an indication that you wanted to abandon processing of the script
> file (ie, .psqlrc).
>
> There's a bit of a race condition here, in that if you press control-C
> just *after* connection setup, it will still allow psql to start up after
> having not processed the .psqlrc file. I think though that we'd be ill
> advised to try to prevent that by postponing control-C setup even further;
> what if the .psqlrc file is broken and initiates some long-running
> operation?

This I agree with.

> So I'm satisfied with the behavior of HEAD in this area. There's a case
> to be made for back-patching commit 9099e4afe into older branches, but
> I'm not sure if that'd be a good idea or not. People might be depending
> on the old behavior.

I've not looked at this closely, but I have to say that I've always felt
that ignoring ctrl-c at the password prompt is really bad form- it's
confusing to those who don't understand what's going on and really
annoying for those who do.

While we're at it, we should fix the complaint about .psql_history being
missing.. This isn't an error, imv:

could not save history to file "/home/sfrost/.psql_history": No such file or directory

Not sure where we started doing that.

> A different line of thought would be to reset cancel_pressed before
> starting the processing of any script file, so that you actually have to
> press control-C *during* the processing of a file to cancel it. That's
> just narrowing the race condition window some more, but it might be
> worth doing.

Narrowing the window would probably be good to do, but I don't see a
need to back-patch that.

> In any case, I'm disinclined to mess with this in the back branches ...

If we have a simple/clean patch to fix the "Ctrl-C ignored at password
prompt", such that, instead, psql exits more-or-less immediately then
I'd be for back-patching just that as it certainly has always felt like
a wart or even a bug to me, but I agree that we don't want to introduce
other behavior changes beyond that in back-branches.

Thanks,

Stephen

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2014-07-16 02:29:04 Re: BUG #10794: psql sometimes ignores .psqlrc
Previous Message Tom Lane 2014-07-16 01:51:39 Re: BUG #10794: psql sometimes ignores .psqlrc