diff options
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/execMain.c | 27 | ||||
-rw-r--r-- | src/backend/executor/execQual.c | 5 |
2 files changed, 18 insertions, 14 deletions
diff --git a/src/backend/executor/execMain.c b/src/backend/executor/execMain.c index a2045a9eb80..da12fa9a1db 100644 --- a/src/backend/executor/execMain.c +++ b/src/backend/executor/execMain.c @@ -27,7 +27,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.158 2002/04/15 05:22:04 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.159 2002/04/27 03:45:02 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -360,7 +360,7 @@ ExecCheckRTEPerms(RangeTblEntry *rte, CmdType operation) { Oid relOid; Oid userid; - int32 aclcheck_result; + AclResult aclcheck_result; /* * If it's a subquery RTE, ignore it --- it will be checked when @@ -388,9 +388,7 @@ ExecCheckRTEPerms(RangeTblEntry *rte, CmdType operation) { aclcheck_result = CHECK(ACL_SELECT); if (aclcheck_result != ACLCHECK_OK) - elog(ERROR, "%s: %s", - get_rel_name(relOid), - aclcheck_error_strings[aclcheck_result]); + aclcheck_error(aclcheck_result, get_rel_name(relOid)); } if (rte->checkForWrite) @@ -419,9 +417,7 @@ ExecCheckRTEPerms(RangeTblEntry *rte, CmdType operation) break; } if (aclcheck_result != ACLCHECK_OK) - elog(ERROR, "%s: %s", - get_rel_name(relOid), - aclcheck_error_strings[aclcheck_result]); + aclcheck_error(aclcheck_result, get_rel_name(relOid)); } } @@ -701,7 +697,7 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) if (!parseTree->isPortal) { /* - * a select into table + * a select into table --- need to create the "into" table */ if (parseTree->into != NULL) { @@ -711,11 +707,22 @@ InitPlan(CmdType operation, Query *parseTree, Plan *plan, EState *estate) TupleDesc tupdesc; /* - * create the "into" relation + * find namespace to create in, check permissions */ intoName = parseTree->into->relname; namespaceId = RangeVarGetCreationNamespace(parseTree->into); + if (!isTempNamespace(namespaceId)) + { + AclResult aclresult; + + aclresult = pg_namespace_aclcheck(namespaceId, GetUserId(), + ACL_CREATE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, + get_namespace_name(namespaceId)); + } + /* * have to copy tupType to get rid of constraints */ diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c index e77eeed8030..5cc1bbaa718 100644 --- a/src/backend/executor/execQual.c +++ b/src/backend/executor/execQual.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.90 2002/02/18 23:11:13 petere Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/execQual.c,v 1.91 2002/04/27 03:45:03 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -658,9 +658,6 @@ ExecMakeFunctionResult(FunctionCachePtr fcache, bool hasSetArg; int i; - if (!fcache->permission_ok) - elog(ERROR, "permission denied"); - /* * arguments is a list of expressions to evaluate before passing to * the function manager. We skip the evaluation if it was already |