aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2007-08-27 00:57:36 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2007-08-27 00:57:36 +0000
commit741e952b54c81d5cc2e46735d12351a83c1c9c6d (patch)
treef4d8d6ea5fcd84e422e504eb2a29c0ff070631d0
parent56f3fb3ba1aed1efbfb6b50e55159df8a0ad2f39 (diff)
downloadpostgresql-741e952b54c81d5cc2e46735d12351a83c1c9c6d.tar.gz
postgresql-741e952b54c81d5cc2e46735d12351a83c1c9c6d.zip
Make currtid() functions require SELECT privileges on the target table.
While it's not clear that TID linkage info is of any great use to a nefarious user, it's certainly unexpected that these functions wouldn't insist on read privileges.
-rw-r--r--src/backend/utils/adt/tid.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/backend/utils/adt/tid.c b/src/backend/utils/adt/tid.c
index 41ccc775079..dbf1fab11ce 100644
--- a/src/backend/utils/adt/tid.c
+++ b/src/backend/utils/adt/tid.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/adt/tid.c,v 1.57 2007/01/05 22:19:42 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/tid.c,v 1.58 2007/08/27 00:57:36 tgl Exp $
*
* NOTES
* input routine largely stolen from boxin().
@@ -24,7 +24,9 @@
#include "catalog/namespace.h"
#include "catalog/pg_type.h"
#include "libpq/pqformat.h"
+#include "miscadmin.h"
#include "parser/parsetree.h"
+#include "utils/acl.h"
#include "utils/builtins.h"
@@ -326,6 +328,7 @@ currtid_byreloid(PG_FUNCTION_ARGS)
ItemPointer tid = PG_GETARG_ITEMPOINTER(1);
ItemPointer result;
Relation rel;
+ AclResult aclresult;
result = (ItemPointer) palloc(sizeof(ItemPointerData));
if (!reloid)
@@ -335,6 +338,13 @@ currtid_byreloid(PG_FUNCTION_ARGS)
}
rel = heap_open(reloid, AccessShareLock);
+
+ aclresult = pg_class_aclcheck(RelationGetRelid(rel), GetUserId(),
+ ACL_SELECT);
+ if (aclresult != ACLCHECK_OK)
+ aclcheck_error(aclresult, ACL_KIND_CLASS,
+ RelationGetRelationName(rel));
+
if (rel->rd_rel->relkind == RELKIND_VIEW)
return currtid_for_view(rel, tid);
@@ -354,9 +364,17 @@ currtid_byrelname(PG_FUNCTION_ARGS)
ItemPointer result;
RangeVar *relrv;
Relation rel;
+ AclResult aclresult;
relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname));
rel = heap_openrv(relrv, AccessShareLock);
+
+ aclresult = pg_class_aclcheck(RelationGetRelid(rel), GetUserId(),
+ ACL_SELECT);
+ if (aclresult != ACLCHECK_OK)
+ aclcheck_error(aclresult, ACL_KIND_CLASS,
+ RelationGetRelationName(rel));
+
if (rel->rd_rel->relkind == RELKIND_VIEW)
return currtid_for_view(rel, tid);