Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit315a9ca

Browse files
committed
Make CREATE CONSTRAINT TRIGGER check for REFERENCES privilege on both
master and slave tables.
1 parentc828ec8 commit315a9ca

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

‎src/backend/commands/trigger.c‎

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* Portions Copyright (c) 1994, Regents of the University of California
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.126 2002/08/17 12:15:48 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/commands/trigger.c,v 1.127 2002/08/18 11:20:05 petere Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -86,6 +86,11 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
8686

8787
rel=heap_openrv(stmt->relation,AccessExclusiveLock);
8888

89+
if (stmt->constrrel!=NULL)
90+
constrrelid=RangeVarGetRelid(stmt->constrrel, false);
91+
else
92+
constrrelid=InvalidOid;
93+
8994
if (rel->rd_rel->relkind!=RELKIND_RELATION)
9095
elog(ERROR,"CreateTrigger: relation \"%s\" is not a table",
9196
stmt->relation->relname);
@@ -94,10 +99,29 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
9499
elog(ERROR,"CreateTrigger: can't create trigger for system relation %s",
95100
stmt->relation->relname);
96101

97-
aclresult=pg_class_aclcheck(RelationGetRelid(rel),GetUserId(),
98-
stmt->isconstraint ?ACL_REFERENCES :ACL_TRIGGER);
99-
if (aclresult!=ACLCHECK_OK)
100-
aclcheck_error(aclresult,RelationGetRelationName(rel));
102+
/* permission checks */
103+
104+
if (stmt->isconstraint)
105+
{
106+
/* foreign key constraint trigger */
107+
108+
aclresult=pg_class_aclcheck(RelationGetRelid(rel),GetUserId(),ACL_REFERENCES);
109+
if (aclresult!=ACLCHECK_OK)
110+
aclcheck_error(aclresult,RelationGetRelationName(rel));
111+
if (constrrelid!=InvalidOid)
112+
{
113+
aclresult=pg_class_aclcheck(constrrelid,GetUserId(),ACL_REFERENCES);
114+
if (aclresult!=ACLCHECK_OK)
115+
aclcheck_error(aclresult,get_rel_name(constrrelid));
116+
}
117+
}
118+
else
119+
{
120+
/* real trigger */
121+
aclresult=pg_class_aclcheck(RelationGetRelid(rel),GetUserId(),ACL_TRIGGER);
122+
if (aclresult!=ACLCHECK_OK)
123+
aclcheck_error(aclresult,RelationGetRelationName(rel));
124+
}
101125

102126
/*
103127
* Generate the trigger's OID now, so that we can use it in the name
@@ -124,11 +148,6 @@ CreateTrigger(CreateTrigStmt *stmt, bool forConstraint)
124148
constrname="";
125149
}
126150

127-
if (stmt->constrrel!=NULL)
128-
constrrelid=RangeVarGetRelid(stmt->constrrel, false);
129-
else
130-
constrrelid=InvalidOid;
131-
132151
TRIGGER_CLEAR_TYPE(tgtype);
133152
if (stmt->before)
134153
TRIGGER_SETT_BEFORE(tgtype);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp