diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java index ce7f40f632cc2c85fa49bf8a2e4ac0e06d906655..10a1a174d2087412e4125569a74c315c30138d63 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAO.java @@ -535,8 +535,18 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO else if (memberDN.isDescendantOf(config.getGroupsDN(), false)) { - ldapGroup.getGroupMembers().add(new Group( - memberDN.getRDNString().replace("cn=", ""))); + try + { + String memberGroupID = + memberDN.getRDNString().replace("cn=", ""); + ldapGroup.getGroupMembers(). + add(getGroup(memberGroupID)); + } + catch(GroupNotFoundException e) + { + // ignore as we are not cleaning up + // deleted groups from the group members + } } else { diff --git a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java index 6e44f437e27d8f6928306cce7734e33c6ae15b90..bad3d32ac6ec804357f8bae67f88707fdca8d619 100644 --- a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java +++ b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapGroupDAOTest.java @@ -266,8 +266,24 @@ public class LdapGroupDAOTest extends AbstractLdapDAOTest actualGroup = getGroupDAO().getGroup(expectGroup.getID()); assertGroupsEqual(expectGroup, actualGroup); + // create another group and make expected group + // member of that group. Delete expected group after + Group expectGroup2 = new Group(getGroupID(), daoTestUser1); + expectGroup2.getGroupAdmins().add(expectGroup); + expectGroup2.getGroupMembers().add(expectGroup); + Group actualGroup2 = getGroupDAO().addGroup(expectGroup2); + log.debug("addGroup: " + expectGroup2.getID()); + assertGroupsEqual(expectGroup2, actualGroup2); + // delete the group getGroupDAO().deleteGroup(expectGroup.getID()); + // now expectGroup should not be member of admin of + // expectGroup2 + expectGroup2.getGroupAdmins().remove(expectGroup); + expectGroup2.getGroupMembers().remove(expectGroup); + actualGroup2 = getGroupDAO().getGroup(expectGroup2.getID()); + log.debug("addGroup: " + expectGroup2.getID()); + assertGroupsEqual(expectGroup2, actualGroup2); return null; }