diff --git a/src/backend/libpq/auth-oauth.c b/src/backend/libpq/auth-oauth.c index b769931ca4f..fb830065fba 100644 --- a/src/backend/libpq/auth-oauth.c +++ b/src/backend/libpq/auth-oauth.c @@ -863,20 +863,8 @@ check_oauth_validator(HbaLine *hbaline, int elevel, char **err_msg) *err_msg = NULL; - if (oauth_validator_libraries_string[0] == '\0') - { - ereport(elevel, - errcode(ERRCODE_CONFIG_FILE_ERROR), - errmsg("parameter \"%s\" must be set for authentication method \"%s\"", - "oauth_validator_libraries", "oauth"), - errcontext("line %d of configuration file \"%s\"", - line_num, file_name)); - *err_msg = psprintf("parameter \"%s\" must be set for authentication method \"%s\"", - "oauth_validator_libraries", "oauth"); - return false; - } - /* SplitDirectoriesString needs a modifiable copy */ + Assert(oauth_validator_libraries_string != NULL); rawstring = pstrdup(oauth_validator_libraries_string); if (!SplitDirectoriesString(rawstring, ',', &elemlist)) @@ -891,6 +879,19 @@ check_oauth_validator(HbaLine *hbaline, int elevel, char **err_msg) goto done; } + if (elemlist == NIL) + { + ereport(elevel, + errcode(ERRCODE_CONFIG_FILE_ERROR), + errmsg("parameter \"%s\" must be set for authentication method \"%s\"", + "oauth_validator_libraries", "oauth"), + errcontext("line %d of configuration file \"%s\"", + line_num, file_name)); + *err_msg = psprintf("parameter \"%s\" must be set for authentication method \"%s\"", + "oauth_validator_libraries", "oauth"); + goto done; + } + if (!hbaline->oauth_validator) { if (elemlist->length == 1) diff --git a/src/test/modules/oauth_validator/t/001_server.pl b/src/test/modules/oauth_validator/t/001_server.pl index 8941a355423..fb76c69c1ca 100644 --- a/src/test/modules/oauth_validator/t/001_server.pl +++ b/src/test/modules/oauth_validator/t/001_server.pl @@ -134,6 +134,24 @@ is( $contents, 3|oauth|\{issuer=$issuer/param,"scope=openid postgres",validator=validator\}}, "pg_hba_file_rules recreates OAuth HBA settings"); +# An all-whitespace library list parses as an empty list. Reject it without +# crashing the postmaster during HBA reload. +$node->append_conf('postgresql.conf', "oauth_validator_libraries = ' '"); +$node->reload; +$log_start = $node->wait_for_log( + qr/parameter "oauth_validator_libraries" must be set for authentication/, + $log_start); +$bgconn->query_safe('SELECT 1'); + +$node->append_conf('postgresql.conf', + "oauth_validator_libraries = 'validator'"); +$node->reload; +$log_start = $node->wait_for_log( + qr/parameter "oauth_validator_libraries" changed to "validator"/, + $log_start); +is($bgconn->query_safe('SHOW oauth_validator_libraries'), + 'validator', 'oauth_validator_libraries restored'); + { # Make sure PGOAUTHDEBUG=UNSAFE doesn't disable certificate verification. local $ENV{PGOAUTHDEBUG} = "UNSAFE";