diff options
author | Jeff Davis <jdavis@postgresql.org> | 2024-01-12 13:41:36 -0800 |
---|---|---|
committer | Jeff Davis <jdavis@postgresql.org> | 2024-01-12 13:41:36 -0800 |
commit | 5c31669058b5550b4b3d623c07bc4203c11b8316 (patch) | |
tree | a4b14e4019276cd67e5c5d93a3bad14f2d6710e1 /src/backend | |
parent | a1604237a6ffee70b171bacd5f36b0e380afd33a (diff) | |
download | postgresql-5c31669058b5550b4b3d623c07bc4203c11b8316.tar.gz postgresql-5c31669058b5550b4b3d623c07bc4203c11b8316.zip |
Re-validate connection string in libpqrcv_connect().
A superuser may create a subscription with password_required=true, but
which uses a connection string without a password.
Previously, if the owner of such a subscription was changed to a
non-superuser, the non-superuser was able to utilize a password from
another source (like a password file or the PGPASSWORD environment
variable), which should not have been allowed.
This commit adds a step to re-validate the connection string before
connecting.
Reported-by: Jeff Davis
Author: Vignesh C
Reviewed-by: Peter Smith, Robert Haas, Amit Kapila
Discussion: https://www.postgresql.org/message-id/flat/e5892973ae2a80a1a3e0266806640dae3c428100.camel%40j-davis.com
Backpatch-through: 16
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/replication/libpqwalreceiver/libpqwalreceiver.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c index 78344a03615..ead30f87c96 100644 --- a/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c +++ b/src/backend/replication/libpqwalreceiver/libpqwalreceiver.c @@ -138,6 +138,15 @@ libpqrcv_connect(const char *conninfo, bool logical, bool must_use_password, int i = 0; /* + * Re-validate connection string. The validation already happened at DDL + * time, but the subscription owner may have changed. If we don't recheck + * with the correct must_use_password, it's possible that the connection + * will obtain the password from a different source, such as PGPASSFILE or + * PGPASSWORD. + */ + libpqrcv_check_conninfo(conninfo, must_use_password); + + /* * We use the expand_dbname parameter to process the connection string (or * URI), and pass some extra options. */ |