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 2006/07/18 18:21:57 UTC

svn commit: r423126 - in /directory/branches/apacheds/optimization: core/src/main/java/org/apache/directory/server/core/ core/src/main/java/org/apache/directory/server/core/jndi/ core/src/test/java/org/apache/directory/server/core/authz/support/ core/s...

Author: akarasulu
Date: Tue Jul 18 09:21:50 2006
New Revision: 423126

URL: http://svn.apache.org/viewvc?rev=423126&view=rev
Log:
avoiding addition parse of bindDn

Added:
    directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/PropertyKeys.java
Modified:
    directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
    directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryServiceConfiguration.java
    directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DirectoryService.java
    directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/AbstractContextFactory.java
    directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/LdapJndiProperties.java
    directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java
    directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java
    directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java
    directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java

Modified: directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java (original)
+++ directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryService.java Tue Jul 18 09:21:50 2006
@@ -35,6 +35,7 @@
 import org.apache.directory.server.core.interceptor.InterceptorChain;
 import org.apache.directory.server.core.jndi.AbstractContextFactory;
 import org.apache.directory.server.core.jndi.DeadContext;
+import org.apache.directory.server.core.jndi.PropertyKeys;
 import org.apache.directory.server.core.jndi.ServerLdapContext;
 import org.apache.directory.server.core.partition.DefaultDirectoryPartitionNexus;
 import org.apache.directory.server.core.partition.DirectoryPartitionNexus;
@@ -119,12 +120,12 @@
 
     public Context getJndiContext( String rootDN ) throws NamingException
     {
-        return this.getJndiContext( null, null, "none", rootDN );
+        return this.getJndiContext( null, null, null, "none", rootDN );
     }
 
 
-    public synchronized Context getJndiContext( String principal, byte[] credential, String authentication,
-        String rootDN ) throws NamingException
+    public synchronized Context getJndiContext( LdapDN principalDn, String principal, byte[] credential, 
+        String authentication, String rootDN ) throws NamingException
     {
         checkSecuritySettings( principal, credential, authentication );
 
@@ -158,7 +159,11 @@
             rootDN = "";
         }
         environment.put( Context.PROVIDER_URL, rootDN );
-
+        
+        if ( principalDn != null )
+        {
+            environment.put( PropertyKeys.PARSED_BIND_DN, principalDn );
+        }
         return new ServerLdapContext( this, environment );
     }
 
@@ -682,7 +687,10 @@
         String principal = AbstractContextFactory.getPrincipal( env );
         byte[] credential = AbstractContextFactory.getCredential( env );
         String authentication = AbstractContextFactory.getAuthentication( env );
-        ServerLdapContext ctx = ( ServerLdapContext ) getJndiContext( principal, credential, authentication, "" );
+        
+        LdapDN principalDn = ( LdapDN ) env.get( PropertyKeys.PARSED_BIND_DN );
+        ServerLdapContext ctx = ( ServerLdapContext ) 
+            getJndiContext( principalDn, principal, credential, authentication, "" );
 
         Iterator i = startupConfiguration.getTestEntries().iterator();
         while ( i.hasNext() )

Modified: directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryServiceConfiguration.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryServiceConfiguration.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryServiceConfiguration.java (original)
+++ directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DefaultDirectoryServiceConfiguration.java Tue Jul 18 09:21:50 2006
@@ -26,6 +26,7 @@
 import org.apache.directory.server.core.interceptor.InterceptorChain;
 import org.apache.directory.server.core.partition.DirectoryPartitionNexus;
 import org.apache.directory.server.core.schema.GlobalRegistries;
+import org.apache.directory.shared.ldap.name.LdapDN;
 
 
 /**
@@ -105,9 +106,9 @@
     }
 
 
-    public Context getJndiContext( String principal, byte[] credential, String authentication, String baseName )
-        throws NamingException
+    public Context getJndiContext( LdapDN principalDn, String principal, byte[] credential, 
+        String authentication, String baseName ) throws NamingException
     {
-        return parent.getJndiContext( principal, credential, authentication, baseName );
+        return parent.getJndiContext( principalDn, principal, credential, authentication, baseName );
     }
 }

Modified: directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DirectoryService.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DirectoryService.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DirectoryService.java (original)
+++ directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/DirectoryService.java Tue Jul 18 09:21:50 2006
@@ -30,6 +30,7 @@
 import org.apache.directory.server.core.configuration.Configuration;
 import org.apache.directory.server.core.jndi.AbstractContextFactory;
 import org.apache.directory.server.core.partition.DirectoryPartition;
+import org.apache.directory.shared.ldap.name.LdapDN;
 
 
 /**
@@ -134,6 +135,6 @@
      * @param authentication {@link Context#SECURITY_AUTHENTICATION} value
      * @throws NamingException if failed to create a context
      */
