unknown libpq service entries ignored
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?
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
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;
}
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
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.