Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 62922 invoked from network); 2 Oct 2006 00:47:00 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 2 Oct 2006 00:47:00 -0000 Received: (qmail 19514 invoked by uid 500); 2 Oct 2006 00:46:59 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 19475 invoked by uid 500); 2 Oct 2006 00:46:59 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 19457 invoked by uid 99); 2 Oct 2006 00:46:59 -0000 Received: from idunn.apache.osuosl.org (HELO idunn.apache.osuosl.org) (140.211.166.84) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 01 Oct 2006 17:46:59 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=5.0 tests=ALL_TRUSTED,NO_REAL_NAME Received: from [140.211.166.113] ([140.211.166.113:62373] helo=eris.apache.org) by idunn.apache.osuosl.org (ecelerity 2.1.1.8 r(12930)) with ESMTP id 03/2B-05102-F7160254 for ; Sun, 01 Oct 2006 17:46:56 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 674EF1A981A; Sun, 1 Oct 2006 17:46:53 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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/ Date: Mon, 02 Oct 2006 00:46:53 -0000 To: commits@directory.apache.org From: akarasulu@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20061002004653.674EF1A981A@eris.apache.org> X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N 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 ); } }