-    public abstract Context getJndiContext( String principal, byte[] credential, String authentication, String baseName )
-        throws NamingException;
+    public abstract Context getJndiContext( LdapDN principalDn, String principal, byte[] credential, 
+        String authentication, String baseName ) throws NamingException;
 }

Modified: directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/AbstractContextFactory.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/AbstractContextFactory.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/AbstractContextFactory.java (original)
+++ directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/AbstractContextFactory.java Tue Jul 18 09:21:50 2006
@@ -34,6 +34,7 @@
 import org.apache.directory.server.core.configuration.StartupConfiguration;
 import org.apache.directory.server.core.configuration.SyncConfiguration;
 import org.apache.directory.server.core.partition.DirectoryPartitionNexusProxy;
+import org.apache.directory.shared.ldap.name.LdapDN;
 
 
 /**
@@ -82,6 +83,16 @@
     {
         Configuration cfg = Configuration.toConfiguration( env );
         env = ( Hashtable ) env.clone();
+        
+        LdapDN principalDn = null;
+        if ( env.containsKey( Context.SECURITY_PRINCIPAL ) )
+        {
+            if ( env.get( Context.SECURITY_PRINCIPAL ) instanceof LdapDN )
+            {
+                principalDn = ( LdapDN ) env.get( Context.SECURITY_PRINCIPAL );
+            }
+        }
+        
         String principal = getPrincipal( env );
         byte[] credential = getCredential( env );
         String authentication = getAuthentication( env );
@@ -104,13 +115,14 @@
         }
         else if ( cfg instanceof AddPartitionConfiguration )
         {
-            new DirectoryPartitionNexusProxy( service.getJndiContext( principal, credential, authentication, "" ),
+            new DirectoryPartitionNexusProxy( 
+                service.getJndiContext( principalDn, principal, credential, authentication, "" ),
                 service ).addContextPartition( ( ( AddPartitionConfiguration ) cfg )
                 .getDirectoryPartitionConfiguration() );
         }
         else if ( cfg instanceof RemovePartitionConfiguration )
         {
-            Context ctx = service.getJndiContext( principal, credential, authentication, "" );
+            Context ctx = service.getJndiContext( principalDn, principal, credential, authentication, "" );
             DirectoryPartitionNexusProxy proxy = new DirectoryPartitionNexusProxy( ctx, service );
             proxy.removeContextPartition( ( ( RemovePartitionConfiguration ) cfg ).getSuffix() );
         }
@@ -119,7 +131,7 @@
             throw new NamingException( "Unknown configuration: " + cfg );
         }
 
-        return service.getJndiContext( principal, credential, authentication, providerUrl );
+        return service.getJndiContext( principalDn, principal, credential, authentication, providerUrl );
     }
 
 

Modified: directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/LdapJndiProperties.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/LdapJndiProperties.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/LdapJndiProperties.java (original)
+++ directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/LdapJndiProperties.java Tue Jul 18 09:21:50 2006
@@ -190,25 +190,35 @@
         // Figure out and set the security principal bindDn and saslAuthId
         // -------------------------------------------------------------------
 
-        if ( principal == null )
+        if ( env.containsKey( PropertyKeys.PARSED_BIND_DN ) )
         {
-            throw new LdapConfigurationException( Context.SECURITY_PRINCIPAL + " cannot be null." );
-        }
-
-        if ( !( principal instanceof String ) )
-        {
-            throw new LdapConfigurationException( "Don't know how to interpret " + principal.getClass()
-                + " objects for environment property " + Context.SECURITY_PRINCIPAL );
-        }
-
-        if ( ( ( String ) principal ).trim().equals( "" ) )
-        {
-            props.bindDn = LdapDN.EMPTY_LDAPDN;
+            props.bindDn = ( LdapDN ) env.get( PropertyKeys.PARSED_BIND_DN );
         }
         else
         {
-            props.bindDn = new LdapDN( ( String ) principal );
+            if ( principal == null )
+            {
+                throw new LdapConfigurationException( Context.SECURITY_PRINCIPAL + " cannot be null." );
+            }
+    
+            if ( !( principal instanceof String ) )
+            {
+                throw new LdapConfigurationException( "Don't know how to interpret " + principal.getClass()
+                    + " objects for environment property " + Context.SECURITY_PRINCIPAL );
+            }
+    
+            if ( ( ( String ) principal ).trim().equals( "" ) )
+            {
+                props.bindDn = LdapDN.EMPTY_LDAPDN;
+            }
+            else
+            {
+                props.bindDn = new LdapDN( ( String ) principal );
+            }
         }
+        
+        
+        
 
         if ( env.get( SASL_AUTHID ) != null && props.level == AuthenticationLevel.STRONG )
         {

Added: directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/PropertyKeys.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/PropertyKeys.java?rev=423126&view=auto
==============================================================================
--- directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/PropertyKeys.java (added)
+++ directory/branches/apacheds/optimization/core/src/main/java/org/apache/directory/server/core/jndi/PropertyKeys.java Tue Jul 18 09:21:50 2006
@@ -0,0 +1,29 @@
+/*
+ *   @(#) $Id$
+ *
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed 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.core.jndi;
+
+/**
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public interface PropertyKeys
+{
+    public static final String PARSED_BIND_DN = "parsed.bind.dn";
+}

Modified: directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java (original)
+++ directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/authz/support/MaxImmSubFilterTest.java Tue Jul 18 09:21:50 2006
@@ -203,8 +203,8 @@
         }
 
 
-        public Context getJndiContext( String principal, byte[] credential, String authentication, String baseName )
-            throws NamingException
+        public Context getJndiContext( LdapDN principalDn, String principal, byte[] credential, 
+            String authentication, String baseName ) throws NamingException
         {
             return null; //To change body of implemented methods use File | Settings | File Templates.
         }

Modified: directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java (original)
+++ directory/branches/apacheds/optimization/core/src/test/java/org/apache/directory/server/core/interceptor/InterceptorChainTest.java Tue Jul 18 09:21:50 2006
@@ -474,8 +474,8 @@
         }
 
 
-        public Context getJndiContext( String principal, byte[] credential, String authentication, String baseName )
-            throws NamingException
+        public Context getJndiContext( LdapDN principalDn, String principal, byte[] credential, 
+            String authentication, String baseName ) throws NamingException
         {
             return null; //To change body of implemented methods use File | Settings | File Templates.
         }

Modified: directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java (original)
+++ directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/SessionRegistry.java Tue Jul 18 09:21:50 2006
@@ -118,7 +118,7 @@
      *
      * @return the registry environment
      */
