aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/functioncmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/functioncmds.c')
-rw-r--r--src/backend/commands/functioncmds.c40
1 files changed, 12 insertions, 28 deletions
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c
index 944ae192a0d..51d003600bb 100644
--- a/src/backend/commands/functioncmds.c
+++ b/src/backend/commands/functioncmds.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/functioncmds.c,v 1.16 2002/08/05 03:29:16 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/functioncmds.c,v 1.17 2002/08/11 17:44:12 petere Exp $
*
* DESCRIPTION
* These routines take the parse tree and pick out the
@@ -621,6 +621,12 @@ CreateCast(CreateCastStmt *stmt)
if (sourcetypeid == targettypeid)
elog(ERROR, "source data type and target data type are the same");
+ if (!pg_type_ownercheck(sourcetypeid, GetUserId())
+ && !pg_type_ownercheck(targettypeid, GetUserId()))
+ elog(ERROR, "must be owner of type %s or type %s",
+ TypeNameToString(stmt->sourcetype),
+ TypeNameToString(stmt->targettype));
+
relation = heap_openr(CastRelationName, RowExclusiveLock);
tuple = SearchSysCache(CASTSOURCETARGET,
@@ -639,10 +645,6 @@ CreateCast(CreateCastStmt *stmt)
false,
"CreateCast");
- if (!pg_proc_ownercheck(funcid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER,
- NameListToString(stmt->func->funcname));
-
tuple = SearchSysCache(PROCOID, ObjectIdGetDatum(funcid), 0, 0, 0);
if (!HeapTupleIsValid(tuple))
elog(ERROR, "cache lookup of function %u failed", funcid);
@@ -666,12 +668,6 @@ CreateCast(CreateCastStmt *stmt)
else
{
/* indicates binary compatibility */
- if (!pg_type_ownercheck(sourcetypeid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER,
- TypeNameToString(stmt->sourcetype));
- if (!pg_type_ownercheck(targettypeid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER,
- TypeNameToString(stmt->targettype));
funcid = InvalidOid;
}
@@ -730,7 +726,6 @@ DropCast(DropCastStmt *stmt)
Oid sourcetypeid;
Oid targettypeid;
HeapTuple tuple;
- Form_pg_cast caststruct;
ObjectAddress object;
sourcetypeid = LookupTypeName(stmt->sourcetype);
@@ -753,22 +748,11 @@ DropCast(DropCastStmt *stmt)
TypeNameToString(stmt->targettype));
/* Permission check */
- caststruct = (Form_pg_cast) GETSTRUCT(tuple);
- if (caststruct->castfunc != InvalidOid)
- {
- if (!pg_proc_ownercheck(caststruct->castfunc, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER,
- get_func_name(caststruct->castfunc));
- }
- else
- {
- if (!pg_type_ownercheck(sourcetypeid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER,
- format_type_be(sourcetypeid));
- if (!pg_type_ownercheck(targettypeid, GetUserId()))
- aclcheck_error(ACLCHECK_NOT_OWNER,
- format_type_be(targettypeid));
- }
+ if (!pg_type_ownercheck(sourcetypeid, GetUserId())
+ && !pg_type_ownercheck(targettypeid, GetUserId()))
+ elog(ERROR, "must be owner of type %s or type %s",
+ TypeNameToString(stmt->sourcetype),
+ TypeNameToString(stmt->targettype));
/*
* Do the deletion