I am new and am trying to implement a client in Java for Active Directory. So far I have written the following code:
import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; public class NewUser { public static void main(String[] args) { NewUser user = new NewUser("aaa", "bbb", "ccc", "orgunit"); try { System.out.print(user.addUser()); } catch (NamingException e) { e.printStackTrace(); } } private static final String DOMAIN_NAME = "whatever"; private static final String DOMAIN_ROOT = "dc=xyz"; // ? private static final String ADMIN_NAME = "CN=Administrator,CN=Users,DC=xyz,DC=xyz"; private static final String ADMIN_PASS = "xxxxxxx"; private static final String DOMAIN_URL = "ldap://xxx.xxx.xx.xx:389"; private String userName, firstName, lastName, organisationUnit; private LdapContext context; public NewUser(String userName, String firstName, String lastName, String organisationUnit) { this.userName = userName; this.firstName = firstName; this.lastName = lastName; this.organisationUnit = organisationUnit; Hashtable<String, String> env = new Hashtable<String, String>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, ADMIN_NAME); env.put(Context.SECURITY_CREDENTIALS, ADMIN_PASS); env.put(Context.PROVIDER_URL, DOMAIN_URL); try { this.context = new InitialLdapContext(env, null); } catch (NamingException e) { System.err.println("Problem creating object: "); e.printStackTrace(); } } public boolean addUser() throws NamingException { Attributes container = new BasicAttributes(); Attribute objClasses = new BasicAttribute("objectClass"); objClasses.add("top"); objClasses.add("person"); objClasses.add("organizationalPerson"); objClasses.add("user"); String cnValue = new StringBuffer(firstName).append(" ").append(lastName).toString(); Attribute cn = new BasicAttribute("cn", cnValue); Attribute sAMAccountName = new BasicAttribute("sAMAccountName", userName); Attribute principalName = new BasicAttribute("userPrincipalName", userName + "@" + DOMAIN_NAME); Attribute givenName = new BasicAttribute("givenName", firstName); Attribute sn = new BasicAttribute("sn", lastName); Attribute uid = new BasicAttribute("uid", userName); container.put(objClasses); container.put(sAMAccountName); container.put(principalName); container.put(cn); container.put(sn); container.put(givenName); container.put(uid); try { context.createSubcontext(getUserDN(cnValue, organisationUnit), container); return true; } catch (Exception e) { e.printStackTrace(); return false; } } private static String getUserDN(String aUsername, String aOU) { return "cn=" + aUsername + ",ou=" + aOU + "," + DOMAIN_ROOT; } }
All I need to do is create and add a user.
I have the following error:
javax.naming.PartialResultException: [LDAP: error code 10 - 0000202B: RefErr: DSID 031007F3, data 0, 1 access points
ref 1: 'xyz'
]; the remaining name is 'cn = bbb ccc, ou = orgunit, dc = xyz'