-    public Hashtable getEnvironment()
+    public Hashtable getEnvironmentByCopy()
     {
         return ( Hashtable ) env.clone();
     }

Modified: directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java?rev=423126&r1=423125&r2=423126&view=diff
==============================================================================
--- directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java (original)
+++ directory/branches/apacheds/optimization/protocol-ldap/src/main/java/org/apache/directory/server/ldap/support/BindHandler.java Tue Jul 18 09:21:50 2006
@@ -26,6 +26,7 @@
 import javax.naming.spi.InitialContextFactory;
 
 import org.apache.directory.server.core.configuration.StartupConfiguration;
+import org.apache.directory.server.core.jndi.PropertyKeys;
 import org.apache.directory.server.ldap.SessionRegistry;
 import org.apache.directory.shared.ldap.exception.LdapException;
 import org.apache.directory.shared.ldap.message.BindRequest;
@@ -58,7 +59,7 @@
         LdapContext ctx;
         BindRequest req = ( BindRequest ) request;
         LdapResult result = req.getResultResponse().getLdapResult();
-        Hashtable env = SessionRegistry.getSingleton().getEnvironment();
+        Hashtable env = SessionRegistry.getSingleton().getEnvironmentByCopy();
 
         // if the bind request is not simple then we freak: no strong auth yet
         if ( !req.isSimple() )
@@ -71,26 +72,25 @@
 
         // clone the environment first then add the required security settings
         byte[] creds = req.getCredentials();
-
-        Hashtable cloned = ( Hashtable ) env.clone();
-        cloned.put( Context.SECURITY_PRINCIPAL, req.getName() );
-        cloned.put( Context.SECURITY_CREDENTIALS, creds );
-        cloned.put( Context.SECURITY_AUTHENTICATION, "simple" );
+        env.put( Context.SECURITY_PRINCIPAL, req.getName() );
+        env.put( Context.SECURITY_CREDENTIALS, creds );
+        env.put( Context.SECURITY_AUTHENTICATION, "simple" );
+        env.put( PropertyKeys.PARSED_BIND_DN, req.getName() );
 
         if ( req.getControls().containsKey( ManageDsaITControl.CONTROL_OID ) )
         {
-            cloned.put( Context.REFERRAL, "ignore" );
+            env.put( Context.REFERRAL, "ignore" );
         }
         else
         {
-            cloned.put( Context.REFERRAL, "throw" );
+            env.put( Context.REFERRAL, "throw" );
         }
 
         try
         {
-            if ( cloned.containsKey( "server.use.factory.instance" ) )
+            if ( env.containsKey( "server.use.factory.instance" ) )
             {
-                InitialContextFactory factory = ( InitialContextFactory ) cloned.get( "server.use.factory.instance" );
+                InitialContextFactory factory = ( InitialContextFactory ) env.get( "server.use.factory.instance" );
 
                 if ( factory == null )
                 {
@@ -98,12 +98,12 @@
                 }
 
                 // Bind is a special case where we have to use the referral property to deal
-                ctx = ( LdapContext ) factory.getInitialContext( cloned );
+                ctx = ( LdapContext ) factory.getInitialContext( env );
             }
             else
             {
                 Control[] connCtls = ( Control[] ) req.getControls().values().toArray( EMPTY );
-                ctx = new InitialLdapContext( cloned, connCtls );
+                ctx = new InitialLdapContext( env, connCtls );
             }
         }
         catch ( NamingException e )