unknown libpq service entries ignored

Started by Peter Eisentrautabout 16 years ago5 messages
#1Peter Eisentraut
peter_e@gmx.net

When using the "service" parameter in a libpq connection (e.g., psql
service=foo), and the service name is not defined in pg_service.conf,
then the setting is silently ignored and the connection proceeds with
whatever other settings and defaults apply. That does not look very
robust. Shouldn't there be an error when a specified service name does
not exist?

#2Albe Laurenz
laurenz.albe@wien.gv.at
In reply to: Peter Eisentraut (#1)
Re: unknown libpq service entries ignored

Peter Eisentraut wrote:

When using the "service" parameter in a libpq connection (e.g., psql
service=foo), and the service name is not defined in pg_service.conf,
then the setting is silently ignored and the connection proceeds with
whatever other settings and defaults apply. That does not look very
robust. Shouldn't there be an error when a specified service name does
not exist?

I agree. It leads to strange error messages at least (I didn't want
to connect to port 5432 on localhost?!?), and you could end up
connecting to a different database than you wanted without
noticing it.

Yours,
Laurenz Albe

#3Peter Eisentraut
peter_e@gmx.net
In reply to: Peter Eisentraut (#1)
1 attachment(s)
Re: unknown libpq service entries ignored

On tor, 2009-11-26 at 10:57 +0200, Peter Eisentraut wrote:

When using the "service" parameter in a libpq connection (e.g., psql
service=foo), and the service name is not defined in pg_service.conf,
then the setting is silently ignored and the connection proceeds with
whatever other settings and defaults apply. That does not look very
robust. Shouldn't there be an error when a specified service name does
not exist?

Possible patch for this issue.

Attachments:

service-file.patchtext/x-patch; charset=UTF-8; name=service-file.patchDownload
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 011ebab..b322f8d 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -3189,6 +3189,13 @@ parseServiceInfo(PQconninfoOption *options, PQExpBuffer errorMessage)
 		fclose(f);
 	}
 
+	if (!group_found)
+	{
+		printfPQExpBuffer(errorMessage,
+						  libpq_gettext("ERROR: service \"%s\" not found\n"), service);
+		return 3;
+	}
+
 	return 0;
 }
 
#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#3)
Re: unknown libpq service entries ignored

Peter Eisentraut <peter_e@gmx.net> writes:

+		printfPQExpBuffer(errorMessage,
+						  libpq_gettext("ERROR: service \"%s\" not found\n"), service);

Please make the message consistent with the rest of libpq. AFAICS none
of the other messages in that file use an ERROR: prefix.

regards, tom lane

#5Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#4)
Re: unknown libpq service entries ignored

On fre, 2009-11-27 at 10:22 -0500, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

+		printfPQExpBuffer(errorMessage,
+						  libpq_gettext("ERROR: service \"%s\" not found\n"), service);

Please make the message consistent with the rest of libpq. AFAICS none
of the other messages in that file use an ERROR: prefix.

Well, that style is used four times in that same function, but no where
else in the file. So the existing uses should probably also be cleaned
up.