Thread: BUG #8586: Misleading fe_sendauth error message
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?
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
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/
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
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/