diff options
Diffstat (limited to 'src/backend/utils/adt/acl.c')
-rw-r--r-- | src/backend/utils/adt/acl.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index a416def8155..3fedb33a8a5 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.118 2005/07/07 20:39:58 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/acl.c,v 1.119 2005/07/14 21:46:30 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2541,6 +2541,10 @@ is_member_of_role(Oid member, Oid role) if (member == role) return true; + /* Superusers have every privilege, so are part of every role */ + if (superuser_arg(member)) + return true; + /* If cache is already valid, just use the list */ if (OidIsValid(cached_role) && cached_role == member) return list_member_oid(cached_memberships, role); @@ -2604,6 +2608,20 @@ is_member_of_role(Oid member, Oid role) return list_member_oid(cached_memberships, role); } +/* + * check_is_member_of_role + * is_member_of_role with a standard permission-violation error if not + */ +void +check_is_member_of_role(Oid member, Oid role) +{ + if (!is_member_of_role(member, role)) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("must be member of role \"%s\"", + GetUserNameFromId(role)))); +} + /* * Is member an admin of role (directly or indirectly)? That is, is it |