]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
postgres_fdw, dblink: Validate use_scram_passthrough values
authorFujii Masao <fujii@postgresql.org>
Thu, 28 May 2026 11:58:45 +0000 (20:58 +0900)
committerFujii Masao <fujii@postgresql.org>
Thu, 28 May 2026 11:58:45 +0000 (20:58 +0900)
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

contrib/dblink/dblink.c
contrib/postgres_fdw/option.c

index 2f803e7ed3c3ddf0e838045d632ca3e328073b0c..62706dae004089093aa9e6cd39ce08cb5fefa095 100644 (file)
@@ -2010,6 +2010,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();
index 6d5795b9fa9ea0d2bae444393581c1c4cc4f8dd3..0ab1fd70186aa6cd66ac212172099739b4c00a9b 100644 (file)
@@ -125,7 +125,8 @@ postgres_fdw_validator(PG_FUNCTION_ARGS)
                        strcmp(def->defname, "async_capable") == 0 ||
                        strcmp(def->defname, "parallel_commit") == 0 ||
                        strcmp(def->defname, "parallel_abort") == 0 ||
-                       strcmp(def->defname, "keep_connections") == 0)
+                       strcmp(def->defname, "keep_connections") == 0 ||
+                       strcmp(def->defname, "use_scram_passthrough") == 0)
                {
                        /* these accept only boolean values */
                        (void) defGetBoolean(def);