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/10/02 02:46:53 UTC

svn commit: r451848 - in /directory/trunks/apacheds: core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/ core/src/main/java/org/apache/directory/server/core/schema/ server-unit/src/test/java/org/apache/directory/server/

Author: akarasulu
Date: Sun Oct  1 17:46:52 2006
New Revision: 451848

URL: http://svn.apache.org/viewvc?view=rev&rev=451848
Log:
fix for DIRSERVER-752

Modified:
    directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
    directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/DnNormalizer.java
    directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/AddITest.java

Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java?view=diff&rev=451848&r1=451847&r2=451848
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmPartition.java Sun Oct  1 17:46:52 2006
@@ -642,7 +642,7 @@
         oneAliasIdx.drop( ancestorId, targetId );
         subAliasIdx.drop( ancestorId, targetId );
 
-        while ( !ancestorDn.equals( upSuffix ) )
+        while ( !ancestorDn.equals( normSuffix ) )
         {
             ancestorDn = ( LdapDN ) ancestorDn.getPrefix( 1 );
             ancestorId = getEntryId( ancestorDn.toString() );
@@ -751,7 +751,7 @@
         // Add the alias to the simple alias index
         // TODO should we be adding aliasTarget which is not normalized or 
         //      should we be adding targetDn.toNormName()
-        aliasIdx.add( aliasTarget, aliasId );
+        aliasIdx.add( normalizedAliasTargetDn.getNormName(), aliasId );
 
         /*
          * Handle One Level Scope Alias Index
@@ -786,7 +786,7 @@
                 subAliasIdx.add( ancestorId, targetId );
             }
 
-            ancestorDn = ( LdapDN ) ancestorDn.remove( ancestorDn.size() - 1 );
+            ancestorDn.remove( ancestorDn.size() - 1 );
             ancestorId = getEntryId( ancestorDn.toNormName() );
         }
     }

Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/DnNormalizer.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/DnNormalizer.java?view=diff&rev=451848&r1=451847&r2=451848
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/DnNormalizer.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/schema/DnNormalizer.java Sun Oct  1 17:46:52 2006
@@ -62,6 +62,6 @@
         }
         
         dn.normalize( attrRegistry.getNormalizerMapping() );
-        return dn;
+        return dn.getNormName();
     }
 }

Modified: directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/AddITest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/AddITest.java?view=diff&rev=451848&r1=451847&r2=451848
==============================================================================
--- directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/AddITest.java (original)
+++ directory/trunks/apacheds/server-unit/src/test/java/org/apache/directory/server/AddITest.java Sun Oct  1 17:46:52 2006
@@ -21,6 +21,8 @@
 
 
 import javax.naming.directory.*;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 
 import netscape.ldap.LDAPAttribute;
@@ -355,5 +357,122 @@
         {
             
         }
+    }
+
+
+    /**
+     * Try to add entry and an alias to it. Afterwards, remove it.
+     */
+    public void testAddAlias() throws NamingException
+    {
+
+        // Create entry
+        Attributes entry = new BasicAttributes();
+        Attribute entryOcls = new BasicAttribute( "objectclass" );
+        entryOcls.add( "top" );
+        entryOcls.add( "organizationalUnit" );
+        entry.put( entryOcls );
+        entry.put( "ou", "favorite" );
+        String entryRdn = "ou=favorite";
+        ctx.createSubcontext( entryRdn, entry );
+
+        // Create Alias
+        String aliasedObjectName = entryRdn + "," + ctx.getNameInNamespace();
+        Attributes alias = new BasicAttributes();
+        Attribute aliasOcls = new BasicAttribute( "objectclass" );
+        aliasOcls.add( "top" );
+        aliasOcls.add( "alias" );
+        alias.put( aliasOcls );
+        alias.put( "ou", "bestFruit" );
+        alias.put( "aliasedObjectName", aliasedObjectName );
+        String rdnAlias = "ou=bestFruit";
+        ctx.createSubcontext( rdnAlias, alias );
+
+        // Remove alias and entry
+        ctx.destroySubcontext( rdnAlias );
+        ctx.destroySubcontext( entryRdn );
+    }
+
+
+    /**
+     * Try to add entry and an alias to it. Afterwards, remove it. This version
+     * cretes a container entry before the operations.
+     */
+    public void testAddAliasInContainer() throws NamingException
+    {
+
+        // Create container
+        Attributes container = new BasicAttributes();
+        Attribute containerOcls = new BasicAttribute( "objectclass" );
+        containerOcls.add( "top" );
+        containerOcls.add( "organizationalUnit" );
+        container.put( containerOcls );
+        container.put( "ou", "Fruits" );
+        String containerRdn = "ou=Fruits";
+        DirContext containerCtx = ctx.createSubcontext( containerRdn, container );
+
+        // Create entry
+        Attributes entry = new BasicAttributes();
+        Attribute entryOcls = new BasicAttribute( "objectclass" );
+        entryOcls.add( "top" );
+        entryOcls.add( "organizationalUnit" );
+        entry.put( entryOcls );
+        entry.put( "ou", "favorite" );
+        String entryRdn = "ou=favorite";
+        containerCtx.createSubcontext( entryRdn, entry );
+
+        // Create alias ou=bestFruit,ou=Fruits to entry ou=favorite,ou=Fruits
+        String aliasedObjectName = entryRdn + "," + containerCtx.getNameInNamespace();
+        Attributes alias = new BasicAttributes();
+        Attribute aliasOcls = new BasicAttribute( "objectclass" );
+        aliasOcls.add( "top" );
+        aliasOcls.add( "alias" );
+        alias.put( aliasOcls );
+        alias.put( "ou", "bestFruit" );
+        alias.put( "aliasedObjectName", aliasedObjectName );
+        String rdnAlias = "ou=bestFruit";
+        containerCtx.createSubcontext( rdnAlias, alias );
+
+        // search one level scope for alias 
+        SearchControls controls = new SearchControls();
+        controls.setDerefLinkFlag( true );
+        controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
+        containerCtx.addToEnvironment( "java.naming.ldap.derefAliases", "never" );
+        NamingEnumeration ne = containerCtx.search( "", "(objectClass=*)", controls );
+        assertTrue( ne.hasMore() );
+        SearchResult sr = ( SearchResult ) ne.next();
+        assertEquals( "ou=favorite", sr.getName() );
+        assertTrue( ne.hasMore() );
+        sr = ( SearchResult ) ne.next();
+        assertEquals( "ou=bestFruit", sr.getName() );
+        
+        // search one level with dereferencing turned on
+        controls = new SearchControls();
+        controls.setDerefLinkFlag( true );
+        controls.setSearchScope( SearchControls.ONELEVEL_SCOPE );
+        containerCtx.addToEnvironment( "java.naming.ldap.derefAliases", "always" );
+        ne = containerCtx.search( "", "(objectClass=*)", controls );
+        assertTrue( ne.hasMore() );
+        sr = ( SearchResult ) ne.next();
+        assertEquals( "ou=favorite", sr.getName() );
+        assertFalse( ne.hasMore() );
+        
+        // search with base set to alias and dereferencing turned on
+        controls = new SearchControls();
+        controls.setDerefLinkFlag( false );
+        controls.setSearchScope( SearchControls.OBJECT_SCOPE );
+        containerCtx.addToEnvironment( "java.naming.ldap.derefAliases", "always" );
+        ne = containerCtx.search( "ou=bestFruit", "(objectClass=*)", controls );
+        assertTrue( ne.hasMore() );
+        sr = ( SearchResult ) ne.next();
+        assertEquals( "ldap://localhost:1024/ou=favorite,ou=Fruits,ou=system", sr.getName() );
+        assertFalse( ne.hasMore() );
+        
+        // Remove alias and entry
+        containerCtx.destroySubcontext( rdnAlias );
+        containerCtx.destroySubcontext( entryRdn );
+
+        // Remove container
+        ctx.destroySubcontext( containerRdn );
     }
 }