package org.acegisecurity.ldap; import org.apache.directory.server.core.unit.AbstractAdminTestCase; import org.apache.directory.server.core.jndi.CoreContextFactory; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttributes; import javax.naming.directory.Attribute; import javax.naming.directory.BasicAttribute; import javax.naming.directory.SearchResult; import javax.naming.directory.SearchControls; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.NamingEnumeration; import javax.naming.Context; import java.util.Hashtable; /** * @author Luke Taylor * @version $Id$ */ public class DIRSERVER169TestCase extends AbstractAdminTestCase { protected void setUp() throws Exception { super.setUp(); Attributes people = new BasicAttributes( true ); Attribute attribute = new BasicAttribute( "objectClass" ); attribute.add( "top" ); attribute.add( "organizationalUnit" ); people.put( attribute ); people.put( "ou", "people" ); sysRoot.createSubcontext( "ou=people", people ); Attributes user = new BasicAttributes("uid", "bob"); user.put("cn", "Bob Hamilton"); user.put("userPassword", "bobspassword".getBytes("UTF-8")); Attribute objectClass = new BasicAttribute("objectClass"); user.put(objectClass); objectClass.add("top"); objectClass.add("person"); objectClass.add("organizationalPerson"); objectClass.add("inetOrgPerson"); user.put("sn", "Hamilton"); sysRoot.createSubcontext("uid=bob,ou=people", user); System.out.println(sysRoot.getNameInNamespace()); } public void testSearchResultNameIsRelativeToSearchContext() throws Exception { Hashtable env = configuration.toJndiEnvironment(); env.put(Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName()); env.put(Context.PROVIDER_URL, "ou=system"); DirContext ctx = new InitialDirContext(env); SearchControls ctls = new SearchControls(); String searchBase = "ou=people"; String[] args = new String[] { "bob" }; NamingEnumeration results = ctx.search(searchBase, "(uid={0})", args, ctls); assertTrue(results.hasMore()); SearchResult searchResult = (SearchResult)results.next(); StringBuffer userDn = new StringBuffer(searchResult.getName()); if(searchBase.length() > 0) { userDn.append(","); userDn.append(searchBase); } userDn.append(","); userDn.append(ctx.getNameInNamespace()); assertEquals("uid=bob,ou=people,"+sysRoot.getNameInNamespace(), userDn.toString()); } public void testPasswordComparisonSucceeds() throws Exception { Hashtable env = configuration.toJndiEnvironment(); env.put(Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName()); env.put(Context.PROVIDER_URL, "ou=system"); DirContext ctx = new InitialDirContext(env); SearchControls ctls = new SearchControls(); ctls.setReturningAttributes(new String[0]); ctls.setSearchScope(SearchControls.OBJECT_SCOPE); String filter = "(userPassword={0})"; NamingEnumeration results = ctx.search("uid=bob,ou=people", filter, new Object[]{"bobspassword".getBytes("UTF-8")}, ctls); // We should have a match assertTrue(results.hasMore()); } public static void main(String[] args) throws Exception { new ApacheDSBugTests().setUp(); } }