diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-04-29 22:28:19 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-04-29 22:28:19 +0000 |
commit | 857661ba2eeb7ccde7dfc11659cb4c67748cb980 (patch) | |
tree | 56fde46c7b7b7ba3db020f75ded35299a31bd270 /src | |
parent | ccfaf9067dfd0fa53f0c4c1245a76d310080a45c (diff) | |
download | postgresql-857661ba2eeb7ccde7dfc11659cb4c67748cb980.tar.gz postgresql-857661ba2eeb7ccde7dfc11659cb4c67748cb980.zip |
Enforce EXECUTE privilege for aggregate functions.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/executor/nodeAgg.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 6ded8c5604a..60174546812 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -46,7 +46,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.82 2002/04/16 23:08:10 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/executor/nodeAgg.c,v 1.83 2002/04/29 22:28:19 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -58,11 +58,13 @@ #include "catalog/pg_operator.h" #include "executor/executor.h" #include "executor/nodeAgg.h" +#include "miscadmin.h" #include "optimizer/clauses.h" #include "parser/parse_coerce.h" #include "parser/parse_expr.h" #include "parser/parse_oper.h" #include "parser/parse_type.h" +#include "utils/acl.h" #include "utils/builtins.h" #include "utils/lsyscache.h" #include "utils/syscache.h" @@ -843,6 +845,7 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) AggStatePerAgg peraggstate = &peragg[++aggno]; HeapTuple aggTuple; Form_pg_aggregate aggform; + AclResult aclresult; Oid transfn_oid, finalfn_oid; Datum textInitVal; @@ -861,6 +864,12 @@ ExecInitAgg(Agg *node, EState *estate, Plan *parent) aggref->aggfnoid); aggform = (Form_pg_aggregate) GETSTRUCT(aggTuple); + /* Check permission to call aggregate function */ + aclresult = pg_proc_aclcheck(aggref->aggfnoid, GetUserId(), + ACL_EXECUTE); + if (aclresult != ACLCHECK_OK) + aclcheck_error(aclresult, get_func_name(aggref->aggfnoid)); + get_typlenbyval(aggref->aggtype, &peraggstate->resulttypeLen, &peraggstate->resulttypeByVal); |