Re: Quick coding question with acl fixes - Mailing list pgsql-hackers

From Christopher Kings-Lynne
Subject Re: Quick coding question with acl fixes
Date
Msg-id 4104702B.3050205@familyhealth.com.au
Whole thread Raw
In response to Re: Quick coding question with acl fixes  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
> Yeah, but the point was that he was doing an ALTER OWNER and needed to
> fix the ACL to match.  I thought he claimed to have written the needed
> subroutine.  I have not yet looked at his patch though.

I think Fabien's owner changing routine will end up being a strict 
subset of my routine.  I think his just happens to only work on the 
newly created public and info_schema in a new db.  It's not complex 
enough to work on arbitrary acls.  Also, his needs to work as a public 
SQL function:

+ /* acl acl_switch_grantor(acl, oldgrantor, newgrantor);
+  * switch grantor id in aclitem array.
+  * used internally for fixing owner rights in new databases.
+  * must be STRICT.
+  */
+ Datum acl_switch_grantor(PG_FUNCTION_ARGS)
+ {
+     Acl * acls = PG_GETARG_ACL_P_COPY(0);
+     int i,
+         old_grantor = PG_GETARG_INT32(1),
+         new_grantor = PG_GETARG_INT32(2);
+     AclItem * item;
+
+     for (i=0, item=ACL_DAT(acls); i<ACL_NUM(acls); i++, item++)
+         if (item->ai_grantor == old_grantor)
+             item->ai_grantor = new_grantor;
+
+     PG_RETURN_ACL_P(acls);
+ }

Chris



pgsql-hackers by date:

Previous
From: Christopher Kings-Lynne
Date:
Subject: Re: Improvements to PostgreSQL
Next
From: Tom Lane
Date:
Subject: Re: storage engine , mysql syntax CREATE TABLE t (i INT)