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 e9b7580afead59ce32324fe45f91998a58048222..2fb7632f0af21a400995779302a56c32c59c59b5 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 @@ -68,18 +68,6 @@ */ package ca.nrc.cadc.ac.server.ldap; -import javax.security.auth.x500.X500Principal; -import java.security.AccessControlException; -import java.security.Principal; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; - -import com.unboundid.ldap.sdk.*; -import com.unboundid.ldap.sdk.controls.ProxiedAuthorizationV2RequestControl; -import org.apache.log4j.Logger; - import ca.nrc.cadc.ac.PersonalDetails; import ca.nrc.cadc.ac.PosixDetails; import ca.nrc.cadc.ac.User; @@ -88,8 +76,29 @@ import ca.nrc.cadc.ac.UserNotFoundException; import ca.nrc.cadc.auth.AuthenticationUtil; import ca.nrc.cadc.auth.HttpPrincipal; import ca.nrc.cadc.net.TransientException; +import com.unboundid.ldap.sdk.AddRequest; +import com.unboundid.ldap.sdk.Attribute; +import com.unboundid.ldap.sdk.DN; +import com.unboundid.ldap.sdk.Filter; +import com.unboundid.ldap.sdk.LDAPException; +import com.unboundid.ldap.sdk.LDAPResult; +import com.unboundid.ldap.sdk.LDAPSearchException; +import com.unboundid.ldap.sdk.ResultCode; +import com.unboundid.ldap.sdk.SearchRequest; +import com.unboundid.ldap.sdk.SearchResult; +import com.unboundid.ldap.sdk.SearchResultEntry; +import com.unboundid.ldap.sdk.SearchScope; +import com.unboundid.ldap.sdk.controls.ProxiedAuthorizationV2RequestControl; +import java.security.AccessControlException; +import java.security.Principal; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import javax.security.auth.x500.X500Principal; +import org.apache.log4j.Logger; public class LdapUserDAO<T extends Principal> extends LdapDAO @@ -101,6 +110,7 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO // Returned User attributes protected static final String LDAP_OBJECT_CLASS = "objectClass"; + protected static final String LDAP_INET_ORG_PERSON = "inetOrgPerson"; protected static final String LDAP_CADC_ACCOUNT = "cadcaccount"; protected static final String LDAP_POSIX_ACCOUNT = "posixaccount"; protected static final String LDAP_NSACCOUNTLOCK = "nsaccountlock"; @@ -179,6 +189,8 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO // add new user DN userDN = getUserDN(user.getUserID().getName()); List<Attribute> attributes = new ArrayList<Attribute>(); + addAttribute(attributes, LDAP_OBJECT_CLASS, LDAP_INET_ORG_PERSON); + addAttribute(attributes, LDAP_UID, LDAP_CADC_ACCOUNT); addAttribute(attributes, LDAP_OBJECT_CLASS, LDAP_CADC_ACCOUNT); addAttribute(attributes, LDAP_COMMON_NAME, user.getUserID().getName()); addAttribute(attributes, LDAP_DISTINGUISHED_NAME, userDN.toNormalizedString()); @@ -215,7 +227,8 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO LDAPResult result = getConnection().add(addRequest); LdapDAO.checkLdapResult(result.getResultCode()); - + // AD: Search results sometimes come incomplete if + // connection is not reset - not sure why. getConnection().reconnect(); try { @@ -223,7 +236,8 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO } catch (UserNotFoundException e) { - throw new RuntimeException("BUG: new user not found"); + throw new RuntimeException("BUG: new user " + userDN.toNormalizedString() + + " not found, result " + result.getResultCode()); } } catch (LDAPException e) @@ -231,7 +245,7 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO System.out.println("LDAPe: " + e); System.out.println("LDAPrc: " + e.getResultCode()); logger.debug("addUser Exception: " + e, e); -// LdapDAO.checkLdapResult(e.getResultCode()); + LdapDAO.checkLdapResult(e.getResultCode()); throw new RuntimeException("Unexpected LDAP exception", e); } } @@ -255,8 +269,9 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO "Unsupported principal type " + userID.getClass()); } - searchField = "(&(objectclass=cadcaccount)(" + + searchField = "(&(objectclass=inetorgperson)(" + searchField + "=" + userID.getName() + "))"; + logger.debug(searchField); SearchResultEntry searchResult = null; try @@ -626,7 +641,7 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO { try { - return new DN(LDAP_COMMON_NAME + "=" + userID + "," + config.getUsersDN()); + return new DN(LDAP_UID + "=" + userID + "," + config.getUsersDN()); } catch (LDAPException e) { 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 72148d0eb9a6cfcb987b9b45050cb4703e74b4c6..99fba938224c256725ee730193e6f95292422b99 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 @@ -107,7 +107,7 @@ public class LdapUserDAOTest extends AbstractLdapDAOTest public static void setUpBeforeClass() throws Exception { - Log4jInit.setLevel("ca.nrc.cadc.ac", Level.INFO); + Log4jInit.setLevel("ca.nrc.cadc.ac", Level.DEBUG); // get the configuration of the development server from and config files... config = getLdapConfig();