From 5cf1964fc6ba29db4119157410217ca98c5cc6ba Mon Sep 17 00:00:00 2001
From: "Marc G. Fournier" <scrappy@hub.org>
Date: Tue, 24 Feb 1998 03:31:50 +0000
Subject: [PATCH] From: Jan Wieck <jwieck@debis.com>

    So   if   the   relname   is   given   to   acldefault()   in
    utils/adt/acl.c, it can do a IsSystemRelationName() on it and
    return ACL_RD instead of ACL_WORLD_DEFAULT.
---
 src/backend/catalog/aclchk.c | 14 +++++++-------
 src/backend/utils/adt/acl.c  | 11 ++++++-----
 src/include/utils/acl.h      |  6 +++---
 3 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
index 06b1abf1d42..d3f786c48da 100644
--- a/src/backend/catalog/aclchk.c
+++ b/src/backend/catalog/aclchk.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.5 1998/02/11 19:09:42 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/aclchk.c,v 1.6 1998/02/24 03:31:45 scrappy Exp $
  *
  * NOTES
  *	  See acl.h.
@@ -39,7 +39,7 @@
 #include "utils/tqual.h"
 #include "fmgr.h"
 
-static int32 aclcheck(Acl *acl, AclId id, AclIdType idtype, AclMode mode);
+static int32 aclcheck(char *relname, Acl *acl, AclId id, AclIdType idtype, AclMode mode);
 
 /*
  * Enable use of user relations in place of real system catalogs.
@@ -150,7 +150,7 @@ ChangeAcl(char *relname,
 		elog(DEBUG, "ChangeAcl: using default ACL");
 #endif
 /*		old_acl = acldefault(((Form_pg_class) GETSTRUCT(htp))->relowner); */
-		old_acl = acldefault();
+		old_acl = acldefault(relname);
 		free_old_acl = 1;
 	}
 
@@ -281,7 +281,7 @@ in_group(AclId uid, AclId gid)
  * any one of the requirements of 'mode'.  Returns 0 otherwise.
  */
 static int32
-aclcheck(Acl *acl, AclId id, AclIdType idtype, AclMode mode)
+aclcheck(char *relname, Acl *acl, AclId id, AclIdType idtype, AclMode mode)
 {
 	unsigned i;
 	AclItem *aip,
@@ -292,7 +292,7 @@ aclcheck(Acl *acl, AclId id, AclIdType idtype, AclMode mode)
 	/* if no acl is found, use world default */
 	if (!acl)
 	{
-		acl = acldefault();
+		acl = acldefault(relname);
 	}
 
 	num = ACL_NUM(acl);
@@ -475,7 +475,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 									 Anum_pg_class_relowner,
 									 RelationGetTupleDescriptor(relation),
 									 (bool *) NULL);
-		acl = aclownerdefault(ownerId);
+		acl = aclownerdefault(relname, ownerId);
 	}
 #else
 	{							/* This is why the syscache is great... */
@@ -511,7 +511,7 @@ pg_aclcheck(char *relname, char *usename, AclMode mode)
 		heap_close(relation);
 	}
 #endif
-	result = aclcheck(acl, id, (AclIdType) ACL_IDTYPE_UID, mode);
+	result = aclcheck(relname, acl, id, (AclIdType) ACL_IDTYPE_UID, mode);
 	if (acl)
 		pfree(acl);
 	return (result);
diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
index 5ca72ed0174..afc4075de04 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.24 1998/02/11 19:12:03 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/acl.c,v 1.25 1998/02/24 03:31:47 scrappy Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -18,6 +18,7 @@
 #include <utils/memutils.h>
 #include "utils/acl.h"
 #include "utils/syscache.h"
+#include "catalog/catalog.h"
 #include "catalog/pg_user.h"
 #include "miscadmin.h"
 
@@ -342,7 +343,7 @@ aclitemgt(AclItem *a1, AclItem *a2)
 }
 
 Acl		   *
-aclownerdefault(AclId ownerid)
+aclownerdefault(char *relname, AclId ownerid)
 {
 	Acl		   *acl;
 	AclItem    *aip;
@@ -351,7 +352,7 @@ aclownerdefault(AclId ownerid)
 	aip = ACL_DAT(acl);
 	aip[0].ai_idtype = ACL_IDTYPE_WORLD;
 	aip[0].ai_id = ACL_ID_WORLD;
-	aip[0].ai_mode = ACL_WORLD_DEFAULT;
+	aip[0].ai_mode = IsSystemRelationName(relname) ? ACL_RD : ACL_WORLD_DEFAULT;
 	aip[1].ai_idtype = ACL_IDTYPE_UID;
 	aip[1].ai_id = ownerid;
 	aip[1].ai_mode = ACL_OWNER_DEFAULT;
@@ -359,7 +360,7 @@ aclownerdefault(AclId ownerid)
 }
 
 Acl		   *
-acldefault(void)
+acldefault(char *relname)
 {
 	Acl		   *acl;
 	AclItem    *aip;
@@ -368,7 +369,7 @@ acldefault(void)
 	aip = ACL_DAT(acl);
 	aip[0].ai_idtype = ACL_IDTYPE_WORLD;
 	aip[0].ai_id = ACL_ID_WORLD;
-	aip[0].ai_mode = ACL_WORLD_DEFAULT;
+	aip[0].ai_mode = IsSystemRelationName(relname) ? ACL_RD : ACL_WORLD_DEFAULT;
 	return (acl);
 }
 
diff --git a/src/include/utils/acl.h b/src/include/utils/acl.h
index 367dee0d987..d1dab54469a 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.14 1998/02/23 18:43:13 scrappy Exp $
+ * $Id: acl.h,v 1.15 1998/02/24 03:31:50 scrappy Exp $
  *
  * NOTES
  *	  For backward-compatability purposes we have to allow there
@@ -135,8 +135,8 @@ extern char *aclcheck_error_strings[];
 /*
  * routines used internally (parser, etc.)
  */
-extern Acl *aclownerdefault(AclId ownerid);
-extern Acl *acldefault(void);
+extern Acl *aclownerdefault(char *relname, AclId ownerid);
+extern Acl *acldefault(char *relname);
 extern Acl *aclinsert3(Acl *old_acl, AclItem *mod_aip, unsigned modechg);
 
 extern char *aclmakepriv(char *old_privlist, char new_priv);
-- 
GitLab