diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java index 7637d7281f81860117e0f9d4157b3579bf51f039..bdfa4e05c79516396085e5ffb90d031dc2d7c3e2 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/GroupPersistence.java @@ -118,10 +118,13 @@ public abstract interface GroupPersistence<T extends Principal> * @throws TransientException If an temporary, unexpected problem occurred. * @throws AccessControlException If the operation is not permitted. * @throws UserNotFoundException If owner or a member not valid user. + * @throws GroupNotFoundException if one of the groups in group members or + * group admins does not exist in the server. */ public abstract Group addGroup(Group group) throws GroupAlreadyExistsException, TransientException, - AccessControlException, UserNotFoundException; + AccessControlException, UserNotFoundException, + GroupNotFoundException; /** * Deletes the group. 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 64fe6d8c18ba61e60d44f161819c0a0f4a8f30c3..e09dfdce09a84ddb0e20b12fd4fd7f95f3b32024 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 @@ -135,10 +135,12 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO * exists. * @throws TransientException If an temporary, unexpected problem occurred. * @throws UserNotFoundException If owner or a member not valid user. + * @throws GroupNotFoundException */ public Group addGroup(final Group group) throws GroupAlreadyExistsException, TransientException, - UserNotFoundException, AccessControlException + UserNotFoundException, AccessControlException, + GroupNotFoundException { if (group.getOwner() == null) { @@ -205,7 +207,8 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO final DN ownerDN, final String description, final Set<User<? extends Principal>> users, final Set<Group> groups) - throws UserNotFoundException, LDAPException, TransientException, AccessControlException + throws UserNotFoundException, LDAPException, TransientException, + AccessControlException, GroupNotFoundException { // add new group List<Attribute> attributes = new ArrayList<Attribute>(); @@ -228,6 +231,10 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO } for (Group groupMember : groups) { + if (!checkGroupExists(groupID)) + { + throw new GroupNotFoundException(groupID); + } DN memberDN = getGroupDN(groupMember.getID()); members.add(memberDN.toNormalizedString()); } @@ -316,7 +323,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO * @throws TransientException If an temporary, unexpected problem occurred. */ public Collection<String> getGroupNames() - throws TransientException, AccessControlException + throws TransientException { try { @@ -604,6 +611,10 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO } for (Group gr : group.getGroupMembers()) { + if (!checkGroupExists(gr.getID())) + { + throw new GroupNotFoundException(gr.getID()); + } DN grDN = getGroupDN(gr.getID()); newMembers.add(grDN.toNormalizedString()); } @@ -615,6 +626,10 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO } for (Group gr : group.getGroupAdmins()) { + if (!checkGroupExists(gr.getID())) + { + throw new GroupNotFoundException(gr.getID()); + } DN grDN = getGroupDN(gr.getID()); newAdmins.add(grDN.toNormalizedString()); } @@ -1001,5 +1016,18 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO throw new RuntimeException(e); } } + + private boolean checkGroupExists(String groupID) + throws TransientException + { + for (String groupName : getGroupNames()) + { + if (groupName.equalsIgnoreCase(groupID)) + { + return true; + } + } + return false; + } } diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java index 66727c6e5969dde414d01855feda403560ba99d8..f59bc1518d82c3522bf0cd104bc3ca8fecfc7ebf 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapGroupPersistence.java @@ -147,7 +147,8 @@ public class LdapGroupPersistence<T extends Principal> public Group addGroup(Group group) throws GroupAlreadyExistsException, TransientException, - AccessControlException, UserNotFoundException + AccessControlException, UserNotFoundException, + GroupNotFoundException { LdapGroupDAO<T> groupDAO = null; LdapUserDAO<T> userDAO = null; diff --git a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java index e92c1cbc65977bdfbea510d4605e4f37af014ba9..926d41ae83f0909c34654ac76fdcef8880a90fa2 100644 --- a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java +++ b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapDAOTest.java @@ -182,7 +182,7 @@ public class LdapDAOTest private void testConnection(final LDAPConnection ldapCon) { assertTrue("Not connected but should be.", ldapCon.isConnected()); - assertFalse("Should be SSLSocketFactory.", + assertTrue("Should be SSLSocketFactory.", (ldapCon.getSocketFactory() instanceof SSLSocketFactory)); } } 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 a74ba612cab40a922fa99e692411f388bb4e83bf..79866c3d6c8cda52eaa947e561e7d45f89fce1f6 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 @@ -65,9 +65,9 @@ public class LdapGroupDAOTest { private static final Logger log = Logger.getLogger(LdapGroupDAOTest.class); - static String usersDN = "ou=Users,ou=ds,dc=canfartest,dc=net"; - static String groupsDN = "ou=Groups,ou=ds,dc=canfartest,dc=net"; - static String adminGroupsDN = "ou=adminGroups,ou=ds,dc=canfartest,dc=net"; + static String usersDN = "ou=Users,ou=ds,dc=testcanfar"; + static String groupsDN = "ou=Groups,ou=ds,dc=testcanfar"; + static String adminGroupsDN = "ou=adminGroups,ou=ds,dc=testcanfar"; static String daoTestDN1 = "cn=cadcdaotest1,ou=cadc,o=hia,c=ca"; static String daoTestDN2 = "cn=cadcdaotest2,ou=cadc,o=hia,c=ca"; diff --git a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java index a00cc0a11101a65fd0d0d51bd0f0c40265eb455d..dd1e86bf2432570c9ab6d58aae9dfd6375ccde2e 100644 --- a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java +++ b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAOTest.java @@ -101,9 +101,9 @@ public class LdapUserDAOTest { private static final Logger log = Logger.getLogger(LdapUserDAOTest.class); - static String usersDN = "ou=Users,ou=ds,dc=canfartest,dc=net"; - static String groupsDN = "ou=Groups,ou=ds,dc=canfartest,dc=net"; - static String adminGroupsDN = "ou=adminGroups,ou=ds,dc=canfartest,dc=net"; + static String usersDN = "ou=Users,ou=ds,dc=testcanfar"; + static String groupsDN = "ou=Groups,ou=ds,dc=testcanfar"; + static String adminGroupsDN = "ou=adminGroups,ou=ds,dc=testcanfar"; // static String userBaseDN = "ou=Users,ou=ds,dc=canfar,dc=net"; // static String groupBaseDN = "ou=Groups,ou=ds,dc=canfar,dc=net";