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/include/utils/guc_tables.h | |
parent | 8422728a2bf00f997058411897dc1016daafdbe3 (diff) |
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/include/utils/guc_tables.h')
-rw-r--r-- | src/include/utils/guc_tables.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index 553d3fc531b..d04dc7a41dc 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -7,7 +7,7 @@ * * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * - * $Id: guc_tables.h,v 1.6.4.1 2006/02/12 22:33:29 tgl Exp $ + * $Id: guc_tables.h,v 1.6.4.2 2009/09/03 22:09:06 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -99,6 +99,8 @@ struct config_generic #define GUC_DISALLOW_IN_FILE 0x0040 /* can't set in postgresql.conf */ #define GUC_IS_NAME 0x0080 /* limit string to NAMEDATALEN-1 */ +#define GUC_NOT_WHILE_SEC_DEF 0x8000 /* can't change inside sec-def func */ + /* bit values in status field */ #define GUC_HAVE_TENTATIVE 0x0001 /* tentative value is defined */ #define GUC_HAVE_LOCAL 0x0002 /* a SET LOCAL has been executed */ |