diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/commands/user.c | 11 | ||||
-rw-r--r-- | src/backend/parser/gram.y | 2 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index aa69821be49..c8c0dd0dd53 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -1259,7 +1259,18 @@ GrantRole(GrantRoleStmt *stmt) ListCell *item; if (stmt->grantor) + { grantor = get_rolespec_oid(stmt->grantor, false); + + /* + * Currently, this clause is only for SQL compatibility, not very + * interesting otherwise. + */ + if (grantor != GetUserId()) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("grantor must be current user"))); + } else grantor = GetUserId(); diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index a6d0cefa6bb..86ce33bd97a 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -7196,6 +7196,7 @@ RevokeRoleStmt: n->admin_opt = false; n->granted_roles = $2; n->grantee_roles = $4; + n->grantor = $5; n->behavior = $6; $$ = (Node*)n; } @@ -7206,6 +7207,7 @@ RevokeRoleStmt: n->admin_opt = true; n->granted_roles = $5; n->grantee_roles = $7; + n->grantor = $8; n->behavior = $9; $$ = (Node*)n; } |