mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
libpq: change PQconndefaults() to ignore invalid service files
Previously missing or invalid service files returned NULL. Also fix pg_upgrade to report "out of memory" for a null return from PQconndefaults(). Patch by Steve Singer, rewritten by me
This commit is contained in:
@ -875,7 +875,8 @@ PQconndefaults(void)
|
||||
connOptions = conninfo_init(&errorBuf);
|
||||
if (connOptions != NULL)
|
||||
{
|
||||
if (!conninfo_add_defaults(connOptions, &errorBuf))
|
||||
/* pass NULL errorBuf to ignore errors */
|
||||
if (!conninfo_add_defaults(connOptions, NULL))
|
||||
{
|
||||
PQconninfoFree(connOptions);
|
||||
connOptions = NULL;
|
||||
@ -4412,9 +4413,10 @@ conninfo_array_parse(const char *const * keywords, const char *const * values,
|
||||
*
|
||||
* Defaults are obtained from a service file, environment variables, etc.
|
||||
*
|
||||
* Returns TRUE if successful, otherwise FALSE; errorMessage is filled in
|
||||
* upon failure. Note that failure to locate a default value is not an
|
||||
* error condition here --- we just leave the option's value as NULL.
|
||||
* Returns TRUE if successful, otherwise FALSE; errorMessage, if supplied,
|
||||
* is filled in upon failure. Note that failure to locate a default value
|
||||
* is not an error condition here --- we just leave the option's value as
|
||||
* NULL.
|
||||
*/
|
||||
static bool
|
||||
conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage)
|
||||
@ -4424,9 +4426,10 @@ conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage)
|
||||
|
||||
/*
|
||||
* If there's a service spec, use it to obtain any not-explicitly-given
|
||||
* parameters.
|
||||
* parameters. Ignore error if no error message buffer is passed
|
||||
* because there is no way to pass back the failure message.
|
||||
*/
|
||||
if (parseServiceInfo(options, errorMessage) != 0)
|
||||
if (parseServiceInfo(options, errorMessage) != 0 && errorMessage)
|
||||
return false;
|
||||
|
||||
/*
|
||||
@ -4448,8 +4451,9 @@ conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage)
|
||||
option->val = strdup(tmp);
|
||||
if (!option->val)
|
||||
{
|
||||
printfPQExpBuffer(errorMessage,
|
||||
libpq_gettext("out of memory\n"));
|
||||
if (errorMessage)
|
||||
printfPQExpBuffer(errorMessage,
|
||||
libpq_gettext("out of memory\n"));
|
||||
return false;
|
||||
}
|
||||
continue;
|
||||
@ -4465,8 +4469,9 @@ conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage)
|
||||
option->val = strdup(option->compiled);
|
||||
if (!option->val)
|
||||
{
|
||||
printfPQExpBuffer(errorMessage,
|
||||
libpq_gettext("out of memory\n"));
|
||||
if (errorMessage)
|
||||
printfPQExpBuffer(errorMessage,
|
||||
libpq_gettext("out of memory\n"));
|
||||
return false;
|
||||
}
|
||||
continue;
|
||||
@ -4477,7 +4482,7 @@ conninfo_add_defaults(PQconninfoOption *options, PQExpBuffer errorMessage)
|
||||
*/
|
||||
if (strcmp(option->keyword, "user") == 0)
|
||||
{
|
||||
option->val = pg_fe_getauthname(errorMessage);
|
||||
option->val = pg_fe_getauthname();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user