You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2008/06/07 09:48:20 UTC
svn commit: r664295 [5/5] - in /directory/apacheds/branches/bigbang: ./
apacheds-jdbm/src/examples/ apacheds-jdbm/src/main/java/jdbm/
apacheds-jdbm/src/main/java/jdbm/btree/
bootstrap-extract/src/main/java/org/apache/directory/server/schema/bootstrap/p...
Modified: directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java (original)
+++ directory/apacheds/branches/bigbang/server-jndi/src/main/java/org/apache/directory/server/configuration/ApacheDS.java Sat Jun 7 00:48:16 2008
@@ -99,9 +99,9 @@
{
this.directoryService = new DefaultDirectoryService();
}
- else
- {
- this.directoryService = directoryService;
+ else
+ {
+ this.directoryService = directoryService;
}
this.ldapServer = ldapServer;
Modified: directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java (original)
+++ directory/apacheds/branches/bigbang/server-tools/src/main/java/org/apache/directory/server/tools/ImportCommand.java Sat Jun 7 00:48:16 2008
@@ -657,14 +657,11 @@
if ( ldifReader.containsEntries() )
{
// Parse the file and inject every entry
- Iterator<LdifEntry> entries = ldifReader.iterator();
long t0 = System.currentTimeMillis();
int nbAdd = 0;
- while ( entries.hasNext() )
+ for ( LdifEntry entry:ldifReader )
{
- LdifEntry entry = entries.next();
-
// Check if we have had some error, has next() does not throw any exception
if ( ldifReader.hasError() )
{
@@ -709,14 +706,11 @@
else
{
// Parse the file and inject every modification
- Iterator<LdifEntry> entries = ldifReader.iterator();
long t0 = System.currentTimeMillis();
int nbMod = 0;
- while ( entries.hasNext() )
+ for ( LdifEntry entry:ldifReader )
{
- LdifEntry entry = entries.next();
-
// Check if we have had some error, has next() does not throw any exception
if ( ldifReader.hasError() )
{
Modified: directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/main/java/org/apache/directory/server/unit/AbstractServerTest.java Sat Jun 7 00:48:16 2008
@@ -20,36 +20,51 @@
package org.apache.directory.server.unit;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
+
import org.apache.commons.io.FileUtils;
import org.apache.directory.server.constants.ServerDNConstants;
import org.apache.directory.server.core.DefaultDirectoryService;
import org.apache.directory.server.core.DirectoryService;
import org.apache.directory.server.core.jndi.CoreContextFactory;
import org.apache.directory.server.ldap.LdapServer;
+import org.apache.directory.server.ldap.handlers.bind.CramMd5MechanismHandler;
+import org.apache.directory.server.ldap.handlers.bind.DigestMd5MechanismHandler;
+import org.apache.directory.server.ldap.handlers.bind.GssapiMechanismHandler;
+import org.apache.directory.server.ldap.handlers.bind.MechanismHandler;
+import org.apache.directory.server.ldap.handlers.bind.SimpleMechanismHandler;
+import org.apache.directory.server.ldap.handlers.bind.ntlm.NtlmMechanismHandler;
import org.apache.directory.server.ldap.handlers.extended.StartTlsHandler;
import org.apache.directory.server.ldap.handlers.extended.StoredProcedureExtendedOperationHandler;
-import org.apache.directory.server.ldap.handlers.bind.*;
-import org.apache.directory.server.ldap.handlers.bind.ntlm.NtlmMechanismHandler;
import org.apache.directory.server.protocol.shared.SocketAcceptor;
+import org.apache.directory.shared.ldap.constants.SupportedSaslMechanisms;
+import org.apache.directory.shared.ldap.exception.LdapConfigurationException;
import org.apache.directory.shared.ldap.ldif.LdifEntry;
import org.apache.directory.shared.ldap.ldif.LdifReader;
import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.constants.SupportedSaslMechanisms;
import org.apache.mina.util.AvailablePortFinder;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.ldap.InitialLdapContext;
-import javax.naming.ldap.LdapContext;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
import java.util.*;
@@ -126,9 +141,9 @@
LdifReader ldifReader = new LdifReader( in );
List<LdifEntry> entries = new ArrayList<LdifEntry>();
- while ( ldifReader.hasNext() )
+
+ for ( LdifEntry entry:ldifReader )
{
- LdifEntry entry = ldifReader.next();
rootDSE.createSubcontext( entry.getDn(), entry.getAttributes() );
if ( verifyEntries )
@@ -170,7 +185,7 @@
if ( ! readAttribute.contains( origAttribute.get( ii ) ) )
{
LOG.error( "Failed to verify entry addition of {}. {} attribute in original " +
- "entry missing from read entry.", entry.getDn(), id );
+ "entry missing from read entry.", entry.getDn(), id );
throw new AssertionFailedError( "Failed to verify entry addition of " + entry.getDn() );
}
}
@@ -266,7 +281,7 @@
{
Map<String, MechanismHandler> mechanismHandlerMap = new HashMap<String,MechanismHandler>();
- mechanismHandlerMap.put( SupportedSaslMechanisms.SIMPLE, new SimpleMechanismHandler() );
+ mechanismHandlerMap.put( SupportedSaslMechanisms.PLAIN, new SimpleMechanismHandler() );
CramMd5MechanismHandler cramMd5MechanismHandler = new CramMd5MechanismHandler();
cramMd5MechanismHandler.setDirectoryService( directoryService );
@@ -400,7 +415,7 @@
}
}
-
+
/**
* Imports the LDIF entries packaged with the Eve JNDI provider jar into
* the newly created system partition to prime it up for operation. Note
@@ -411,15 +426,22 @@
* adding those entries to the system partition
* @param in the input stream with the ldif
*/
- protected void importLdif( InputStream in ) throws Exception
+ protected void importLdif( InputStream in ) throws NamingException
{
- Iterator<LdifEntry> iterator = new LdifReader( in );
-
- while ( iterator.hasNext() )
+ try
+ {
+ for ( LdifEntry ldifEntry:new LdifReader( in ) )
+ {
+ LdapDN dn = new LdapDN( ldifEntry.getDn() );
+ rootDSE.createSubcontext( dn, ldifEntry.getAttributes() );
+ }
+ }
+ catch ( Exception e )
{
- LdifEntry entry = iterator.next();
- LdapDN dn = new LdapDN( entry.getDn() );
- rootDSE.createSubcontext( dn, entry.getAttributes() );
+ String msg = "failed while trying to parse system ldif file";
+ NamingException ne = new LdapConfigurationException( msg );
+ ne.setRootCause( e );
+ throw ne;
}
}
Modified: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DITUtilitiesSP.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DITUtilitiesSP.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DITUtilitiesSP.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DITUtilitiesSP.java Sat Jun 7 00:48:16 2008
@@ -33,9 +33,9 @@
public class DITUtilitiesSP
{
- private static final Logger log = LoggerFactory.getLogger( DITUtilitiesSP.class );
-
- /**
+ private static final Logger log = LoggerFactory.getLogger( DITUtilitiesSP.class );
+
+ /**
* Recursively deletes a subtree including the apex given.
*
* If you do not want to wait for the developers to implement the
Modified: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DeleteIllegalDNITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DeleteIllegalDNITest.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DeleteIllegalDNITest.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/DeleteIllegalDNITest.java Sat Jun 7 00:48:16 2008
@@ -60,11 +60,11 @@
}
catch ( NamingException ne )
{
- fail();
+ fail();
}
catch( Exception e )
{
- fail();
+ fail();
}
try
@@ -73,18 +73,18 @@
controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
controls.setTimeLimit( 10 );
- NamingEnumeration<SearchResult> result = ctx.search( "ou=system", "(objectClass=*)", controls );
+ NamingEnumeration<SearchResult> result = ctx.search( "ou=system", "(objectClass=*)", controls );
assertTrue( result.hasMore() );
}
catch ( InvalidNameException ine )
{
- fail();
+ fail();
// Expected.
}
catch ( NamingException ne )
{
- fail();
+ fail();
}
}
}
Modified: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/PersistentSearchTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/PersistentSearchTest.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/PersistentSearchTest.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/PersistentSearchTest.java Sat Jun 7 00:48:16 2008
@@ -48,6 +48,12 @@
import org.apache.directory.shared.ldap.message.AttributeImpl;
import org.apache.directory.shared.ldap.message.AttributesImpl;
import org.apache.directory.shared.ldap.message.PersistentSearchControl;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -86,6 +92,7 @@
/**
* Create context and a person entry.
*/
+ @Before
public void setUp() throws Exception
{
super.setUp();
@@ -110,6 +117,7 @@
/**
* Remove person entry and close context.
*/
+ @After
public void tearDown() throws Exception
{
try
@@ -128,6 +136,7 @@
/**
* Shows correct notifications for modify(4) changes.
*/
+ @Test
public void testPsearchModify() throws Exception
{
PSearchListener listener = new PSearchListener();
@@ -162,6 +171,7 @@
/**
* Shows correct notifications for moddn(8) changes.
*/
+ @Test
public void testPsearchModifyDn() throws Exception
{
PSearchListener listener = new PSearchListener();
@@ -194,6 +204,7 @@
/**
* Shows correct notifications for delete(2) changes.
*/
+ @Test
public void testPsearchDelete() throws Exception
{
PSearchListener listener = new PSearchListener();
@@ -226,6 +237,7 @@
/**
* Shows correct notifications for add(1) changes.
*/
+ @Test
public void testPsearchAdd() throws Exception
{
PSearchListener listener = new PSearchListener();
@@ -259,6 +271,7 @@
* Shows correct notifications for modify(4) changes with returned
* EntryChangeControl.
*/
+ @Test
public void testPsearchModifyWithEC() throws Exception
{
PersistentSearchControl control = new PersistentSearchControl();
@@ -295,6 +308,7 @@
* Shows correct notifications for moddn(8) changes with returned
* EntryChangeControl.
*/
+ @Test
public void testPsearchModifyDnWithEC() throws Exception
{
PersistentSearchControl control = new PersistentSearchControl();
@@ -332,6 +346,7 @@
* Shows correct notifications for delete(2) changes with returned
* EntryChangeControl.
*/
+ @Test
public void testPsearchDeleteWithEC() throws Exception
{
PersistentSearchControl control = new PersistentSearchControl();
@@ -368,6 +383,7 @@
* Shows correct notifications for add(1) changes with returned
* EntryChangeControl.
*/
+ @Test
public void testPsearchAddWithEC() throws Exception
{
PersistentSearchControl control = new PersistentSearchControl();
@@ -404,6 +420,7 @@
* Shows correct notifications for only add(1) and modify(4) registered changes with returned
* EntryChangeControl.
*/
+ @Test
public void testPsearchAddModifyEnabledWithEC() throws Exception
{
PersistentSearchControl control = new PersistentSearchControl();
@@ -516,6 +533,7 @@
* Shows notifications functioning with the JNDI notification API of the SUN
* provider.
*/
+ @Test
public void testPsearchUsingJndiNotifications() throws Exception
{
Hashtable<String, Object> env = new Hashtable<String, Object>();
@@ -554,7 +572,8 @@
/**
* Shows notifications functioning with the JNDI notification API of the SUN
* provider.
- */
+ *
+ @Test
public void testPsearchAbandon() throws Exception
{
PersistentSearchControl control = new PersistentSearchControl();
@@ -584,7 +603,9 @@
assertNotNull( listener.result );
assertEquals( "cn=Jack Black", listener.result.getName() );
assertEquals( listener.result.control.getChangeType(), ChangeType.ADD );
- listener.result = null;
+
+ listener = new PSearchListener( control );
+
t = new Thread( listener );
t.start();
@@ -602,6 +623,10 @@
// there seems to be a race condition here
// assertNull( listener.result );
+ assertNotNull( listener.result );
+ assertEquals( "cn=Jack Black", listener.result.getName() );
+ assertEquals( ChangeType.DELETE, listener.result.control.getChangeType() );
+ listener.result = null;
// thread is still waiting for notifications try a modify
ctx.modifyAttributes( RDN, DirContext.REMOVE_ATTRIBUTE, new AttributesImpl( "description", PERSON_DESCRIPTION,
@@ -616,10 +641,10 @@
}
}
- assertNotNull( listener.result );
- assertEquals( RDN, listener.result.getName() );
- assertEquals( listener.result.control.getChangeType(), ChangeType.MODIFY );
- }
+ assertNull( listener.result );
+ //assertEquals( RDN, listener.result.getName() );
+ //assertEquals( listener.result.control.getChangeType(), ChangeType.MODIFY );
+ }*/
class JndiNotificationListener implements NamespaceChangeListener, ObjectChangeListener
{
Modified: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SaslBindITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SaslBindITest.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SaslBindITest.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SaslBindITest.java Sat Jun 7 00:48:16 2008
@@ -20,6 +20,18 @@
package org.apache.directory.server;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.InitialDirContext;
+
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.net.SocketClient;
import org.apache.directory.server.core.entry.DefaultServerEntry;
@@ -28,10 +40,10 @@
import org.apache.directory.server.xdbm.Index;
import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex;
import org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition;
-import org.apache.directory.server.ldap.handlers.bind.ntlm.NtlmAuthenticationResult;
import org.apache.directory.server.ldap.handlers.bind.ntlm.NtlmMechanismHandler;
import org.apache.directory.server.ldap.handlers.bind.ntlm.NtlmProvider;
import org.apache.directory.server.unit.AbstractServerTest;
+import org.apache.directory.shared.ldap.constants.SupportedSaslMechanisms;
import org.apache.directory.shared.ldap.message.AttributeImpl;
import org.apache.directory.shared.ldap.message.AttributesImpl;
import org.apache.directory.shared.ldap.message.BindRequestImpl;
@@ -41,22 +53,14 @@
import org.apache.directory.shared.ldap.message.ResultCodeEnum;
import org.apache.directory.shared.ldap.message.spi.BinaryAttributeDetector;
import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.constants.SupportedSaslMechanisms;
+import org.apache.mina.common.IoSession;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.InitialDirContext;
-
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.Set;
-
/**
* An {@link AbstractServerTest} testing SASL DIGEST-MD5 and CRAM-MD5
@@ -67,7 +71,6 @@
*/
public class SaslBindITest extends AbstractServerTest
{
- private static final Logger LOG = LoggerFactory.getLogger( SaslBindITest.class );
private DirContext ctx;
private BogusNtlmProvider provider;
@@ -76,6 +79,7 @@
* Set up a partition for EXAMPLE.COM and add a user to
* test authentication with.
*/
+ @Before
public void setUp() throws Exception
{
provider = new BogusNtlmProvider();
@@ -144,6 +148,7 @@
/**
* Tear down.
*/
+ @After
public void tearDown() throws Exception
{
ctx.close();
@@ -191,13 +196,14 @@
/**
* Tests to make sure the server properly returns the supportedSASLMechanisms.
*/
+ @Test
public void testSupportedSASLMechanisms()
{
try
{
- DirContext ctx = new InitialDirContext();
+ DirContext context = new InitialDirContext();
- Attributes attrs = ctx.getAttributes( "ldap://localhost:" + port, new String[]
+ Attributes attrs = context.getAttributes( "ldap://localhost:" + port, new String[]
{ "supportedSASLMechanisms" } );
NamingEnumeration<? extends Attribute> answer = attrs.getAll();
@@ -207,7 +213,7 @@
assertTrue( result.contains( SupportedSaslMechanisms.DIGEST_MD5 ) );
assertTrue( result.contains( SupportedSaslMechanisms.CRAM_MD5 ) );
assertTrue( result.contains( SupportedSaslMechanisms.NTLM ) );
- assertTrue( result.contains( SupportedSaslMechanisms.SIMPLE ) );
+ assertTrue( result.contains( SupportedSaslMechanisms.PLAIN ) );
assertTrue( result.contains( SupportedSaslMechanisms.GSS_SPNEGO ) );
}
catch ( NamingException e )
@@ -221,6 +227,7 @@
* Tests to make sure we still have anonymous access to the RootDSE. The
* configuration for this testcase MUST disable anonymous access.
*/
+ @Test
public void testAnonymousRootDSE()
{
try
@@ -229,12 +236,12 @@
env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.PROVIDER_URL, "ldap://localhost:" + port );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "vendorName" };
- Attributes attrs = ctx.getAttributes( "", attrIDs );
+ Attributes attrs = context.getAttributes( "", attrIDs );
String vendorName = null;
@@ -255,6 +262,7 @@
/**
* Tests to make sure binds below the RootDSE require authentication.
*/
+ @Test
public void testAnonymousBelowRootDSE()
{
try
@@ -263,12 +271,12 @@
env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
env.put( Context.PROVIDER_URL, "ldap://localhost:" + port );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "vendorName" };
- ctx.getAttributes( "dc=example,dc=com", attrIDs );
+ context.getAttributes( "dc=example,dc=com", attrIDs );
fail( "Should not have gotten here." );
}
@@ -282,6 +290,7 @@
/**
* Tests to make sure SIMPLE binds below the RootDSE work.
*/
+ @Test
public void testSimpleBindBelowRootDSE()
{
try
@@ -294,12 +303,12 @@
env.put( Context.SECURITY_PRINCIPAL, "uid=hnelson,ou=users,dc=example,dc=com" );
env.put( Context.SECURITY_CREDENTIALS, "secret" );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "uid" };
- Attributes attrs = ctx.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
+ Attributes attrs = context.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
String uid = null;
@@ -320,6 +329,7 @@
/**
* Tests to make sure SIMPLE binds below the RootDSE fail if the password is bad.
*/
+ @Test
public void testSimpleBindBadPassword()
{
try
@@ -332,12 +342,12 @@
env.put( Context.SECURITY_PRINCIPAL, "uid=hnelson,ou=users,dc=example,dc=com" );
env.put( Context.SECURITY_CREDENTIALS, "badsecret" );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "uid" };
- ctx.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
+ context.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
fail( "Should not have gotten here." );
}
@@ -351,6 +361,7 @@
/**
* Tests to make sure DIGEST-MD5 binds below the RootDSE work.
*/
+ @Test
public void testSaslDigestMd5Bind() throws Exception
{
Hashtable<String, String> env = new Hashtable<String, String>();
@@ -367,12 +378,12 @@
// Request privacy protection
env.put( "javax.security.sasl.qop", "auth-conf" );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "uid" };
- Attributes attrs = ctx.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
+ Attributes attrs = context.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
String uid = null;
@@ -388,6 +399,7 @@
/**
* Tests to make sure DIGEST-MD5 binds below the RootDSE fail if the realm is bad.
*/
+ @Test
public void testSaslDigestMd5BindBadRealm()
{
try
@@ -406,12 +418,12 @@
// Request privacy protection
env.put( "javax.security.sasl.qop", "auth-conf" );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "uid" };
- ctx.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
+ context.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
fail( "Should have thrown exception." );
}
@@ -425,6 +437,7 @@
/**
* Tests to make sure DIGEST-MD5 binds below the RootDSE fail if the password is bad.
*/
+ @Test
public void testSaslDigestMd5BindBadPassword()
{
try
@@ -437,12 +450,12 @@
env.put( Context.SECURITY_PRINCIPAL, "hnelson" );
env.put( Context.SECURITY_CREDENTIALS, "badsecret" );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "uid" };
- ctx.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
+ context.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
fail( "Should have thrown exception." );
}
@@ -456,6 +469,7 @@
/**
* Tests to make sure CRAM-MD5 binds below the RootDSE work.
*/
+ @Test
public void testSaslCramMd5Bind()
{
try
@@ -468,12 +482,12 @@
env.put( Context.SECURITY_PRINCIPAL, "hnelson" );
env.put( Context.SECURITY_CREDENTIALS, "secret" );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "uid" };
- Attributes attrs = ctx.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
+ Attributes attrs = context.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
String uid = null;
@@ -494,6 +508,7 @@
/**
* Tests to make sure CRAM-MD5 binds below the RootDSE fail if the password is bad.
*/
+ @Test
public void testSaslCramMd5BindBadPassword()
{
try
@@ -506,12 +521,12 @@
env.put( Context.SECURITY_PRINCIPAL, "hnelson" );
env.put( Context.SECURITY_CREDENTIALS, "badsecret" );
- DirContext ctx = new InitialDirContext( env );
+ DirContext context = new InitialDirContext( env );
String[] attrIDs =
{ "uid" };
- ctx.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
+ context.getAttributes( "uid=hnelson,ou=users,dc=example,dc=com", attrIDs );
fail( "Should have thrown exception." );
}
@@ -525,6 +540,7 @@
/**
* Tests that the plumbing for NTLM bind works.
*/
+ @Test
public void testNtlmBind() throws Exception
{
NtlmSaslBindClient client = new NtlmSaslBindClient( SupportedSaslMechanisms.NTLM );
@@ -538,13 +554,13 @@
assertEquals( 2, finalResponse.getMessageId() );
assertEquals( ResultCodeEnum.SUCCESS, finalResponse.getLdapResult().getResultCode() );
assertTrue( ArrayUtils.isEquals( "type3_test".getBytes(), provider.getType3Response() ) );
- assertTrue( ArrayUtils.isEquals( "results".getBytes(), finalResponse.getServerSaslCreds() ) );
}
/**
* Tests that the plumbing for NTLM bind works.
*/
+ @Test
public void testGssSpnegoBind() throws Exception
{
NtlmSaslBindClient client = new NtlmSaslBindClient( SupportedSaslMechanisms.GSS_SPNEGO );
@@ -558,7 +574,6 @@
assertEquals( 2, finalResponse.getMessageId() );
assertEquals( ResultCodeEnum.SUCCESS, finalResponse.getLdapResult().getResultCode() );
assertTrue( ArrayUtils.isEquals( "type3_test".getBytes(), provider.getType3Response() ) );
- assertTrue( ArrayUtils.isEquals( "results".getBytes(), finalResponse.getServerSaslCreds() ) );
}
@@ -568,14 +583,14 @@
private byte[] type3response;
- public NtlmAuthenticationResult authenticate( byte[] type3response ) throws Exception
+ public boolean authenticate( IoSession session, byte[] type3response ) throws Exception
{
this.type3response = type3response;
- return new NtlmAuthenticationResult( "results".getBytes(), true );
+ return true;
}
- public byte[] generateChallenge( byte[] type1reponse ) throws Exception
+ public byte[] generateChallenge( IoSession session, byte[] type1reponse ) throws Exception
{
this.type1response = type1reponse;
return "challenge".getBytes();
@@ -597,6 +612,8 @@
class NtlmSaslBindClient extends SocketClient
{
+ private final Logger LOG = LoggerFactory.getLogger( NtlmSaslBindClient.class );
+
private final String mechanism;
Modified: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SearchITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SearchITest.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SearchITest.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/SearchITest.java Sat Jun 7 00:48:16 2008
@@ -187,7 +187,7 @@
{
ctx.unbind( RDN );
ctx.close();
-
+
ctx = null;
super.tearDown();
}
@@ -1036,7 +1036,7 @@
}
catch ( NamingException ne )
{
- assertTrue( true );
+ assertTrue( true );
}
}
@@ -1158,4 +1158,23 @@
result.close();
}
+
+
+ /**
+ * Test for DIRSERVER-1183.
+ *
+ * @see https://issues.apache.org/jira/browse/DIRSERVER-1183
+ * @throws Exception
+ */
+ public void testDIRSERVER_1183() throws Exception
+ {
+ Attributes attrs = new AttributesImpl( "objectClass", "inetOrgPerson", true );
+ attrs.get( "objectClass" ).add( "organizationalPerson" );
+ attrs.get( "objectClass" ).add( "person" );
+ attrs.put( "givenName", "Jim" );
+ attrs.put( "sn", "Bean" );
+ attrs.put( "cn", "\"Jim, Bean\"" );
+
+ ctx.createSubcontext( "cn=\"Jim, Bean\"", attrs );
+ }
}
Modified: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/ssl/StartTlsITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/ssl/StartTlsITest.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/ssl/StartTlsITest.java (original)
+++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/ssl/StartTlsITest.java Sat Jun 7 00:48:16 2008
@@ -20,10 +20,22 @@
package org.apache.directory.server.ssl;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.security.KeyStore;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateFactory;
+import java.util.ArrayList;
import java.util.Hashtable;
+import java.util.List;
import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import javax.naming.ldap.StartTlsRequest;
@@ -32,13 +44,13 @@
import javax.net.ssl.SSLSession;
import org.apache.directory.server.unit.AbstractServerTest;
-import org.apache.directory.shared.ldap.util.DummySSLSocketFactory;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Test case for StartTls.
+ * Test case for StartTls.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
@@ -46,40 +58,166 @@
public class StartTlsITest extends AbstractServerTest
{
private static final Logger LOG = LoggerFactory.getLogger( StartTlsITest.class );
+ private static final int CONNECT_ITERATIONS = 10;
+ private static final boolean VERBOSE = false;
+ private File ksFile;
+
+
+ /**
+ * Sets up the key store and installs the self signed certificate for the
+ * server (created on first startup) which is to be used by the StartTLS
+ * JDNDI client that will connect. The key store is created from scratch
+ * programmatically and whipped on each run. The certificate is acquired
+ * by pulling down the bytes for administrator's userCertificate from
+ * uid=admin,ou=system.
+ */
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ if ( ksFile != null && ksFile.exists() )
+ {
+ ksFile.delete();
+ }
+
+ ksFile = File.createTempFile( "testStore", "ks" );
+
+ Hashtable<String, Object> env = new Hashtable<String,Object>();
+ env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
+ env.put( "java.naming.security.principal", "uid=admin,ou=system" );
+ env.put( "java.naming.security.credentials", "secret" );
+ env.put( "java.naming.security.authentication", "simple" );
+
+ // Must use the name of the server that is found in its certificate?
+ env.put( Context.PROVIDER_URL, "ldap://localhost:" + port + "/ou=system" );
+ LdapContext ctx = new InitialLdapContext( env, null );
+
+ Attributes adminEntry = ctx.getAttributes( "uid=admin" );
+ Attribute userCertificateAttr = adminEntry.get( "userCertificate" );
+
+ assertNotNull( userCertificateAttr );
+ byte[] userCertificate = ( byte[] ) userCertificateAttr.get();
+ assertNotNull( userCertificate );
+ ByteArrayInputStream in = new ByteArrayInputStream( userCertificate );
+
+ CertificateFactory factory = CertificateFactory.getInstance( "X.509" );
+ Certificate cert = factory.generateCertificate( in );
+ KeyStore ks = KeyStore.getInstance( KeyStore.getDefaultType() );
+ ks.load( null, null );
+ ks.setCertificateEntry( "apacheds", cert );
+ ks.store( new FileOutputStream( ksFile ), "changeit".toCharArray() );
+
+ ctx.close();
+ ctx = null;
+ env = null;
+ }
+
+
+ /**
+ * Just deletes the generated key store file.
+ */
+ public void tearDown() throws Exception
+ {
+ if ( ksFile != null && ksFile.exists() )
+ {
+ ksFile.delete();
+ }
+
+ super.tearDown();
+ }
+
+
+ private void search( int ii, LdapContext securedContext ) throws Exception
+ {
+ SearchControls controls = new SearchControls();
+ controls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+
+ if ( VERBOSE )
+ {
+ System.out.println( "Searching on " + ii + "-th iteration:" );
+ }
+
+ List<String> results = new ArrayList<String>();
+ NamingEnumeration<SearchResult> ne = securedContext.search( "ou=system", "(objectClass=*)", controls );
+ while ( ne.hasMore() )
+ {
+ String dn = ne.next().getNameInNamespace();
+ results.add( dn );
+
+ if ( VERBOSE )
+ {
+ System.out.println( "\tSearch Result = " + dn );
+ }
+ }
+ ne.close();
+
+ assertEquals( "ou=system", results.get( 0 ) );
+ assertEquals( "uid=admin,ou=system", results.get( 1 ) );
+ assertEquals( "ou=users,ou=system", results.get( 2 ) );
+ assertEquals( "ou=groups,ou=system", results.get( 3 ) );
+ assertEquals( "cn=Administrators,ou=groups,ou=system", results.get( 4 ) );
+ assertEquals( "ou=configuration,ou=system", results.get( 5 ) );
+ assertEquals( "ou=partitions,ou=configuration,ou=system", results.get( 6 ) );
+ assertEquals( "ou=services,ou=configuration,ou=system", results.get( 7 ) );
+ assertEquals( "ou=interceptors,ou=configuration,ou=system", results.get( 8 ) );
+ assertEquals( "prefNodeName=sysPrefRoot,ou=system", results.get( 9 ) );
+ }
+ /**
+ * Tests StartTLS by creating a JNDI connection using the generated key
+ * store with the installed self signed certificate. It then searches
+ * the server and verifies the presence of the expected entries and closes
+ * the connection. This process repeats for a number of iterations.
+ * Modify the CONNECT_ITERATIONS constant to change the number of
+ * iterations. Modify the VERBOSE constant to print out information while
+ * performing searches.
+ */
public void testStartTls() throws Exception
{
-// // Set up environment for creating initial context
-// Hashtable<String, Object> env = new Hashtable<String,Object>();
-// env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
-// env.put( "java.naming.ldap.factory.socket", DummySSLSocketFactory.class.getName() );
-//
-// // Must use the name of the server that is found in its certificate
-// env.put( Context.PROVIDER_URL, "ldap://localhost:" + port );
-//
-// // Create initial context
-// LOG.error( "About to get initial context" );
-// LdapContext ctx = new InitialLdapContext( env, null );
-//
-// // Start TLS
-// LOG.error( "About send startTls extended operation" );
-// StartTlsResponse tls = ( StartTlsResponse ) ctx.extendedOperation( new StartTlsRequest() );
-// LOG.error( "Extended operation issued" );
-// tls.setHostnameVerifier( new HostnameVerifier() {
-// public boolean verify( String hostname, SSLSession session )
-// {
-// return true;
-// }
-// } );
-// LOG.error( "TLS negotion about to begin" );
-// SSLSession session = tls.negotiate( new DummySSLSocketFactory() );
-//
-// ctx.addToEnvironment( "java.naming.security.principal", "uid=admin,ou=system" );
-// ctx.addToEnvironment( "java.naming.security.credentials", "secret" );
-// ctx.addToEnvironment( "java.naming.security.authentication", "simple" );
-//
-// Attributes attrs = ctx.getAttributes( "ou=system" );
-// System.out.println( attrs.toString() );
+ for ( int ii = 0; ii < CONNECT_ITERATIONS; ii++ )
+ {
+ if ( VERBOSE )
+ {
+ System.out.println( "Performing " + ii + "-th iteration to connect via StartTLS." );
+ }
+
+ System.setProperty ( "javax.net.ssl.trustStore", ksFile.getAbsolutePath() );
+ System.setProperty ( "javax.net.ssl.keyStore", ksFile.getAbsolutePath() );
+ System.setProperty ( "javax.net.ssl.keyStorePassword", "changeit" );
+ LOG.debug( "testStartTls() test starting ... " );
+
+ // Set up environment for creating initial context
+ Hashtable<String, Object> env = new Hashtable<String,Object>();
+ env.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
+ env.put( "java.naming.security.principal", "uid=admin,ou=system" );
+ env.put( "java.naming.security.credentials", "secret" );
+ env.put( "java.naming.security.authentication", "simple" );
+
+ // Must use the name of the server that is found in its certificate?
+ env.put( Context.PROVIDER_URL, "ldap://localhost:" + port );
+
+ // Create initial context
+ LOG.debug( "About to get initial context" );
+ LdapContext ctx = new InitialLdapContext( env, null );
+
+ // Start TLS
+ LOG.debug( "About send startTls extended operation" );
+ StartTlsResponse tls = ( StartTlsResponse ) ctx.extendedOperation( new StartTlsRequest() );
+ LOG.debug( "Extended operation issued" );
+ tls.setHostnameVerifier( new HostnameVerifier() {
+ public boolean verify( String hostname, SSLSession session )
+ {
+ return true;
+ }
+ } );
+ LOG.debug( "TLS negotion about to begin" );
+ tls.negotiate();
+
+ search( ii, ctx );
+
+ tls.close();
+ ctx.close();
+ }
}
}
Modified: directory/apacheds/branches/bigbang/utils/src/main/java/org/apache/directory/server/utils/AttributesFactory.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/utils/src/main/java/org/apache/directory/server/utils/AttributesFactory.java?rev=664295&r1=664294&r2=664295&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/utils/src/main/java/org/apache/directory/server/utils/AttributesFactory.java (original)
+++ directory/apacheds/branches/bigbang/utils/src/main/java/org/apache/directory/server/utils/AttributesFactory.java Sat Jun 7 00:48:16 2008
@@ -421,7 +421,7 @@
private final void injectCommon( SchemaObject object, ServerEntry entry, Registries registries ) throws NamingException
{
- injectNames( object.getNames(), entry, registries );
+ injectNames( object.getNamesRef(), entry, registries );
entry.put( MetaSchemaConstants.M_OBSOLETE_AT, getBoolean( object.isObsolete() ) );
entry.put( MetaSchemaConstants.M_OID_AT, object.getOid() );