postgres_fdw, dblink: Validate use_scram_passthrough values

The use_scram_passthrough option in postgres_fdw and dblink accepts
only boolean values. However, unlike other boolean options such as
keep_connections, its value was not previously validated.

As a result, commands such as
"CREATE SERVER ... OPTIONS (use_scram_passthrough 'invalid')"
could succeed unexpectedly.

This commit updates postgres_fdw and dblink to validate that
use_scram_passthrough is assigned a valid boolean value, and throw an
error for invalid input.

Backpatch to v18, where use_scram_passthrough was introduced.

Author: Fujii Masao <masao.fujii@gmail.com>
Reviewed-by: Ayush Tiwari <ayushtiwari.slg01@gmail.com>
Reviewed-by: Matheus Alcantara <matheusssilv97@gmail.com>
Discussion: https://postgr.es/m/CAHGQGwF+-k-Ehsu5W94ZP7GxS3wiBd+mi0PfGTdJ_i2Yr0zR3g@mail.gmail.com
Backpatch-through: 18
This commit is contained in:
Fujii Masao 2026-05-28 20:58:08 +09:00
parent d79bf7612a
commit 8a86aa313a
2 changed files with 5 additions and 1 deletions

View file

@ -1995,6 +1995,9 @@ dblink_fdw_validator(PG_FUNCTION_ARGS)
closest_match) : 0 :
errhint("There are no valid options in this context.")));
}
if (strcmp(def->defname, "use_scram_passthrough") == 0)
(void) defGetBoolean(def); /* accept only boolean values */
}
PG_RETURN_VOID();

View file

@ -121,7 +121,8 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
strcmp(def->defname, "parallel_commit") == 0 ||
strcmp(def->defname, "parallel_abort") == 0 ||
strcmp(def->defname, "keep_connections") == 0 ||
strcmp(def->defname, "restore_stats") == 0)
strcmp(def->defname, "restore_stats") == 0 ||
strcmp(def->defname, "use_scram_passthrough") == 0)
{
/* these accept only boolean values */
(void) defGetBoolean(def);