Disallow creation of a child table by a user who does not own the parent
authorTom Lane
Fri, 5 Jan 2001 02:58:16 +0000 (02:58 +0000)
committerTom Lane
Fri, 5 Jan 2001 02:58:16 +0000 (02:58 +0000)
table, per pghackers discussion around 22-Dec-00.

src/backend/commands/creatinh.c

index 38e2c3a418ed87248dd5be8a45bdf50dfbe3a8c4..22a34d2e5a39c88213da737747213311285e212c 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.69 2000/12/22 23:12:05 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/Attic/creatinh.c,v 1.70 2001/01/05 02:58:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -25,6 +25,7 @@
 #include "commands/creatinh.h"
 #include "miscadmin.h"
 #include "optimizer/clauses.h"
+#include "utils/acl.h"
 #include "utils/syscache.h"
 #include "utils/temprel.h"
 
@@ -384,6 +385,12 @@ MergeAttributes(List *schema, List *supers, bool istemp,
        if (!istemp && is_temp_rel_name(name))
            elog(ERROR, "CREATE TABLE: cannot inherit from temp relation \"%s\"", name);
 
+       /* We should have an UNDER permission flag for this, but for now,
+        * demand that creator of a child table own the parent.
+        */
+       if (!pg_ownercheck(GetUserId(), name, RELNAME))
+           elog(ERROR, "you do not own table \"%s\"", name);
+
        parentOids = lappendi(parentOids, relation->rd_id);
        setRelhassubclassInRelation(relation->rd_id, true);
        tupleDesc = RelationGetDescr(relation);