You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2008/07/29 17:23:08 UTC

svn commit: r680736 - /directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/operations/bind/SaslBindITest.java

Author: elecharny
Date: Tue Jul 29 08:23:07 2008
New Revision: 680736

URL: http://svn.apache.org/viewvc?rev=680736&view=rev
Log:
o Migrated the SaslBindITest class to a new package
o Fixed a pb with anonymous not being allowed in Directoryerver

Added:
    directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/operations/bind/SaslBindITest.java

Added: directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/operations/bind/SaslBindITest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/operations/bind/SaslBindITest.java?rev=680736&view=auto
==============================================================================
--- directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/operations/bind/SaslBindITest.java (added)
+++ directory/apacheds/branches/bigbang/server-unit/src/test/java/org/apache/directory/server/operations/bind/SaslBindITest.java Tue Jul 29 08:23:07 2008
@@ -0,0 +1,217 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.server.operations.bind;
+
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Set;
+
+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.directory.server.core.entry.DefaultServerEntry;
+import org.apache.directory.server.core.entry.ServerEntry;
+import org.apache.directory.server.core.partition.Partition;
+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.newldap.handlers.bind.ntlm.NtlmMechanismHandler;
+import org.apache.directory.server.unit.AbstractServerTest;
+import org.apache.directory.server.xdbm.Index;
+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.name.LdapDN;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+//import static org.junit.Assert.assertTrue;
+//import static org.junit.Assert.fail;
+
+
+/**
+ * An {@link AbstractServerTest} testing SASL authentication.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class SaslBindITest extends AbstractServerTest
+{
+     private DirContext ctx;
+     //private BogusNtlmProvider provider;
+
+     /**
+      * Set up a partition for EXAMPLE.COM and add a user to
+      * test authentication with.
+      */
+     @Before
+     public void setUp() throws Exception
+     {
+         //provider = new BogusNtlmProvider();
+         super.setUp();
+         directoryService.setAllowAnonymousAccess( true );
+
+         Hashtable<String, String> env = new Hashtable<String, String>();
+         env.put( "java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory" );
+         env.put( "java.naming.provider.url", "ldap://localhost:" + port + "/dc=example,dc=com" );
+         env.put( "java.naming.security.principal", "uid=admin,ou=system" );
+         env.put( "java.naming.security.credentials", "secret" );
+         env.put( "java.naming.security.authentication", "simple" );
+         ctx = new InitialDirContext( env );
+
+         Attributes attrs = new AttributesImpl( true );
+         attrs = getOrgUnitAttributes( "users" );
+         DirContext users = ctx.createSubcontext( "ou=users", attrs );
+
+         attrs = getPersonAttributes( "Nelson", "Horatio Nelson", "hnelson", "secret" );
+         users.createSubcontext( "uid=hnelson", attrs );
+     }
+
+
+     @Override
+     protected void configureDirectoryService() throws NamingException
+     {
+         directoryService.setAllowAnonymousAccess( false );
+
+         Set<Partition> partitions = new HashSet<Partition>();
+         JdbmPartition partition = new JdbmPartition();
+         partition.setId( "example" );
+         partition.setSuffix( "dc=example,dc=com" );
+
+         Set<Index<?,ServerEntry>> indexedAttrs = new HashSet<Index<?,ServerEntry>>();
+         indexedAttrs.add( new JdbmIndex<String,ServerEntry>( "ou" ) );
+         indexedAttrs.add( new JdbmIndex<String,ServerEntry>( "dc" ) );
+         indexedAttrs.add( new JdbmIndex<String,ServerEntry>( "objectClass" ) );
+         partition.setIndexedAttributes( indexedAttrs );
+
+         LdapDN exampleDn = new LdapDN( "dc=example,dc=com" );
+         ServerEntry serverEntry = new DefaultServerEntry( directoryService.getRegistries(), exampleDn );
+         serverEntry.put( "objectClass", "top", "domain" );
+         serverEntry.put( "dc", "example" );
+
+         partition.setContextEntry( serverEntry );
+
+
+         partitions.add( partition );
+         directoryService.setPartitions( partitions );
+     }
+
+
+     @Override
+     protected void configureLdapServer()
+     {
+         ldapServer.setSaslHost( "localhost" );
+         
+         NtlmMechanismHandler ntlmMechanismHandler = new NtlmMechanismHandler();
+         //ntlmMechanismHandler.setNtlmProvider( provider  );
+         
+         ldapServer.removeSaslMechanismHandler( SupportedSaslMechanisms.NTLM );
+         ldapServer.addSaslMechanismHandler( SupportedSaslMechanisms.NTLM, ntlmMechanismHandler );
+         ldapServer.removeSaslMechanismHandler( SupportedSaslMechanisms.GSS_SPNEGO );
+         ldapServer.addSaslMechanismHandler( SupportedSaslMechanisms.GSS_SPNEGO, ntlmMechanismHandler );
+     }
+
+     
+     /**
+      * Tear down.
+      */
+     @After
+     public void tearDown() throws Exception
+     {
+         ctx.close();
+         ctx = null;
+         super.tearDown();
+     }
+
+
+     /**
+      * Convenience method for creating a person.
+      */
+     protected Attributes getPersonAttributes( String sn, String cn, String uid, String userPassword )
+     {
+         Attributes attrs = new AttributesImpl();
+         Attribute ocls = new AttributeImpl( "objectClass" );
+         ocls.add( "top" );
+         ocls.add( "person" ); // sn $ cn
+         ocls.add( "inetOrgPerson" ); // uid
+         attrs.put( ocls );
+         attrs.put( "cn", cn );
+         attrs.put( "sn", sn );
+         attrs.put( "uid", uid );
+         attrs.put( "userPassword", userPassword );
+
+         return attrs;
+     }
+
+
+     /**
+      * Convenience method for creating an organizational unit.
+      */
+     protected Attributes getOrgUnitAttributes( String ou )
+     {
+         Attributes attrs = new AttributesImpl();
+         Attribute ocls = new AttributeImpl( "objectClass" );
+         ocls.add( "top" );
+         ocls.add( "organizationalUnit" );
+         attrs.put( ocls );
+         attrs.put( "ou", ou );
+
+         return attrs;
+     }
+
+
+     /**
+      * Tests to make sure the server properly returns the supportedSASLMechanisms.
+      */
+     @Test
+     public void testSupportedSASLMechanisms()
+     {
+         try
+         {
+             // We have to tell the server that it should accept anonymous
+             // auth, because we are reading the rootDSE
+             ldapServer.setAllowAnonymousAccess( true );
+             directoryService.setAllowAnonymousAccess( true );
+             
+             // Point on rootDSE
+             DirContext context = new InitialDirContext();
+
+             Attributes attrs = context.getAttributes( "ldap://localhost:" + port, new String[]
+                 { "supportedSASLMechanisms" } );
+
+             NamingEnumeration<? extends Attribute> answer = attrs.getAll();
+             Attribute result = answer.next();
+             assertTrue( result.size() == 6 );
+             assertTrue( result.contains( SupportedSaslMechanisms.GSSAPI ) );
+             assertTrue( result.contains( SupportedSaslMechanisms.DIGEST_MD5 ) );
+             assertTrue( result.contains( SupportedSaslMechanisms.CRAM_MD5 ) );
+             assertTrue( result.contains( SupportedSaslMechanisms.NTLM ) );
+             assertTrue( result.contains( SupportedSaslMechanisms.PLAIN ) );
+             assertTrue( result.contains( SupportedSaslMechanisms.GSS_SPNEGO ) );
+         }
+         catch ( NamingException e )
+         {
+             fail( "Should not have caught exception." );
+         }
+     }
+}