diff options
| author | Marc G. Fournier <scrappy@hub.org> | 1998-02-24 03:31:50 +0000 | 
|---|---|---|
| committer | Marc G. Fournier <scrappy@hub.org> | 1998-02-24 03:31:50 +0000 | 
| commit | 5cf1964fc6ba29db4119157410217ca98c5cc6ba (patch) | |
| tree | 095201822ce71c59cdbfb3bb0621ba964e0a96f6 | |
| parent | 751ebd20a04ea38ae3412b5c2a1fec5efd36ef8d (diff) | |
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.
| -rw-r--r-- | src/backend/catalog/aclchk.c | 14 | ||||
| -rw-r--r-- | src/backend/utils/adt/acl.c | 11 | ||||
| -rw-r--r-- | 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);  | 
