Thread: BUG #8586: Misleading fe_sendauth error message

BUG #8586: Misleading fe_sendauth error message

From
mle+tools@mega-nerd.com
Date:
The following bug has been logged on the website:

Bug reference:      8586
Logged by:          Erik de Castro Lopo
Email address:      mle+tools@mega-nerd.com
PostgreSQL version: 9.3.1
Operating system:   Debian GNU LInux
Description:

Running the command:


    PGPASSFILE=pgpass psql --no-password --username myname mydb
--command="\dt"


works fine if the port number in the pgpass file is correct, but if the port
number is incorrect the error message is:


    psql: fe_sendauth: no password supplied


which is highly misleading. Surely the error message should be "connection
refused" or some such?

Re: BUG #8586: Misleading fe_sendauth error message

From
Tom Lane
Date:
mle+tools@mega-nerd.com writes:
> Running the command:
>     PGPASSFILE=pgpass psql --no-password --username myname mydb
> --command="\dt"
> works fine if the port number in the pgpass file is correct, but if the port
> number is incorrect the error message is:
>     psql: fe_sendauth: no password supplied
> which is highly misleading. Surely the error message should be "connection
> refused" or some such?

I'm not sure how we could improve that.  If the port number in the
password file doesn't match the intended connection, that means the
entry doesn't apply to this connection.  We can hardly issue error
messages on the basis of the presence of unrelated entries in a
.pgpass file.  So what the code is seeing is that the server demanded
a password (or so I'd assume), and it did not have one to give.

            regards, tom lane

Re: BUG #8586: Misleading fe_sendauth error message

From
Erik de Castro Lopo
Date:
Tom Lane wrote:

> mle+tools@mega-nerd.com writes:
> > Running the command:
> >     PGPASSFILE=pgpass psql --no-password --username myname mydb
> > --command="\dt"
> > works fine if the port number in the pgpass file is correct, but if the port
> > number is incorrect the error message is:
> >     psql: fe_sendauth: no password supplied
> > which is highly misleading. Surely the error message should be "connection
> > refused" or some such?
>
> I'm not sure how we could improve that.  If the port number in the
> password file doesn't match the intended connection, that means the
> entry doesn't apply to this connection.  We can hardly issue error
> messages on the basis of the presence of unrelated entries in a
> .pgpass file.  So what the code is seeing is that the server demanded
> a password (or so I'd assume), and it did not have one to give.

I haven't read the code, but my guess is that psql does the following:

 a) Grabs the user and database name from command line.
 b) Looks up dbname in pgpassfile to get host and port number etc.
 c) Connects to host:port and uses supplied username/password.

When the connect fails in step c), the error should be "connection failed".

Is this not how it should work?

Erik
--
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/

Re: BUG #8586: Misleading fe_sendauth error message

From
Tom Lane
Date:
Erik de Castro Lopo <mle+tools@mega-nerd.com> writes:
> I haven't read the code, but my guess is that psql does the following:

>  a) Grabs the user and database name from command line.
>  b) Looks up dbname in pgpassfile to get host and port number etc.
>  c) Connects to host:port and uses supplied username/password.

No, you are mistaken.  The .pgpass file provides a password given
a user/dbname/host/port to be connected to.  It is not the source
of any data other than the password.

You might want to look into the "service file" feature, which does
allow various connection parameters to be provided from a single name.

http://www.postgresql.org/docs/9.3/static/libpq-pgservice.html

            regards, tom lane

Re: BUG #8586: Misleading fe_sendauth error message

From
Erik de Castro Lopo
Date:
Tom Lane wrote:

> Erik de Castro Lopo <mle+tools@mega-nerd.com> writes:
> > I haven't read the code, but my guess is that psql does the following:
>
> >  a) Grabs the user and database name from command line.
> >  b) Looks up dbname in pgpassfile to get host and port number etc.
> >  c) Connects to host:port and uses supplied username/password.
>
> No, you are mistaken.  The .pgpass file provides a password given
> a user/dbname/host/port to be connected to.  It is not the source
> of any data other than the password.
>
> You might want to look into the "service file" feature, which does
> allow various connection parameters to be provided from a single name.
>
> http://www.postgresql.org/docs/9.3/static/libpq-pgservice.html

Thanks, that looks like a better solution that the PGPASSFILE.

Cheers,
Erik
--
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/