diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-12-23 10:22:09 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-12-23 10:22:09 -0300 |
commit | 1826987a46d079458007b7b6bbcbbd852353adbb (patch) | |
tree | c3598d1d9c006551d2adff2b888112a24f2d03ed /src/backend/commands/variable.c | |
parent | 7eca575d1c28f6eee2bf4564f3d458d10c4a8f47 (diff) | |
download | postgresql-1826987a46d079458007b7b6bbcbbd852353adbb.tar.gz postgresql-1826987a46d079458007b7b6bbcbbd852353adbb.zip |
Use a bitmask to represent role attributes
The previous representation using a boolean column for each attribute
would not scale as well as we want to add further attributes.
Extra auxilliary functions are added to go along with this change, to
make up for the lost convenience of access of the old representation.
Catalog version bumped due to change in catalogs and the new functions.
Author: Adam Brightwell, minor tweaks by Álvaro
Reviewed by: Stephen Frost, Andres Freund, Álvaro Herrera
Diffstat (limited to 'src/backend/commands/variable.c')
-rw-r--r-- | src/backend/commands/variable.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c index 6ce8daeb95a..491dc38caf3 100644 --- a/src/backend/commands/variable.c +++ b/src/backend/commands/variable.c @@ -776,6 +776,7 @@ check_session_authorization(char **newval, void **extra, GucSource source) Oid roleid; bool is_superuser; role_auth_extra *myextra; + RoleAttr attributes; /* Do nothing for the boot_val default of NULL */ if (*newval == NULL) @@ -800,7 +801,8 @@ check_session_authorization(char **newval, void **extra, GucSource source) } roleid = HeapTupleGetOid(roleTup); - is_superuser = ((Form_pg_authid) GETSTRUCT(roleTup))->rolsuper; + attributes = ((Form_pg_authid) GETSTRUCT(roleTup))->rolattr; + is_superuser = (attributes & ROLE_ATTR_SUPERUSER); ReleaseSysCache(roleTup); @@ -844,6 +846,7 @@ check_role(char **newval, void **extra, GucSource source) Oid roleid; bool is_superuser; role_auth_extra *myextra; + RoleAttr attributes; if (strcmp(*newval, "none") == 0) { @@ -872,7 +875,8 @@ check_role(char **newval, void **extra, GucSource source) } roleid = HeapTupleGetOid(roleTup); - is_superuser = ((Form_pg_authid) GETSTRUCT(roleTup))->rolsuper; + attributes = ((Form_pg_authid) GETSTRUCT(roleTup))->rolattr; + is_superuser = (attributes & ROLE_ATTR_SUPERUSER); ReleaseSysCache(roleTup); |