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


---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly

Reply via email to