aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tcop/utility.c
diff options
context:
space:
mode:
authorMarc G. Fournier <scrappy@hub.org>1997-03-12 20:48:48 +0000
committerMarc G. Fournier <scrappy@hub.org>1997-03-12 20:48:48 +0000
commite4949f9fe55223dac74b0075b5483ad15e8e318c (patch)
tree0eebc8861f09df6d575a5834278176c04fe8ce16 /src/backend/tcop/utility.c
parentc00c511b7bb85e8c3fa2424a25cb9cea3d5f4b33 (diff)
downloadpostgresql-e4949f9fe55223dac74b0075b5483ad15e8e318c.tar.gz
postgresql-e4949f9fe55223dac74b0075b5483ad15e8e318c.zip
From: Dan McGuirk <mcguirk@indirect.com>
Subject: [HACKERS] better access control error messages This patch replaces the 'no such class or insufficient privilege' with distinct error messages that tell you whether the table really doesn't exist or whether access was denied.
Diffstat (limited to 'src/backend/tcop/utility.c')
-rw-r--r--src/backend/tcop/utility.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c
index 693dadc8346..065d01457cc 100644
--- a/src/backend/tcop/utility.c
+++ b/src/backend/tcop/utility.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.11 1997/01/16 14:56:21 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.12 1997/03/12 20:48:27 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
@@ -381,10 +381,13 @@ ProcessUtility(Node *parsetree,
case T_RuleStmt: /* CREATE RULE */
{
RuleStmt *stmt = (RuleStmt *)parsetree;
+ int aclcheck_result;
+
#ifndef NO_SECURITY
relname = stmt->object->relname;
- if (!pg_aclcheck(relname, userName, ACL_RU))
- elog(WARN, "%s %s", relname, ACL_NO_PRIV_WARNING);
+ aclcheck_result = pg_aclcheck(relname, userName, ACL_RU);
+ if(aclcheck_result != ACLCHECK_OK)
+ elog(WARN, "%s: %s", relname, aclcheck_error_strings[aclcheck_result]);
#endif
commandTag = "CREATE";
CHECK_IF_ABORTED();
@@ -423,19 +426,21 @@ ProcessUtility(Node *parsetree,
relname);
#ifndef NO_SECURITY
if (!pg_ownercheck(userName, relname, RELNAME))
- elog(WARN, "you do not own class \"%s\"",
- relname);
+ elog(WARN, "%s: %s", relationName, aclcheck_error_strings[ACLCHECK_NOT_OWNER]);
#endif
RemoveIndex(relname);
break;
case RULE:
{
char *rulename = stmt->name;
+ int aclcheck_result;
#ifndef NO_SECURITY
relationName = RewriteGetRuleEventRel(rulename);
- if (!pg_aclcheck(relationName, userName, ACL_RU))
- elog(WARN, "%s %s", relationName, ACL_NO_PRIV_WARNING);
+ aclcheck_result = pg_aclcheck(relationName, userName, ACL_RU);
+ if(aclcheck_result != ACLCHECK_OK) {
+ elog(WARN, "%s: %s", relationName, aclcheck_error_strings[aclcheck_result]);
+ }
#endif
RemoveRewriteRule(rulename);
}
@@ -457,7 +462,7 @@ ProcessUtility(Node *parsetree,
ruleName = MakeRetrieveViewRuleName(viewName);
relationName = RewriteGetRuleEventRel(ruleName);
if (!pg_ownercheck(userName, relationName, RELNAME))
- elog(WARN, "%s %s", relationName, ACL_NO_PRIV_WARNING);
+ elog(WARN, "%s: %s", relationName, aclcheck_error_strings[ACLCHECK_NOT_OWNER]);
pfree(ruleName);
#endif
RemoveView(viewName);