diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2006-08-14 23:39:32 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2006-08-14 23:39:32 +0000 |
commit | 58538a0ffc7259419d1ee82feed93a9bef4bf726 (patch) | |
tree | 7e600a16059f12dc17b6de4ab152233e1d5ce6c7 /src/backend/parser/parse_target.c | |
parent | 65b2f93b587be67ea1d5e4d98a99599937aa7b19 (diff) | |
download | postgresql-58538a0ffc7259419d1ee82feed93a9bef4bf726.tar.gz postgresql-58538a0ffc7259419d1ee82feed93a9bef4bf726.zip |
Cause '*' and 'foo.*' notations to mark the referenced RTE(s) as
requiring read permissions. Up till now there was no possible case
in which the RTEs wouldn't already have ACL_SELECT set ... but now that
you can say something like 'INSERT INTO foo ... RETURNING *' this is
an essential step. With this commit, a RETURNING clause adds the
requirement for SELECT permissions on the target table if and only if
the clause actually reads the value of at least one target-table column.
Diffstat (limited to 'src/backend/parser/parse_target.c')
-rw-r--r-- | src/backend/parser/parse_target.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/parser/parse_target.c b/src/backend/parser/parse_target.c index 9258acccfbc..961e3205432 100644 --- a/src/backend/parser/parse_target.c +++ b/src/backend/parser/parse_target.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.147 2006/08/02 01:59:47 joe Exp $ + * $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.148 2006/08/14 23:39:32 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -889,6 +889,9 @@ ExpandColumnRefStar(ParseState *pstate, ColumnRef *cref, rte = addImplicitRTE(pstate, makeRangeVar(schemaname, relname), cref->location); + /* Require read access --- see comments in setTargetTable() */ + rte->requiredPerms |= ACL_SELECT; + rtindex = RTERangeTablePosn(pstate, rte, &sublevels_up); if (targetlist) @@ -930,6 +933,9 @@ ExpandAllTables(ParseState *pstate) RangeTblEntry *rte = (RangeTblEntry *) lfirst(l); int rtindex = RTERangeTablePosn(pstate, rte, NULL); + /* Require read access --- see comments in setTargetTable() */ + rte->requiredPerms |= ACL_SELECT; + target = list_concat(target, expandRelAttrs(pstate, rte, rtindex, 0)); } |