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 2013/05/06 17:45:35 UTC

svn commit: r1479610 - in /directory/apacheds/trunk/core-annotations/src: main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java

Author: elecharny
Date: Mon May  6 15:45:35 2013
New Revision: 1479610

URL: http://svn.apache.org/r1479610
Log:
Applied patch for DIRSERVER-1730

Modified:
    directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java
    directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java

Modified: directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java?rev=1479610&r1=1479609&r2=1479610&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java (original)
+++ directory/apacheds/trunk/core-annotations/src/main/java/org/apache/directory/server/core/factory/DSAnnotationProcessor.java Mon May  6 15:45:35 2013
@@ -128,6 +128,9 @@ public class DSAnnotationProcessor
 
                 authenticators.add( auth );
             }
+
+            authenticationInterceptor.setAuthenticators( authenticators );
+            authenticationInterceptor.init( service );
         }
 
         service.setInterceptors( interceptorList );

Modified: directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java?rev=1479610&r1=1479609&r2=1479610&view=diff
==============================================================================
--- directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java (original)
+++ directory/apacheds/trunk/core-annotations/src/test/java/org/apache/directory/server/core/factory/DirectoryServiceAnnotationTest.java Mon May  6 15:45:35 2013
@@ -28,13 +28,22 @@ import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.directory.api.ldap.model.constants.AuthenticationLevel;
+import org.apache.directory.api.ldap.model.name.Dn;
 import org.apache.directory.server.core.annotations.ContextEntry;
+import org.apache.directory.server.core.annotations.CreateAuthenticator;
 import org.apache.directory.server.core.annotations.CreateDS;
 import org.apache.directory.server.core.annotations.CreateIndex;
 import org.apache.directory.server.core.annotations.CreatePartition;
 import org.apache.directory.server.core.annotations.LoadSchema;
 import org.apache.directory.server.core.api.DirectoryService;
+import org.apache.directory.server.core.api.LdapPrincipal;
+import org.apache.directory.server.core.api.interceptor.Interceptor;
+import org.apache.directory.server.core.api.interceptor.context.BindOperationContext;
 import org.apache.directory.server.core.api.partition.Partition;
+import org.apache.directory.server.core.authn.AbstractAuthenticator;
+import org.apache.directory.server.core.authn.AuthenticationInterceptor;
+import org.apache.directory.server.core.authn.Authenticator;
 import org.apache.directory.server.core.partition.impl.avl.AvlPartition;
 import org.junit.Test;
 
@@ -182,4 +191,63 @@ public class DirectoryServiceAnnotationT
         FileUtils.deleteDirectory( service.getInstanceLayout().getInstanceDirectory() );
     }
 
+
+    @Test
+    @CreateDS(
+        name = "MethodDSWithAuthenticator",
+        authenticators =
+            { @CreateAuthenticator(type = DummyAuthenticator.class) })
+    public void testCustomAuthenticator() throws Exception
+    {
+        final DirectoryService service = DSAnnotationProcessor.getDirectoryService();
+        assertTrue( service.isStarted() );
+        assertEquals( "MethodDSWithAuthenticator", service.getInstanceId() );
+        final Set<Authenticator> authenticators = findAuthInterceptor( service ).getAuthenticators();
+        assertEquals(
+            "Expected interceptor to be configured with only one authenticator",
+            1,
+            authenticators.size() );
+        assertEquals(
+            "Expected the only interceptor to be the dummy interceptor",
+            DummyAuthenticator.class,
+            authenticators.iterator().next().getClass() );
+        service.getSession( new Dn( "uid=non-existant-user,ou=system" ), "wrong-password".getBytes() );
+        assertTrue( "Expedted dummy authenticator to have been invoked", dummyAuthenticatorCalled );
+        service.shutdown();
+        FileUtils.deleteDirectory( service.getInstanceLayout().getInstanceDirectory() );
+    }
+
+    private static volatile boolean dummyAuthenticatorCalled = false;
+
+    private static class DummyAuthenticator extends AbstractAuthenticator
+    {
+        protected DummyAuthenticator()
+        {
+            super( AuthenticationLevel.SIMPLE );
+        }
+
+
+        @Override
+        public LdapPrincipal authenticate( BindOperationContext ctx ) throws Exception
+        {
+            dummyAuthenticatorCalled = true;
+            return new LdapPrincipal(
+                super.getDirectoryService().getSchemaManager(),
+                ctx.getDn(),
+                AuthenticationLevel.SIMPLE );
+        }
+    }
+
+
+    private static AuthenticationInterceptor findAuthInterceptor( DirectoryService service )
+    {
+        for ( Interceptor interceptor : service.getInterceptors() )
+        {
+            if ( interceptor instanceof AuthenticationInterceptor )
+            {
+                return ( AuthenticationInterceptor ) interceptor;
+            }
+        }
+        return null;
+    }
 }