mirror of
https://github.com/postgres/postgres.git
synced 2025-08-11 04:22:52 +03:00
postgres_fdw and dblink should check if backend has MyProcPort
before checking ->has_scram_keys. MyProcPort is NULL in background workers. So this could crash for example if a background worker accessed a suitable configured foreign table. Author: Alexander Pyhalov <a.pyhalov@postgrespro.ru> Reviewed-by: Peter Eisentraut <peter@eisentraut.org> Reviewed-by: Matheus Alcantara <matheusssilv97@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/27b29a35-9b96-46a9-bc1a-914140869dac%40gmail.com
This commit is contained in:
@@ -2665,7 +2665,7 @@ dblink_connstr_has_required_scram_options(const char *connstr)
|
|||||||
PQconninfoFree(options);
|
PQconninfoFree(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort->has_scram_keys;
|
has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort != NULL && MyProcPort->has_scram_keys;
|
||||||
|
|
||||||
return (has_scram_keys && has_require_auth);
|
return (has_scram_keys && has_require_auth);
|
||||||
}
|
}
|
||||||
@@ -2698,7 +2698,7 @@ dblink_security_check(PGconn *conn, const char *connname, const char *connstr)
|
|||||||
* only added if UseScramPassthrough is set, and the user is not allowed
|
* only added if UseScramPassthrough is set, and the user is not allowed
|
||||||
* to add the SCRAM keys on fdw and user mapping options.
|
* to add the SCRAM keys on fdw and user mapping options.
|
||||||
*/
|
*/
|
||||||
if (MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr))
|
if (MyProcPort != NULL && MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef ENABLE_GSS
|
#ifdef ENABLE_GSS
|
||||||
@@ -2771,7 +2771,7 @@ dblink_connstr_check(const char *connstr)
|
|||||||
if (dblink_connstr_has_pw(connstr))
|
if (dblink_connstr_has_pw(connstr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr))
|
if (MyProcPort != NULL && MyProcPort->has_scram_keys && dblink_connstr_has_required_scram_options(connstr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef ENABLE_GSS
|
#ifdef ENABLE_GSS
|
||||||
@@ -2931,7 +2931,7 @@ get_connect_string(const char *servername)
|
|||||||
* the user overwrites these options we can ereport on
|
* the user overwrites these options we can ereport on
|
||||||
* dblink_connstr_check and dblink_security_check.
|
* dblink_connstr_check and dblink_security_check.
|
||||||
*/
|
*/
|
||||||
if (MyProcPort->has_scram_keys && UseScramPassthrough(foreign_server, user_mapping))
|
if (MyProcPort != NULL && MyProcPort->has_scram_keys && UseScramPassthrough(foreign_server, user_mapping))
|
||||||
appendSCRAMKeysInfo(&buf);
|
appendSCRAMKeysInfo(&buf);
|
||||||
|
|
||||||
foreach(cell, fdw->options)
|
foreach(cell, fdw->options)
|
||||||
|
@@ -462,7 +462,7 @@ pgfdw_security_check(const char **keywords, const char **values, UserMapping *us
|
|||||||
* assume that UseScramPassthrough is also true since SCRAM options are
|
* assume that UseScramPassthrough is also true since SCRAM options are
|
||||||
* only set when UseScramPassthrough is enabled.
|
* only set when UseScramPassthrough is enabled.
|
||||||
*/
|
*/
|
||||||
if (MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values))
|
if (MyProcPort != NULL && MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
@@ -568,7 +568,7 @@ connect_pg_server(ForeignServer *server, UserMapping *user)
|
|||||||
n++;
|
n++;
|
||||||
|
|
||||||
/* Add required SCRAM pass-through connection options if it's enabled. */
|
/* Add required SCRAM pass-through connection options if it's enabled. */
|
||||||
if (MyProcPort->has_scram_keys && UseScramPassthrough(server, user))
|
if (MyProcPort != NULL && MyProcPort->has_scram_keys && UseScramPassthrough(server, user))
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
int encoded_len;
|
int encoded_len;
|
||||||
@@ -743,7 +743,7 @@ check_conn_params(const char **keywords, const char **values, UserMapping *user)
|
|||||||
* assume that UseScramPassthrough is also true since SCRAM options are
|
* assume that UseScramPassthrough is also true since SCRAM options are
|
||||||
* only set when UseScramPassthrough is enabled.
|
* only set when UseScramPassthrough is enabled.
|
||||||
*/
|
*/
|
||||||
if (MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values))
|
if (MyProcPort != NULL && MyProcPort->has_scram_keys && pgfdw_has_required_scram_options(keywords, values))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
@@ -2557,7 +2557,7 @@ pgfdw_has_required_scram_options(const char **keywords, const char **values)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort->has_scram_keys;
|
has_scram_keys = has_scram_client_key && has_scram_server_key && MyProcPort != NULL && MyProcPort->has_scram_keys;
|
||||||
|
|
||||||
return (has_scram_keys && has_require_auth);
|
return (has_scram_keys && has_require_auth);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user