aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/command.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/command.c')
-rw-r--r--src/backend/commands/command.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c
index 38cee644b22..48d2b4cbc34 100644
--- a/src/backend/commands/command.c
+++ b/src/backend/commands/command.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.77 2000/06/04 22:04:32 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.78 2000/06/09 15:50:43 momjian Exp $
*
* NOTES
* The PortalExecutorHeapMemory crap needs to be eliminated
@@ -30,6 +30,7 @@
#include "commands/command.h"
#include "executor/spi.h"
#include "catalog/heap.h"
+#include "catalog/pg_shadow.h"
#include "miscadmin.h"
#include "optimizer/prep.h"
#include "utils/acl.h"
@@ -1211,6 +1212,21 @@ LockTableCommand(LockStmt *lockstmt)
{
Relation rel;
int aclresult;
+ HeapTuple tup;
+
+
+ /* ----------
+ * Check pg_shadow for global lock setting
+ * ----------
+ */
+ tup = SearchSysCacheTuple(SHADOWNAME, PointerGetDatum(GetPgUserName()), 0, 0, 0);
+
+ if (!HeapTupleIsValid(tup))
+ elog(ERROR, "LOCK TABLE: look at pg_shadow failed");
+
+ if (!((Form_pg_shadow) GETSTRUCT(tup))->uselocktable)
+ elog(ERROR, "LOCK TABLE: permission denied");
+
rel = heap_openr(lockstmt->relname, NoLock);
if (!RelationIsValid(rel))