From 296efd806576392c50fa8ce32f56b5b36f2227e8 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Fri, 9 Jul 1999 03:28:53 +0000
Subject: [PATCH] Fix for ACL length problem on different platforms.

---
 doc/TODO                      | 28 +++++++++++++++-------------
 src/backend/utils/adt/acl.c   |  6 +++++-
 src/include/catalog/pg_type.h |  9 +++++++--
 src/include/utils/acl.h       |  7 ++++++-
 4 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/doc/TODO b/doc/TODO
index 384163174b..885cde5122 100644
--- a/doc/TODO
+++ b/doc/TODO
@@ -29,7 +29,7 @@ PARSER
 * Select a[1] FROM test fails, it needs test.a[1]
 * Array index references without table name cause problems
 * Update table SET table.value = 3 fails
-* Creating index of TIMESTAMP & RELTIME fails, rename to DATETIME(Thomas)
+* Creating index of TIMESTAMP & RELTIME fails, or rename to DATETIME(Thomas)
 * SELECT foo UNION SELECT foo is incorrectly simplified to SELECT foo
 * INSERT ... SELECT ... GROUP BY groups by target columns not source columns
 * CREATE TABLE test (a char(5) DEFAULT text '', b int4) fails on INSERT
@@ -50,18 +50,11 @@ ENHANCEMENTS
 
 URGENT
 
-* Add referential integrity
-* Add OUTER joins, left and right(Thomas)
+* Add referential integrity(Jan?)
+* Add OUTER joins, left and right(Thomas, Bruce)
 * Allow long tuples by chaining or auto-storing outside db (chaining,large objs)
 * Eliminate limits on query length
-* Fix memory leak for expressions?, aggregates?
-
-EXOTIC FEATURES
-
-* Add sql3 recursive unions
-* Add the concept of dataspaces
-* Add replication of distributed databases
-* Allow queries across multiple databases
+* Fix memory leak for expressions?, aggregates?(Tom?)
 
 ADMIN
 
@@ -85,6 +78,7 @@ TYPES
 	o Allow large text type to use large objects(Peter)
 	o Not to stuff everything as files in a single directory, hash dirs
 	o Allow large object vacuuming
+	o Tables that start with xinv confused to be large objects
 * Allow pg_descriptions when creating types, tables, columns, and functions
 * Add IPv6 capability to INET/CIDR types
 * Make a separate SERIAL type?
@@ -129,6 +123,7 @@ COMMANDS
 * Rewrite the LIKE handling by rewriting the user string with the 
   supplied ESCAPE
 * Move LIKE index optimization handling to the optimizer
+* Allow RULE recomplation
   
 CLIENTS
 
@@ -141,6 +136,13 @@ CLIENTS
 * Allow psql to print nulls as distinct from ""(?)
 * PQrequestCancel() be able to terminate backend waiting for lock
 
+EXOTIC FEATURES
+
+* Add sql3 recursive unions
+* Add the concept of dataspaces
+* Add replication of distributed databases
+* Allow queries across multiple databases
+
 MISC
 
 * Increase identifier length(NAMEDATALEN) if small performance hit
@@ -167,8 +169,8 @@ MISC
 * Missing optimizer selectivities for date, r-tree, etc.
 * Overhaul mdmgr/smgr to fix double unlinking and double opens, cleanup
 * Overhaul bufmgr/lockmgr/transaction manager
-* Tables that start with xinv confused to be large objects
 * Add PL/Perl(Mark Hollomon)
+* Make postgres user have a password by default
 
 
 PERFORMANCE
@@ -223,7 +225,7 @@ MISC
 * improve dynamic memory allocation by introducing tuple-context memory
   allocation
 * fix memory leak in cache code when non-existant table is referenced
