From 0823ca913540a010cf7a03b76e3bd72a19dbbb93 Mon Sep 17 00:00:00 2001 From: Adrian Damian <Adrian.Damian@nrc-cnrc.gc.ca> Date: Thu, 11 Sep 2014 15:46:16 -0700 Subject: [PATCH] Fixed unit testing to work with the agreed ldap acis --- .../nrc/cadc/ac/server/ldap/LdapGroupDAO.java | 25 ++++++-------- .../nrc/cadc/ac/server/ldap/LdapUserDAO.java | 33 +++++++++++++++---- .../nrc/cadc/ac/server/ldap/LdapDAOTest.java | 2 +- .../cadc/ac/server/ldap/LdapGroupDAOTest.java | 8 ++--- .../cadc/ac/server/ldap/LdapUserDAOTest.java | 2 +- .../src/ca/nrc/cadc/ac/Group.java | 4 +-- 6 files changed, 44 insertions(+), 30 deletions(-) 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 e1b8af7e..f15ba746 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 @@ -114,7 +114,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO "(groupdn = \"ldap:///<ACTUAL_GROUP>\");)"; private static final String PUB_GROUP_ACI = "(targetattr = \"*\") " + "(version 3.0;acl \"Group Public\";" + - "allow (read,compare,search)userdn=\"ldap:///anyone\";)"; + "allow (read,compare,search)userdn=\"ldap:///all\";)"; private LdapUserDAO<T> userPersist; @@ -327,7 +327,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO Filter filter = Filter.createANDFilter( Filter.createEqualityFilter("cn", groupID), Filter.createNOTFilter( - Filter.createEqualityFilter("nsaccountlock", "true"))); + Filter.createEqualityFilter("nsaccountlock", "TRUE"))); SearchRequest searchRequest = new SearchRequest( config.getGroupsDN(), SearchScope.SUB, @@ -379,7 +379,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO User<X500Principal> user; try { - user = userPersist.getMember(memberDN); + user = userPersist.getMember(memberDN, false); } catch (UserNotFoundException e) { @@ -391,8 +391,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO else if (memberDN.isDescendantOf(config.getGroupsDN(), false)) { - Group memberGroup = getGroup(memberDN); - ldapGroup.getGroupMembers().add(memberGroup); + ldapGroup.getGroupMembers().add(new Group(memberDN.getRDNString().replace("cn=", ""))); } else { @@ -412,10 +411,10 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO // TODO it's gotta be a better way to do this. String grRead = aci.substring( aci.indexOf("ldap:///")); - grRead = grRead.substring(grRead.indexOf("cn"), - grRead.lastIndexOf('"')); + grRead = grRead.substring(grRead.indexOf("cn=") + 3, + grRead.indexOf(',')); - Group groupRead = getGroup(new DN(grRead)); + Group groupRead = new Group(grRead.trim()); ldapGroup.groupRead = groupRead; } else if (aci.contains("Group Write")) @@ -423,10 +422,10 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO // TODO it's gotta be a better way to do this. String grWrite = aci.substring( aci.indexOf("ldap:///")); - grWrite = grWrite.substring(grWrite.indexOf("cn"), - grWrite.lastIndexOf('"')); + grWrite = grWrite.substring(grWrite.indexOf("cn=") + 3, + grWrite.indexOf(',')); - Group groupWrite = getGroup(new DN(grWrite)); + Group groupWrite = getGroup(grWrite.trim()); ldapGroup.groupWrite = groupWrite; } else if (aci.equals(PUB_GROUP_ACI)) @@ -446,10 +445,6 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO // access control throw new TransientException("Error getting the group", e1); } - catch (UserNotFoundException e2) - { - throw new RuntimeException("BUG - owner or member not found", e2); - } } /** diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java index b4243307..b58ade6f 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java @@ -129,7 +129,7 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO "Unsupported principal type " + userID.getClass()); } - searchField = "(" + searchField + "=" + userID.getName() + ")"; + searchField = "(&(objectclass=cadcaccount)(" + searchField + "=" + userID.getName() + "))"; SearchResultEntry searchResult = null; try @@ -137,7 +137,7 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO SearchRequest searchRequest = new SearchRequest(config.getUsersDN(), SearchScope.SUB, searchField, new String[] {"cn", "entryid", "entrydn", "dn"}); - + searchRequest.addControl( new ProxiedAuthorizationV2RequestControl("dn:" + getSubjectDN().toNormalizedString())); @@ -164,7 +164,7 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO searchResult.getAttributeValueAsInteger("entryid"))); return user; - } + } /** * Get all groups the user specified by userID belongs to. @@ -335,11 +335,14 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO /** * Returns a member user identified by the X500Principal only. * @param userDN + * @param bindAsSubject - true if Ldap commands executed as subject + * (proxy authorization) or false if they are executed as the user + * in the connection. * @return * @throws UserNotFoundException * @throws LDAPException */ - User<X500Principal> getMember(DN userDN) + User<X500Principal> getMember(DN userDN, boolean bindAsSubject) throws UserNotFoundException, LDAPException { Filter filter = @@ -352,9 +355,12 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO (String[]) this.attribType.values().toArray( new String[this.attribType.values().size()])); - searchRequest.addControl( - new ProxiedAuthorizationV2RequestControl("dn:" + - getSubjectDN().toNormalizedString())); + if (bindAsSubject) + { + searchRequest.addControl( + new ProxiedAuthorizationV2RequestControl("dn:" + + getSubjectDN().toNormalizedString())); + } SearchResultEntry searchResult = getConnection().searchForEntry(searchRequest); @@ -371,6 +377,19 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO return user; } + + /** + * Returns a member user identified by the X500Principal only. + * @param userDN + * @return + * @throws UserNotFoundException + * @throws LDAPException + */ + User<X500Principal> getMember(DN userDN) + throws UserNotFoundException, LDAPException + { + return getMember(userDN, true); + } DN getUserDN(User<? extends Principal> user) throws LDAPException, UserNotFoundException 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 da506f72..9a2c2cad 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 @@ -87,7 +87,7 @@ public class LdapDAOTest { static String server = "mach275.cadc.dao.nrc.ca"; static int port = 389; - static String adminDN = "uid=webproxy,ou=administrators,ou=topologymanagement,o=netscaperoot"; + static String adminDN = "uid=webproxy,ou=WebProxy,ou=topologymanagement,o=netscaperoot"; static String adminPW = "go4it"; static String userBaseDN = "ou=Users,ou=ds,dc=canfartest,dc=net"; static String groupBaseDN = "ou=Groups,ou=ds,dc=canfartest,dc=net"; 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 f03f82a9..cdde99c2 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 @@ -70,10 +70,10 @@ public class LdapGroupDAOTest static int port = 389; static String adminDN = "uid=webproxy,ou=webproxy,ou=topologymanagement,o=netscaperoot"; static String adminPW = "go4it"; -// static String userBaseDN = "ou=Users,ou=ds,dc=canfartest,dc=net"; -// static String groupBaseDN = "ou=Groups,ou=ds,dc=canfartest,dc=net"; - static String userBaseDN = "ou=Users,ou=ds,dc=canfar,dc=net"; - static String groupBaseDN = "ou=Groups,ou=ds,dc=canfar,dc=net"; + static String userBaseDN = "ou=Users,ou=ds,dc=canfartest,dc=net"; + static String groupBaseDN = "ou=Groups,ou=ds,dc=canfartest,dc=net"; + //static String userBaseDN = "ou=Users,ou=ds,dc=canfar,dc=net"; + //static String groupBaseDN = "ou=Groups,ou=ds,dc=canfar,dc=net"; 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 84ed2d88..a742fe5b 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 @@ -94,7 +94,7 @@ public class LdapUserDAOTest static String server = "mach275.cadc.dao.nrc.ca"; static int port = 389; - static String adminDN = "uid=webproxy,ou=administrators,ou=topologymanagement,o=netscaperoot"; + static String adminDN = "uid=webproxy,ou=Webproxy,ou=topologymanagement,o=netscaperoot"; static String adminPW = "go4it"; static String userBaseDN = "ou=Users,ou=ds,dc=canfartest,dc=net"; static String groupBaseDN = "ou=Groups,ou=ds,dc=canfartest,dc=net"; diff --git a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/Group.java b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/Group.java index 3bb88cd4..f4e11a97 100644 --- a/projects/cadcAccessControl/src/ca/nrc/cadc/ac/Group.java +++ b/projects/cadcAccessControl/src/ca/nrc/cadc/ac/Group.java @@ -199,7 +199,7 @@ public class Group @Override public int hashCode() { - return 31 + groupID.hashCode(); + return 31 + groupID.toLowerCase().hashCode(); } /* (non-Javadoc) @@ -221,7 +221,7 @@ public class Group return false; } Group other = (Group) obj; - if (!groupID.equals(other.groupID)) + if (!groupID.equalsIgnoreCase(other.groupID)) { return false; } -- GitLab