]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
fastpath code neglected to check whether user has privileges to call the
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Jan 2003 21:57:05 +0000 (21:57 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Jan 2003 21:57:05 +0000 (21:57 +0000)
target function.  Also, move SetQuerySnapshot() call to avoid assert
failure when a fastpath call is attempted in an aborted transaction.

src/backend/tcop/fastpath.c
src/backend/tcop/postgres.c

index 23cc25fc6de441af13c4fd20d49aaae2fa1ebcb2..d4bb1e37515db5e68aa6bb7cd956465736606d93 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.54 2002/08/24 15:00:46 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/tcop/fastpath.c,v 1.55 2003/01/01 21:57:05 tgl Exp $
  *
  * NOTES
  *       This cruft is the server side of PQfn.
 #include "libpq/libpq.h"
 #include "libpq/pqformat.h"
 #include "tcop/fastpath.h"
+#include "utils/acl.h"
 #include "utils/lsyscache.h"
 #include "utils/syscache.h"
+#include "utils/tqual.h"
 
 
 /* ----------------
@@ -221,6 +223,7 @@ HandleFunctionRequest(void)
        int                     argsize;
        int                     nargs;
        int                     tmp;
+       AclResult       aclresult;
        FunctionCallInfoData fcinfo;
        Datum           retval;
        int                     i;
@@ -337,6 +340,18 @@ HandleFunctionRequest(void)
                elog(ERROR, "current transaction is aborted, "
                         "queries ignored until end of transaction block");
 
+       /* Check permission to call function */
+       aclresult = pg_proc_aclcheck(fid, GetUserId(), ACL_EXECUTE);
+       if (aclresult != ACLCHECK_OK)
+               aclcheck_error(aclresult, get_func_name(fid));
+
+       /*
+        * Set up a query snapshot in case function needs one.  (It is not safe
+        * to do this if we are in transaction-abort state, so we have to postpone
+        * it till now.  Ugh.)
+        */
+       SetQuerySnapshot();
+
 #ifdef NO_FASTPATH
        /* force a NULL return */
        retval = (Datum) 0;
index 9ac2a052d674b5abeb8aa739dfa0396d34d19cb2..44f163215bc7b44bc42262781888bccf7b8de9ee 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.313 2002/12/06 05:00:26 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.314 2003/01/01 21:57:05 tgl Exp $
  *
  * NOTES
  *       this is the "main" module of the postgres backend and
@@ -1781,7 +1781,7 @@ PostgresMain(int argc, char *argv[], const char *username)
        if (!IsUnderPostmaster)
        {
                puts("\nPOSTGRES backend interactive interface ");
-               puts("$Revision: 1.313 $ $Date: 2002/12/06 05:00:26 $\n");
+               puts("$Revision: 1.314 $ $Date: 2003/01/01 21:57:05 $\n");
        }
 
        /*
@@ -1965,9 +1965,6 @@ PostgresMain(int argc, char *argv[], const char *username)
                                /* start an xact for this function invocation */
                                start_xact_command();
 
-                               /* assume it may need a snapshot */
-                               SetQuerySnapshot();
-
                                if (HandleFunctionRequest() == EOF)
                                {
                                        /* lost frontend connection during F message input */