-* In WHERE x=3 AND x=y, add y=3
+* In WHERE tab1.x=3 AND tab1.x=tab2.y, add tab2.y=3
 * pass atttypmod through parser in more cases(Bruce)
 * remove duplicate type in/out functions for disk and net
 
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index b1fc557498..b456a5f6c7 100644
--- a/src/backend/utils/adt/acl.c
+++ b/src/backend/utils/adt/acl.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.36 1999/05/25 16:11:49 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.37 1999/07/09 03:28:51 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -20,6 +20,7 @@
 #include "utils/syscache.h"
 #include "catalog/catalog.h"
 #include "catalog/pg_shadow.h"
+#include "catalog/pg_type.h"
 #include "miscadmin.h"
 
 static char *getid(char *s, char *n);
@@ -682,6 +683,9 @@ makeAclStmt(char *privileges, List *rel_list, char *grantee,
 	ChangeACLStmt *n = makeNode(ChangeACLStmt);
 	char		str[MAX_PARSE_BUFFER];
 
+	/* see comment in pg_type.h */
+	Assert(ACLITEMSIZE == sizeof(AclItem));
+
 	n->aclitem = (AclItem *) palloc(sizeof(AclItem));
 
 	/* the grantee string is "G <group_name>", "U  <user_name>", or "ALL" */
diff --git a/src/include/catalog/pg_type.h b/src/include/catalog/pg_type.h
index 0bd12530c9..d60bc86201 100644
--- a/src/include/catalog/pg_type.h
+++ b/src/include/catalog/pg_type.h
@@ -7,7 +7,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_type.h,v 1.62 1999/05/25 16:13:48 momjian Exp $
+ * $Id: pg_type.h,v 1.63 1999/07/09 03:28:52 momjian Exp $
  *
  * NOTES
  *	  the genbki.sh script reads this file and generates .bki
@@ -341,7 +341,12 @@ DATA(insert OID = 1024 (  _reltime	 PGUID -1  -1 f b t \054 0 703 array_in array
 DATA(insert OID = 1025 (  _tinterval PGUID -1  -1 f b t \054 0 704 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1026 (  _filename  PGUID -1  -1 f b t \054 0 605 array_in array_out array_in array_out i _null_ ));
 DATA(insert OID = 1027 (  _polygon	 PGUID -1  -1 f b t \054 0 604 array_in array_out array_in array_out d _null_ ));
-/* Note: the size of an aclitem needs to match sizeof(AclItem) in acl.h */
+/*
+ *	Note: the size of aclitem needs to match sizeof(AclItem) in acl.h.
+ *	Thanks to some padding, this will be 8 on all platforms.
+ *	We also have an Assert to make sure.
+ */
+#define ACLITEMSIZE	8
 DATA(insert OID = 1033 (  aclitem	 PGUID 8   -1 f b t \054 0 0 aclitemin aclitemout aclitemin aclitemout i _null_ ));
 DESCR("access control list");
 DATA(insert OID = 1034 (  _aclitem	 PGUID -1 -1 f b t \054 0 1033 array_in array_out array_in array_out i _null_ ));
diff --git a/src/include/utils/acl.h b/src/include/utils/acl.h
index 6dc4502efd..95e68fdf07 100644
--- a/src/include/utils/acl.h
+++ b/src/include/utils/acl.h
@@ -6,7 +6,7 @@
  *
  * Copyright (c) 1994, Regents of the University of California
  *
- * $Id: acl.h,v 1.19 1999/02/13 23:22:14 momjian Exp $
+ * $Id: acl.h,v 1.20 1999/07/09 03:28:53 momjian Exp $
  *
  * NOTES
  *	  For backward-compatability purposes we have to allow there
@@ -74,6 +74,11 @@ typedef struct AclItem
 	AclId		ai_id;
 	AclIdType	ai_idtype;
 	AclMode		ai_mode;
+	/*
+	 *	This is actually type 'aclitem', and we want a fixed size for
+	 *	for all platforms, so we pad this with dummies.
+	 */
+	char		dummy1, dummy2;
 } AclItem;
 
 /* Note: if the size of AclItem changes,