Re: libpq should append auth failures, not overwrite - Mailing list pgsql-hackers

From Fabien COELHO
Subject Re: libpq should append auth failures, not overwrite
Date
Msg-id alpine.DEB.2.21.1808140032330.2727@lancre
Whole thread Raw
In response to Re: libpq should append auth failures, not overwrite  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: libpq should append auth failures, not overwrite
List pgsql-hackers
Hello Tom,

> The thing is that there are a *lot* of systems nowadays on which localhost
> maps to both ipv4 and ipv6, so that "host=localhost" would be enough to
> trigger the new behavior,

I think that people would survive having the ip spelled out on localhost 
errors when there are several ips associated to the name.

You could also create an exception for "localhost" if you see it as a 
large problem, but if someone redefined localhost somehow (I did that once 
by inadvertence), it would be nice to help and be explicit.

> and I think that would inevitably give rise to more complaints than 
> kudos.

Hmmm. I'm not sure about what the complaint could be in case of multiple 
ips. "Hey, I have a 'host' with multiple ips, and on errors you tell me 
which ip generated an issue, and I do not want to know, really".

> So I'm still of the opinion that we're better off with the 
> second patch's behavior as it stands.

This was a mere suggestion.

As a user, and as a support person for others on occasions, I like precise 
error messages which convey all relevant information. In this instance a 
key information is hidden, hence the proposal.

> Responding to your other points from upthread:
>
>> There are still 86 instances of "printfPQExpBuffer", which seems like a
>> lot. They are mostly OOM messages, but not only. This make checking the
>> patch quite cumbersome.
>> I'd rather there would be only one rule, and clear reset with a comment
>> when needded (eg "fe-lobj.c").
>
> Well, I did this for discussion's sake, but I don't really find the
> resulting changes in fe-lobj.c to be any sort of improvement. [...]

The improvement I see is that if there would not be single remaining 
printf, so it is easy to check that no case were forgotten in libpq, and 
for future changes that everywhere in libpq there is only one rule which 
is "append errors to expbuf", not "it depends on the file or function you 
are in, please look at it in detail".

>> It is unclear to me why the "printf" variant is used in 
>> "PQencryptPasswordConn" and "connectOptions2", it looks that you 
>> skipped these functions.
>
> I did because it seemed like unnecessary extra diff content, since
> we're expecting the error buffer to be initially empty anyway (for
> connectOptions2) or we'd just need an extra reset (for
> PQencryptPasswordConn).  In the attached I went ahead and made those
> changes, but again I'm unsure that it's really a net improvement.

Same as above: easier to check, one simple rule for all libpq errors.

>> I do not like the resulting output
>> server:
>> problem found
>>    more details
>> I'd rather have
>> server: problem found
>>    more details
>
> Done in the attached, although I'm concerned about the resulting effects
> for error message line length --- in my tests, lines that used to reliably
> fit in 80 columns don't anymore.  Again, I'm not really convinced this is
> an improvement.  It would absolutely *not* be an improvement if we tried
> to also shoehorn the server's IP address in there; that'd make the lines
> way too long, with way too much stuff before the important part.

I understand your concern about line length.

A possible compromise would be to newline *and* indent before "problem 
found". To avoid messy code, there could be an internal function to manage 
that, eg.

   appendErrorContext(...), for "server:"
   appendError(exbuf, fmt, ...) , for errors, which would indent the
     initial line by two spaces.

   server1:
     problem found
       details
   server2:
     problem found
       details

This would also give room for the ip on a 80-column server line.

The alternative is that the committer does as they want, which is also 
fine with me:-)

-- 
Fabien.


pgsql-hackers by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: proposal: schema private functions
Next
From: Andrew Dunstan
Date:
Subject: Re: [HACKERS] pgbench - allow to store select results into variables