package org.ovirt.engine.core.itests.ldap; import java.util.ArrayList; import java.util.List; import javax.naming.Name; import org.springframework.ldap.core.DirContextAdapter; import org.springframework.ldap.core.DistinguishedName; import org.springframework.ldap.core.LdapTemplate; public class IPAGroupDaoImpl implements GroupDao { private LdapTemplate ldapTemplate; @Override public void create(Group group) { Name dn = buildDn(group); DirContextAdapter context = new DirContextAdapter(dn); mapToContext(group, context); getLdapTemplate().bind(dn, context, null); } protected Name buildDn(Group group) { return buildDn(group.getName()); } protected Name buildDn(String groupName) { DistinguishedName dn = new DistinguishedName(); dn.add("cn", "accounts"); dn.add("cn", "groups"); dn.add("cn", groupName); return dn; } protected List<String> getGroupMembers(Group group) { List<String> members = new ArrayList(); for (String currMember : group.getUserMembers()) { if (currMember.isEmpty()) { continue; } members.add("uid=" + currMember + ",cn=users,cn=accounts," + group.getDc()); } for (String currMember : group.getGroupMembers()) { if (currMember.isEmpty()) { continue; } members.add("cn=" + currMember + ",cn=groups,cn=accounts," + group.getDc()); } return members; } protected void mapToContext(Group group, DirContextAdapter context) { context.setAttributeValues("objectclass", new String[] { "top", "groupofnames", "nestedgroup", "ipausergroup", "ipaobject", "posixgroup" }); context.setAttributeValue("cn", group.getName()); context.setAttributeValue("gidNumber", group.getGidNumber()); context.setAttributeValues("member", getGroupMembers(group).toArray()); } @Override public void update(Group group) { Name dn = buildDn(group); DirContextAdapter context = (DirContextAdapter) getLdapTemplate().lookup(dn); mapToContext(group, context); getLdapTemplate().modifyAttributes(dn, context.getModificationItems()); } @Override public void delete(Group group) { ldapTemplate.unbind(buildDn(group)); } public LdapTemplate getLdapTemplate() { return ldapTemplate; } public void setLdapTemplate(LdapTemplate ldapTemplate) { this.ldapTemplate = ldapTemplate; } @Override public void create(Group... groups) { for (Group g : groups) { create(g); } } @Override public void delete(Group... groups) { for (Group g : groups) { delete(g); } } @Override public List runFilter(String filter) { return runFilter("", filter); } @Override public List runFilter(String baseDN, String filter) { return ldapTemplate.search(baseDN, filter, new IPAGroupContextMapper()); } }