access to dn.>
by users read
by * none
access to dn.sub="ou=groups,dc=example,dc=com"
attrs=objectClass,uniqueMember
by users read
by * none
access to dn.sub="ou=groups,dc=example,dc=com"
by dnattr="owner" write
by users none
by * none
access to dn.sub="ou=groups,dc=example,dc=com"
by set="this/owner/uniqueMember & user" write
by users none
by * none
(I know that having 'by users none' is redundant but it is there to be explicit)
The purpose of the ACLs is
1. Allow everyone to see the OU structure in the domain.
2. Allow everyone to see the OUs within the groups OU.
3. The intention here is to grant enough access to the attributes of a group so that slapd can then evaluate the uniqueMember attribute. It isn't entirely clear to me whether slapd needs a rule like this or should be able to evaluate membership etc before it applies acls for the user.
4. Allow directly mentioned owners to write, nothing to everyone else.
5. Allow indirectly mentioned owners to write, nothing to everyone else.
Thanks for any suggestions/observations.
Philip