diff options
Diffstat (limited to 'src/backend/utils')
-rw-r--r-- | src/backend/utils/adt/acl.c | 14 | ||||
-rw-r--r-- | src/backend/utils/cache/fcache.c | 11 | ||||
-rw-r--r-- | src/backend/utils/cache/lsyscache.c | 29 |
3 files changed, 43 insertions, 11 deletions
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c index 14a06504c5c..1f1de3e498f 100644 --- a/src/backend/utils/adt/acl.c +++ b/src/backend/utils/adt/acl.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.72 2002/04/26 01:24:08 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.73 2002/04/27 03:45:03 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -664,7 +664,7 @@ has_table_privilege_name_name(PG_FUNCTION_ARGS) int32 usesysid; Oid reloid; AclMode mode; - int32 aclresult; + AclResult aclresult; /* * Lookup userid based on username @@ -709,7 +709,7 @@ has_table_privilege_name(PG_FUNCTION_ARGS) int32 usesysid; Oid reloid; AclMode mode; - int32 aclresult; + AclResult aclresult; usesysid = GetUserId(); @@ -750,7 +750,7 @@ has_table_privilege_name_id(PG_FUNCTION_ARGS) text *priv_type_text = PG_GETARG_TEXT_P(2); int32 usesysid; AclMode mode; - int32 aclresult; + AclResult aclresult; /* * Lookup userid based on username @@ -789,7 +789,7 @@ has_table_privilege_id(PG_FUNCTION_ARGS) text *priv_type_text = PG_GETARG_TEXT_P(1); int32 usesysid; AclMode mode; - int32 aclresult; + AclResult aclresult; usesysid = GetUserId(); @@ -825,7 +825,7 @@ has_table_privilege_id_name(PG_FUNCTION_ARGS) text *priv_type_text = PG_GETARG_TEXT_P(2); Oid reloid; AclMode mode; - int32 aclresult; + AclResult aclresult; /* * Lookup rel OID based on relname @@ -863,7 +863,7 @@ has_table_privilege_id_id(PG_FUNCTION_ARGS) Oid reloid = PG_GETARG_OID(1); text *priv_type_text = PG_GETARG_TEXT_P(2); AclMode mode; - int32 aclresult; + AclResult aclresult; /* * Convert priv_type_text to an AclMode diff --git a/src/backend/utils/cache/fcache.c b/src/backend/utils/cache/fcache.c index cb11cbe4e26..6d6efdbaa30 100644 --- a/src/backend/utils/cache/fcache.c +++ b/src/backend/utils/cache/fcache.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.43 2002/04/21 00:26:43 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/Attic/fcache.c,v 1.44 2002/04/27 03:45:03 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -17,6 +17,7 @@ #include "miscadmin.h" #include "utils/acl.h" #include "utils/fcache.h" +#include "utils/lsyscache.h" /* @@ -26,6 +27,12 @@ FunctionCachePtr init_fcache(Oid foid, int nargs, MemoryContext fcacheCxt) { FunctionCachePtr retval; + AclResult aclresult; + + /* Check permission to call function */ + aclresult = pg_proc_aclcheck(foid, GetUserId(), ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, get_func_name(foid)); /* Safety check (should never fail, as parser should check sooner) */ if (nargs > FUNC_MAX_ARGS) @@ -42,7 +49,5 @@ init_fcache(Oid foid, int nargs, MemoryContext fcacheCxt) /* Initialize additional info */ retval->setArgsValid = false; - retval->permission_ok = pg_proc_aclcheck(foid, GetUserId(), ACL_EXECUTE) == ACLCHECK_OK; - return retval; } diff --git a/src/backend/utils/cache/lsyscache.c b/src/backend/utils/cache/lsyscache.c index 6699a179d37..f6b98c5bee6 100644 --- a/src/backend/utils/cache/lsyscache.c +++ b/src/backend/utils/cache/lsyscache.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.70 2002/04/16 23:08:11 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/cache/lsyscache.c,v 1.71 2002/04/27 03:45:03 tgl Exp $ * * NOTES * Eventually, the index information should go through here, too. @@ -565,6 +565,33 @@ get_oprjoin(Oid opno) /* ---------- FUNCTION CACHE ---------- */ /* + * get_func_name + * returns the name of the function with the given funcid + * + * Note: returns a palloc'd copy of the string, or NULL if no such function. + */ +char * +get_func_name(Oid funcid) +{ + HeapTuple tp; + + tp = SearchSysCache(PROCOID, + ObjectIdGetDatum(funcid), + 0, 0, 0); + if (HeapTupleIsValid(tp)) + { + Form_pg_proc functup = (Form_pg_proc) GETSTRUCT(tp); + char *result; + + result = pstrdup(NameStr(functup->proname)); + ReleaseSysCache(tp); + return result; + } + else + return NULL; +} + +/* * get_func_rettype * Given procedure id, return the function's result type. */ |