diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-09-03 22:09:06 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-09-03 22:09:06 +0000 |
commit | fd28d83bdc1d357d2e21e416cf52c0e20ab6da16 (patch) | |
tree | a4bc7ca8463086b1c4237fdcff4212ab2d82d198 /src/backend/commands/variable.c | |
parent | 8422728a2bf00f997058411897dc1016daafdbe3 (diff) | |
download | postgresql-fd28d83bdc1d357d2e21e416cf52c0e20ab6da16.tar.gz postgresql-fd28d83bdc1d357d2e21e416cf52c0e20ab6da16.zip |
Disallow RESET ROLE and RESET SESSION AUTHORIZATION inside security-definer
functions.
This extends the previous patch that forbade SETting these variables inside
security-definer functions. RESET is equally a security hole, since it
would allow regaining privileges of the caller; furthermore it can trigger
Assert failures and perhaps other internal errors, since the code is not
expecting these variables to change in such contexts. The previous patch
did not cover this case because assign hooks don't really have enough
information, so move the responsibility for preventing this into guc.c.
Problem discovered by Heikki Linnakangas.
Security: no CVE assigned yet, extends CVE-2007-6600
Diffstat (limited to 'src/backend/commands/variable.c')
-rw-r--r-- | src/backend/commands/variable.c | 18 |
1 files changed, 1 insertions, 17 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index 6a856170d6c..4076312799d 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -9,7 +9,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.88.2.4 2008/01/03 21:25:33 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.88.2.5 2009/09/03 22:09:05 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -773,22 +773,6 @@ assign_session_authorization(const char *value, bool doit, bool interactive) /* not a saved ID, so look it up */ HeapTuple userTup; - if (InSecurityDefinerContext()) - { - /* - * Disallow SET SESSION AUTHORIZATION inside a security definer - * context. We need to do this because when we exit the context, - * GUC won't be notified, leaving things out of sync. Note that - * this test is positioned so that restoring a previously saved - * setting isn't prevented. - */ - if (interactive) - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("cannot set session authorization within security-definer function"))); - return NULL; - } - if (!IsTransactionState()) { /* |