dblink: Reject use_scram_passthrough on foreign-data wrappers

Previously, dblink accepted the use_scram_passthrough option on
foreign-data wrappers via ALTER FOREIGN DATA WRAPPER dblink_fdw
OPTIONS, even though the setting had no effect there.

use_scram_passthrough should be only meaningful for foreign servers
and user mappings, so this commit updates dblink to accept the option
only in those contexts.

Backpatch to v18, where use_scram_passthrough was introduced.

Author: Matheus Alcantara <matheusssilv97@gmail.com>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/CAHGQGwEJ8rZjmbOvCicyr4vbuLio082bNTde0WNoSWaWr9wVcg@mail.gmail.com
Backpatch-through: 18
This commit is contained in:
Fujii Masao 2026-05-26 01:07:24 +09:00
parent 5f5165e2fe
commit e2b8813403
3 changed files with 18 additions and 2 deletions

View file

@ -3116,8 +3116,15 @@ static bool
is_valid_dblink_fdw_option(const PQconninfoOption *options, const char *option,
Oid context)
{
if (strcmp(option, "use_scram_passthrough") == 0)
return true;
/*
* These options are only valid for foreign server or user mapping
* contexts
*/
if (context == ForeignServerRelationId || context == UserMappingRelationId)
{
if (strcmp(option, "use_scram_passthrough") == 0)
return true;
}
return is_valid_dblink_option(options, option, context);
}

View file

@ -1220,6 +1220,11 @@ SHOW intervalstyle;
postgres
(1 row)
-- Check that adding use_scram_passthrough option on an foreign data wrapper is
-- not allowed
ALTER FOREIGN DATA WRAPPER dblink_fdw OPTIONS(add use_scram_passthrough 'true');
ERROR: invalid option "use_scram_passthrough"
HINT: There are no valid options in this context.
-- Clean up GUC-setting tests
SELECT dblink_disconnect('myconn');
dblink_disconnect

View file

@ -635,6 +635,10 @@ FROM dblink_fetch('myconn','error_cursor', 1) AS t(i int);
SHOW datestyle;
SHOW intervalstyle;
-- Check that adding use_scram_passthrough option on an foreign data wrapper is
-- not allowed
ALTER FOREIGN DATA WRAPPER dblink_fdw OPTIONS(add use_scram_passthrough 'true');
-- Clean up GUC-setting tests
SELECT dblink_disconnect('myconn');
RESET datestyle;