Thread

  1. [PATCH v4 4/5] Use OBJECT_TABLE instead of OBJECT_RELATION for ACL

    Peter Eisentraut <peter_e@gmx.net> — 2018-01-16T18:59:05Z

    ---
     src/backend/catalog/aclchk.c         | 36 +++++++++++++++++-------------------
     src/backend/catalog/heap.c           |  2 +-
     src/backend/catalog/objectaddress.c  |  1 -
     src/backend/commands/event_trigger.c |  7 ++-----
     src/backend/parser/gram.y            |  8 ++++----
     src/backend/utils/adt/acl.c          |  4 ++--
     src/include/nodes/parsenodes.h       |  1 -
     src/include/utils/aclchk_internal.h  |  2 +-
     8 files changed, 27 insertions(+), 34 deletions(-)
    
    diff --git a/src/backend/catalog/aclchk.c b/src/backend/catalog/aclchk.c
    index a9cf354357..4eadd1a093 100644
    --- a/src/backend/catalog/aclchk.c
    +++ b/src/backend/catalog/aclchk.c
    @@ -247,7 +247,7 @@ restrict_and_check_grant(bool is_grant, AclMode avail_goptions, bool all_privs,
     		case OBJECT_COLUMN:
     			whole_mask = ACL_ALL_RIGHTS_COLUMN;
     			break;
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			whole_mask = ACL_ALL_RIGHTS_RELATION;
     			break;
     		case OBJECT_SEQUENCE:
    @@ -445,7 +445,7 @@ ExecuteGrantStmt(GrantStmt *stmt)
     	 */
     	switch (stmt->objtype)
     	{
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			/*
     			 * Because this might be a sequence, we test both relation and
     			 * sequence bits, and later do a more limited test when we know
    @@ -540,7 +540,7 @@ ExecuteGrantStmt(GrantStmt *stmt)
     			 */
     			if (privnode->cols)
     			{
    -				if (stmt->objtype != OBJECT_RELATION)
    +				if (stmt->objtype != OBJECT_TABLE)
     					ereport(ERROR,
     							(errcode(ERRCODE_INVALID_GRANT_OPERATION),
     							 errmsg("column privileges are only valid for relations")));
    @@ -574,7 +574,7 @@ ExecGrantStmt_oids(InternalGrant *istmt)
     {
     	switch (istmt->objtype)
     	{
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     		case OBJECT_SEQUENCE:
     			ExecGrant_Relation(istmt);
     			break;
    @@ -643,7 +643,7 @@ objectNamesToOids(ObjectType objtype, List *objnames)
     
     	switch (objtype)
     	{
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     		case OBJECT_SEQUENCE:
     			foreach(cell, objnames)
     			{
    @@ -798,7 +798,7 @@ objectsInSchemaToOids(ObjectType objtype, List *nspnames)
     
     		switch (objtype)
     		{
    -			case OBJECT_RELATION:
    +			case OBJECT_TABLE:
     				objs = getRelationsInNamespace(namespaceId, RELKIND_RELATION);
     				objects = list_concat(objects, objs);
     				objs = getRelationsInNamespace(namespaceId, RELKIND_VIEW);
    @@ -993,7 +993,7 @@ ExecAlterDefaultPrivilegesStmt(ParseState *pstate, AlterDefaultPrivilegesStmt *s
     	 */
     	switch (action->objtype)
     	{
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			all_privileges = ACL_ALL_RIGHTS_RELATION;
     			errormsg = gettext_noop("invalid privilege type %s for relation");
     			break;
    @@ -1184,7 +1184,7 @@ SetDefaultACL(InternalDefaultACL *iacls)
     	 */
     	switch (iacls->objtype)
     	{
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			objtype = DEFACLOBJ_RELATION;
     			if (iacls->all_privs && this_privileges == ACL_NO_RIGHTS)
     				this_privileges = ACL_ALL_RIGHTS_RELATION;
    @@ -1430,7 +1430,7 @@ RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid)
     		switch (pg_default_acl_tuple->defaclobjtype)
     		{
     			case DEFACLOBJ_RELATION:
    -				iacls.objtype = OBJECT_RELATION;
    +				iacls.objtype = OBJECT_TABLE;
     				break;
     			case DEFACLOBJ_SEQUENCE:
     				iacls.objtype = OBJECT_SEQUENCE;
    @@ -1471,8 +1471,8 @@ RemoveRoleFromObjectACL(Oid roleid, Oid classid, Oid objid)
     		switch (classid)
     		{
     			case RelationRelationId:
    -				/* it's OK to use RELATION for a sequence */
    -				istmt.objtype = OBJECT_RELATION;
    +				/* it's OK to use TABLE for a sequence */
    +				istmt.objtype = OBJECT_TABLE;
     				break;
     			case DatabaseRelationId:
     				istmt.objtype = OBJECT_DATABASE;
    @@ -1862,7 +1862,7 @@ ExecGrant_Relation(InternalGrant *istmt)
     		 * permissions.  The OR of table and sequence permissions were already
     		 * checked.
     		 */
    -		if (istmt->objtype == OBJECT_RELATION)
    +		if (istmt->objtype == OBJECT_TABLE)
     		{
     			if (pg_class_tuple->relkind == RELKIND_SEQUENCE)
     			{
    @@ -1944,7 +1944,7 @@ ExecGrant_Relation(InternalGrant *istmt)
     					old_acl = acldefault(OBJECT_SEQUENCE, ownerId);
     					break;
     				default:
    -					old_acl = acldefault(OBJECT_RELATION, ownerId);
    +					old_acl = acldefault(OBJECT_TABLE, ownerId);
     					break;
     			}
     			/* There are no old member roles according to the catalogs */
    @@ -1988,7 +1988,7 @@ ExecGrant_Relation(InternalGrant *istmt)
     					objtype = OBJECT_SEQUENCE;
     					break;
     				default:
    -					objtype = OBJECT_RELATION;
    +					objtype = OBJECT_TABLE;
     					break;
     			}
     
    @@ -3471,7 +3471,6 @@ aclcheck_error(AclResult aclerr, ObjectType objtype,
     					case OBJECT_DEFACL:
     					case OBJECT_DOMCONSTRAINT:
     					case OBJECT_PUBLICATION_REL:
    -					case OBJECT_RELATION:
     					case OBJECT_ROLE:
     					case OBJECT_RULE:
     					case OBJECT_TABCONSTRAINT:
    @@ -3604,7 +3603,6 @@ aclcheck_error(AclResult aclerr, ObjectType objtype,
     					case OBJECT_DEFACL:
     					case OBJECT_DOMCONSTRAINT:
     					case OBJECT_PUBLICATION_REL:
    -					case OBJECT_RELATION:
     					case OBJECT_ROLE:
     					case OBJECT_RULE:
     					case OBJECT_TABCONSTRAINT:
    @@ -3681,7 +3679,7 @@ pg_aclmask(ObjectType objtype, Oid table_oid, AttrNumber attnum, Oid roleid,
     			return
     				pg_class_aclmask(table_oid, roleid, mask, how) |
     				pg_attribute_aclmask(table_oid, attnum, roleid, mask, how);
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     		case OBJECT_SEQUENCE:
     			return pg_class_aclmask(table_oid, roleid, mask, how);
     		case OBJECT_DATABASE:
    @@ -3895,7 +3893,7 @@ pg_class_aclmask(Oid table_oid, Oid roleid,
     				acl = acldefault(OBJECT_SEQUENCE, ownerId);
     				break;
     			default:
    -				acl = acldefault(OBJECT_RELATION, ownerId);
    +				acl = acldefault(OBJECT_TABLE, ownerId);
     				break;
     		}
     		aclDatum = (Datum) 0;
    @@ -5467,7 +5465,7 @@ get_user_default_acl(ObjectType objtype, Oid ownerId, Oid nsp_oid)
     	/* Check if object type is supported in pg_default_acl */
     	switch (objtype)
     	{
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			defaclobjtype = DEFACLOBJ_RELATION;
     			break;
     
    diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
    index fd511ad62e..96234ff5c6 100644
    --- a/src/backend/catalog/heap.c
    +++ b/src/backend/catalog/heap.c
    @@ -1142,7 +1142,7 @@ heap_create_with_catalog(const char *relname,
     			case RELKIND_MATVIEW:
     			case RELKIND_FOREIGN_TABLE:
     			case RELKIND_PARTITIONED_TABLE:
    -				relacl = get_user_default_acl(OBJECT_RELATION, ownerid,
    +				relacl = get_user_default_acl(OBJECT_TABLE, ownerid,
     											  relnamespace);
     				break;
     			case RELKIND_SEQUENCE:
    diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c
    index d691b25aa6..d6043f5b66 100644
    --- a/src/backend/catalog/objectaddress.c
    +++ b/src/backend/catalog/objectaddress.c
    @@ -2112,7 +2112,6 @@ pg_get_object_address(PG_FUNCTION_ARGS)
     		case OBJECT_MATVIEW:
     		case OBJECT_INDEX:
     		case OBJECT_FOREIGN_TABLE:
    -		case OBJECT_RELATION:
     		case OBJECT_COLUMN:
     		case OBJECT_ATTRIBUTE:
     		case OBJECT_COLLATION:
    diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
    index 1dcdb07c29..b9662538df 100644
    --- a/src/backend/commands/event_trigger.c
    +++ b/src/backend/commands/event_trigger.c
    @@ -1108,7 +1108,6 @@ EventTriggerSupportsObjectType(ObjectType obtype)
     		case OBJECT_PROCEDURE:
     		case OBJECT_PUBLICATION:
     		case OBJECT_PUBLICATION_REL:
    -		case OBJECT_RELATION:
     		case OBJECT_ROUTINE:
     		case OBJECT_RULE:
     		case OBJECT_SCHEMA:
    @@ -2195,7 +2194,7 @@ stringify_grantobjtype(ObjectType objtype)
     	{
     		case OBJECT_COLUMN:
     			return "COLUMN";
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			return "TABLE";
     		case OBJECT_SEQUENCE:
     			return "SEQUENCE";
    @@ -2251,7 +2250,6 @@ stringify_grantobjtype(ObjectType objtype)
     		case OBJECT_STATISTIC_EXT:
     		case OBJECT_SUBSCRIPTION:
     		case OBJECT_TABCONSTRAINT:
    -		case OBJECT_TABLE:
     		case OBJECT_TRANSFORM:
     		case OBJECT_TRIGGER:
     		case OBJECT_TSCONFIGURATION:
    @@ -2278,7 +2276,7 @@ stringify_adefprivs_objtype(ObjectType objtype)
     	{
     		case OBJECT_COLUMN:
     			return "COLUMNS";
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			return "TABLES";
     		case OBJECT_SEQUENCE:
     			return "SEQUENCES";
    @@ -2334,7 +2332,6 @@ stringify_adefprivs_objtype(ObjectType objtype)
     		case OBJECT_STATISTIC_EXT:
     		case OBJECT_SUBSCRIPTION:
     		case OBJECT_TABCONSTRAINT:
    -		case OBJECT_TABLE:
     		case OBJECT_TRANSFORM:
     		case OBJECT_TRIGGER:
     		case OBJECT_TSCONFIGURATION:
    diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
    index e79113de51..348bdc77d1 100644
    --- a/src/backend/parser/gram.y
    +++ b/src/backend/parser/gram.y
    @@ -7002,7 +7002,7 @@ privilege_target:
     				{
     					PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget));
     					n->targtype = ACL_TARGET_OBJECT;
    -					n->objtype = OBJECT_RELATION;
    +					n->objtype = OBJECT_TABLE;
     					n->objs = $1;
     					$$ = n;
     				}
    @@ -7010,7 +7010,7 @@ privilege_target:
     				{
     					PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget));
     					n->targtype = ACL_TARGET_OBJECT;
    -					n->objtype = OBJECT_RELATION;
    +					n->objtype = OBJECT_TABLE;
     					n->objs = $2;
     					$$ = n;
     				}
    @@ -7122,7 +7122,7 @@ privilege_target:
     				{
     					PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget));
     					n->targtype = ACL_TARGET_ALL_IN_SCHEMA;
    -					n->objtype = OBJECT_RELATION;
    +					n->objtype = OBJECT_TABLE;
     					n->objs = $5;
     					$$ = n;
     				}
    @@ -7312,7 +7312,7 @@ DefACLAction:
     		;
     
     defacl_privilege_target:
    -			TABLES			{ $$ = OBJECT_RELATION; }
    +			TABLES			{ $$ = OBJECT_TABLE; }
     			| FUNCTIONS		{ $$ = OBJECT_FUNCTION; }
     			| ROUTINES		{ $$ = OBJECT_FUNCTION; }
     			| SEQUENCES		{ $$ = OBJECT_SEQUENCE; }
    diff --git a/src/backend/utils/adt/acl.c b/src/backend/utils/adt/acl.c
    index 42e3f6cc1a..0cfc297b65 100644
    --- a/src/backend/utils/adt/acl.c
    +++ b/src/backend/utils/adt/acl.c
    @@ -760,7 +760,7 @@ acldefault(ObjectType objtype, Oid ownerId)
     			world_default = ACL_NO_RIGHTS;
     			owner_default = ACL_NO_RIGHTS;
     			break;
    -		case OBJECT_RELATION:
    +		case OBJECT_TABLE:
     			world_default = ACL_NO_RIGHTS;
     			owner_default = ACL_ALL_RIGHTS_RELATION;
     			break;
    @@ -871,7 +871,7 @@ acldefault_sql(PG_FUNCTION_ARGS)
     			objtype = OBJECT_COLUMN;
     			break;
     		case 'r':
    -			objtype = OBJECT_RELATION;
    +			objtype = OBJECT_TABLE;
     			break;
     		case 's':
     			objtype = OBJECT_SEQUENCE;
    diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h
    index c55c427b13..b0ed8e51d9 100644
    --- a/src/include/nodes/parsenodes.h
    +++ b/src/include/nodes/parsenodes.h
    @@ -1645,7 +1645,6 @@ typedef enum ObjectType
     	OBJECT_PROCEDURE,
     	OBJECT_PUBLICATION,
     	OBJECT_PUBLICATION_REL,
    -	OBJECT_RELATION,
     	OBJECT_ROLE,
     	OBJECT_ROUTINE,
     	OBJECT_RULE,
    diff --git a/src/include/utils/aclchk_internal.h b/src/include/utils/aclchk_internal.h
    index 590ae5eee8..f7c44fcd4b 100644
    --- a/src/include/utils/aclchk_internal.h
    +++ b/src/include/utils/aclchk_internal.h
    @@ -26,7 +26,7 @@
      * Note: 'all_privs' and 'privileges' represent object-level privileges only.
      * There might also be column-level privilege specifications, which are
      * represented in col_privs (this is a list of untransformed AccessPriv nodes).
    - * Column privileges are only valid for objtype OBJECT_RELATION.
    + * Column privileges are only valid for objtype OBJECT_TABLE.
      */
     typedef struct
     {
    -- 
    2.15.1
    
    
    --------------9542E740EF1A89D80A2224F4
    Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0";
     name="v4-0005-Get-more-precise-return-values-from-get_object_ty.patch"
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment;
     filename*0="v4-0005-Get-more-precise-return-values-from-get_object_ty.pa";
     filename*1="tch"