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 2016/06/20 19:02:24 UTC

svn commit: r1749386 - in /directory/apacheds/branches/apacheds-value: core-api/src/main/java/org/apache/directory/server/core/api/entry/ core-integ/src/test/java/org/apache/directory/server/core/jndi/ core-integ/src/test/java/org/apache/directory/serv...

Author: elecharny
Date: Mon Jun 20 19:02:24 2016
New Revision: 1749386

URL: http://svn.apache.org/viewvc?rev=1749386&view=rev
Log:
Multiple fixes and speedup in the server code :
o store either a String or a byte[] in an Attribute when converting it from a JNDI Attribute
o Refactored the SortedEnctry comparator to take care of the special case of the entryDn attribute
o Fix a bug in the applyRdn() in the schemaInterceptor class
o Store the normalized target DN in the searchRequest context
o Handle correctly a null DN for NTLM
o Correctly return the list of evaluators in the AndEvaluator optimize() method
o Fetch a cursor using the normalized value instead of the upValue in the CursorBuilder
o Speedup in the Optimizer : if the key is already normalized, dnon't do it again
o Fixed the count when the number of candidate is > 100, by using the normalized value instead of the up value (that would set the count to 0)

Modified:
    directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java
    directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java
    directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java
    directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java
    directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java
    directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
    directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java
    directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java
    directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java
    directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java
    directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
    directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java
    directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
    directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java

Modified: directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java (original)
+++ directory/apacheds/branches/apacheds-value/core-api/src/main/java/org/apache/directory/server/core/api/entry/ServerEntryUtils.java Mon Jun 20 19:02:24 2016
@@ -83,7 +83,14 @@ public final class ServerEntryUtils
 
         for ( Value value : entryAttribute )
         {
-            attribute.add( value.getValue() );
+            if ( attributeType.isHR() )
+            {
+                attribute.add( value.getValue() );
+            }
+            else
+            {
+                attribute.add( value.getBytes() );
+            }
         }
 
         return attribute;

Modified: directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java (original)
+++ directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/jndi/ObjStateFactoryIT.java Mon Jun 20 19:02:24 2016
@@ -74,7 +74,7 @@ public class ObjStateFactoryIT extends A
         Person me = ( Person ) obj;
         assertEquals( attrs.get( "sn" ).get(), me.getLastname() );
         assertEquals( attrs.get( "cn" ).get(), me.getCn() );
-        assertEquals( "test", attrs.get( "userPassword" ).get() );
+        assertEquals( "test", Strings.utf8ToString( ( byte[] ) attrs.get( "userPassword" ).get() ) );
         assertEquals( attrs.get( "telephonenumber" ).get(), me.getTelephoneNumber() );
         assertNull( me.getSeealso() );
         assertNull( me.getDescription() );
@@ -92,7 +92,7 @@ public class ObjStateFactoryIT extends A
         Attributes attrs = sysRoot.getAttributes( "sn=Rodriguez, ou=users" );
         assertEquals( "Rodriguez", attrs.get( "sn" ).get() );
         assertEquals( "Mr. Kerberos", attrs.get( "cn" ).get() );
-        assertEquals( "noices", attrs.get( "userPassword" ).get() );
+        assertEquals( "noices", Strings.utf8ToString( ( byte[] ) attrs.get( "userPassword" ).get() ) );
         assertEquals( "555-1212", attrs.get( "telephonenumber" ).get() );
         assertEquals( "sn=erodriguez", attrs.get( "seealso" ).get() );
         assertEquals( "committer", attrs.get( "description" ).get() );

Modified: directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java (original)
+++ directory/apacheds/branches/apacheds-value/core-integ/src/test/java/org/apache/directory/server/core/operations/modify/ModifyAddIT.java Mon Jun 20 19:02:24 2016
@@ -42,6 +42,7 @@ import javax.naming.directory.SchemaViol
 import javax.naming.ldap.LdapContext;
 
 import org.apache.directory.api.util.StringConstants;
+import org.apache.directory.api.util.Strings;
 import org.apache.directory.server.core.annotations.ApplyLdifs;
 import org.apache.directory.server.core.annotations.CreateDS;
 import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
@@ -338,7 +339,7 @@ public class ModifyAddIT extends Abstrac
         attrs = sysRoot.getAttributes( "ou=testing01" );
         Attribute attr = attrs.get( "crossCertificatePair" );
         assertNotNull( attr );
-        assertTrue( attr.contains( "12345" ) );
+        assertTrue( attr.contains( "12345".getBytes() ) );
         assertEquals( 1, attr.size() );
     }
 
@@ -364,7 +365,7 @@ public class ModifyAddIT extends Abstrac
         attrs = sysRoot.getAttributes( "ou=testing01" );
         Attribute attr = attrs.get( "crossCertificatePair" );
         assertNotNull( attr );
-        assertTrue( attr.contains( "" ) );
+        assertTrue( attr.contains( Strings.EMPTY_BYTES ) );
         assertEquals( 1, attr.size() );
     }
 
@@ -557,8 +558,8 @@ public class ModifyAddIT extends Abstrac
         attrs = sysRoot.getAttributes( "ou=testing01" );
         Attribute attr = attrs.get( "crossCertificatePair" );
         assertNotNull( attr );
-        assertTrue( attr.contains( "12345" ) );
-        assertTrue( attr.contains( "" ) );
+        assertTrue( attr.contains( "12345".getBytes() ) );
+        assertTrue( attr.contains( Strings.EMPTY_BYTES ) );
         assertEquals( 2, attr.size() );
     }
     

Modified: directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java (original)
+++ directory/apacheds/branches/apacheds-value/core-shared/src/main/java/org/apache/directory/server/core/shared/SortedEntryComparator.java Mon Jun 20 19:02:24 2016
@@ -24,6 +24,7 @@ import java.io.Serializable;
 import java.util.Comparator;
 import java.util.TreeSet;
 
+import org.apache.directory.api.ldap.model.constants.SchemaConstants;
 import org.apache.directory.api.ldap.model.entry.Attribute;
 import org.apache.directory.api.ldap.model.entry.Entry;
 import org.apache.directory.api.ldap.model.entry.Value;
@@ -32,6 +33,7 @@ import org.apache.directory.api.ldap.mod
 import org.apache.directory.api.ldap.model.schema.LdapComparator;
 import org.apache.directory.api.ldap.model.schema.MatchingRule;
 import org.apache.directory.api.ldap.model.schema.SchemaManager;
+import org.apache.directory.api.ldap.model.schema.comparators.ParsedDnComparator;
 
 /**
  * A comparator to sort the entries as per <a href="http://tools.ietf.org/html/rfc2891">RFC 2891</a>
@@ -74,26 +76,37 @@ class SortedEntryComparator implements C
         {
             multivalued = true;
         }
-
-        hr = at.getSyntax().isHumanReadable();
-
-        if ( mrule != null )
+        
+        // Special case : entryDn
+        if ( SchemaConstants.ENTRY_DN_AT_OID.equals( at.getOid() ) )
         {
-            comparator = schemaManager.lookupComparatorRegistry( mrule );
+            // We will use the Entry's DN comparator.
+            comparator = new ParsedDnComparator( SchemaConstants.ENTRY_DN_AT_OID );
+            comparator.setSchemaManager( schemaManager );
+            hr = true;
         }
         else
-        {
-            MatchingRule mr = at.getOrdering();
-            
-            if ( mr == null )
+        { 
+            hr = at.getSyntax().isHumanReadable();
+    
+            if ( mrule != null )
+            {
+                comparator = schemaManager.lookupComparatorRegistry( mrule );
+            }
+            else
             {
-                mr = at.getEquality();
+                MatchingRule mr = at.getOrdering();
+                
+                if ( mr == null )
+                {
+                    mr = at.getEquality();
+                }
+                
+                comparator = schemaManager.lookupComparatorRegistry( mr.getOid() );
             }
             
-            comparator = schemaManager.lookupComparatorRegistry( mr.getOid() );
+            comparator.setSchemaManager( schemaManager );
         }
-        
-        comparator.setSchemaManager( schemaManager );
     }
 
 

Modified: directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java (original)
+++ directory/apacheds/branches/apacheds-value/interceptors/normalization/src/test/java/org/apache/directory/server/core/normalization/NormalizationVisitorTest.java Mon Jun 20 19:02:24 2016
@@ -93,7 +93,7 @@ public class NormalizationVisitorTest
         assertTrue( result instanceof EqualityNode<?> );
         EqualityNode<?> equalityNode = (org.apache.directory.api.ldap.model.filter.EqualityNode<?> ) result;
 
-        assertEquals( " test  1 ", equalityNode.getValue().getValue() );
+        assertEquals( " test  1 ", equalityNode.getValue().getNormalized() );
         assertEquals( "2.5.4.11", equalityNode.getAttributeType().getOid() );
     }
 

Modified: directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java (original)
+++ directory/apacheds/branches/apacheds-value/interceptors/schema/src/main/java/org/apache/directory/server/core/schema/SchemaInterceptor.java Mon Jun 20 19:02:24 2016
@@ -1303,6 +1303,8 @@ public class SchemaInterceptor extends B
         
         for ( List<ModDnAva> modDnAvas : modifiedAvas.values() )
         {
+            List<ModDnAva> addedModDnAvs = new ArrayList<>();
+            
             for ( ModDnAva modDnAva : modDnAvas )
             {
                 Ava ava = modDnAva.getAva();
@@ -1322,7 +1324,7 @@ public class SchemaInterceptor extends B
                                 removedSVs = new ArrayList<>();
                             }
                             
-                            modDnAvas.add( new ModDnAva( ModDnAva.ModDnType.UPDATE_DELETE, ava ) );
+                            addedModDnAvs.add( new ModDnAva( ModDnAva.ModDnType.UPDATE_DELETE, ava ) );
                             removedSVs.add( new ModDnAva( ModDnAva.ModDnType.UPDATE_DELETE, new Ava( schemaManager, svAttribute.getId(), svAttribute.getString() ) ) );
                         }
                         
@@ -1338,6 +1340,8 @@ public class SchemaInterceptor extends B
                         break;
                 }
             }
+            
+            modDnAvas.addAll( addedModDnAvs );
         }
         
         // Add the SV attributes that has to be removed to the list of ModDnAva

Modified: directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java (original)
+++ directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/request/SearchRequestHandler.java Mon Jun 20 19:02:24 2016
@@ -1228,6 +1228,7 @@ public class SearchRequestHandler extend
         if ( !reqTargetDn.isSchemaAware() )
         {
             reqTargetDn = new Dn( directoryService.getSchemaManager(), reqTargetDn );
+            req.setBase( reqTargetDn );
         }
 
         // Check if the entry itself is a referral

Modified: directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java (original)
+++ directory/apacheds/branches/apacheds-value/protocol-ldap/src/main/java/org/apache/directory/server/ldap/handlers/sasl/ntlm/NtlmSaslServer.java Mon Jun 20 19:02:24 2016
@@ -168,7 +168,11 @@ public class NtlmSaslServer extends Abst
                     result = provider.authenticate( getLdapSession().getIoSession(), response );
                     Dn dn = getBindRequest().getDn();
                     
-                    if ( !dn.isSchemaAware() )
+                    if ( dn == null )
+                    {
+                        dn = new Dn( getLdapSession().getLdapServer().getDirectoryService().getSchemaManager() );
+                    }
+                    else if ( !dn.isSchemaAware() ) 
                     {
                         dn = new Dn( getLdapSession().getLdapServer().getDirectoryService().getSchemaManager(), dn );
                     }

Modified: directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java (original)
+++ directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/add/AddingEntriesWithSpecialCharactersInRDNIT.java Mon Jun 20 19:02:24 2016
@@ -396,7 +396,7 @@ public class AddingEntriesWithSpecialCha
             "objectClass: person",
             "objectClass: organizationalPerson",
             "objectClass: inetOrgPerson",
-            "cn:  User",
+            "cn:  User1",
             "sn:  Name " );
 
         connection.add( entry );
@@ -406,9 +406,9 @@ public class AddingEntriesWithSpecialCha
         assertNotNull( addedEntry );
 
         assertEquals( "Name", addedEntry.get( "sn" ).getString() );
-        assertEquals( "User", addedEntry.get( "cn" ).getString() );
+        assertEquals( "User1", addedEntry.get( "cn" ).getString() );
         assertEquals( 2, addedEntry.get( "cn" ).size() );
-        assertTrue( addedEntry.contains( "cn", "User" ) );
-        assertTrue( addedEntry.contains( "cn", "\\ User" ) );
+        assertTrue( addedEntry.contains( "cn", " User" ) );
+        assertTrue( addedEntry.contains( "cn", "User1" ) );
     }
 }
\ No newline at end of file

Modified: directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java (original)
+++ directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/operations/ldapsdk/AddIT.java Mon Jun 20 19:02:24 2016
@@ -1256,7 +1256,7 @@ public class AddIT extends AbstractLdapT
         javax.naming.directory.Attribute cnAttribute = res.next().getAttributes().get( "cn" );
         assertEquals( 2, cnAttribute.size() );
         assertTrue( cnAttribute.contains( "Tori,Amos" ) );
-        assertTrue( cnAttribute.contains( "Amos\\,Tori" ) );
+        assertTrue( cnAttribute.contains( "Amos,Tori" ) );
         assertFalse( res.hasMore() );
 
         // search for the implicit added userPassword

Modified: directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java (original)
+++ directory/apacheds/branches/apacheds-value/server-integ/src/test/java/org/apache/directory/server/ppolicy/PasswordPolicyIT.java Mon Jun 20 19:02:24 2016
@@ -1119,7 +1119,7 @@ public class PasswordPolicyIT extends Ab
         policyConfig.setPwdMaxFailure( 3 );
         policyConfig.setPwdLockout( true );
 
-        Dn userDn = new Dn( "cn=userLockout,ou=system" );
+        Dn userDn = new Dn( getService().getSchemaManager(), "cn=userLockout,ou=system" );
         LdapConnection adminConnection = getAdminNetworkConnection( getLdapServer() );
 
         addUser( adminConnection, "userLockout", "12345" );

Modified: directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java (original)
+++ directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/evaluator/AndEvaluator.java Mon Jun 20 19:02:24 2016
@@ -107,7 +107,7 @@ public class AndEvaluator implements Eva
 
                 Collections.sort( optimized, new ScanCountComparator() );
 
-                return evaluators;
+                return optimized;
         }
         
         /* Potential speed up, for when we do'nt care about the evaluation itself.

Modified: directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java (original)
+++ directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/CursorBuilder.java Mon Jun 20 19:02:24 2016
@@ -217,7 +217,7 @@ public class CursorBuilder
         {
             // Get the cursor using the index
             Index<T, String> userIndex = ( Index<T, String> ) db.getIndex( attributeType );
-            Cursor<IndexEntry<T, String>> userIdxCursor = userIndex.forwardCursor( ( T ) value.getValue() );
+            Cursor<IndexEntry<T, String>> userIdxCursor = userIndex.forwardCursor( ( T ) value.getNormalized() );
             Set<String> uuidSet = searchResult.getCandidateSet();
 
             // And loop on it

Modified: directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java?rev=1749386&r1=1749385&r2=1749386&view=diff
==============================================================================
--- directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java (original)
+++ directory/apacheds/branches/apacheds-value/xdbm-partition/src/main/java/org/apache/directory/server/xdbm/search/impl/DefaultOptimizer.java Mon Jun 20 19:02:24 2016
@@ -305,7 +305,16 @@ public class DefaultOptimizer<E> impleme
         {
             Index<V, String> idx = ( Index<V, String> ) db.getIndex( node.getAttributeType() );
 
-            String normalizedKey = node.getAttributeType().getEquality().getNormalizer().normalize( node.getValue().getValue() );
+            String normalizedKey;
+            
+            if ( node.getValue().isSchemaAware() )
+            {
+                normalizedKey = node.getValue().getNormalized();
+            }
+            else
+            {
+                normalizedKey = node.getAttributeType().getEquality().getNormalizer().normalize( node.getValue().getValue() );
+            }
             
             Cursor<String> result = idx.forwardValueCursor( ( V ) normalizedKey );
             Set<String> values = new HashSet<String>();
@@ -337,7 +346,7 @@ public class DefaultOptimizer<E> impleme
                 // Reset the candidates annotation
                 node.set( CANDIDATES_ANNOTATION_KEY, null );
 
-                return idx.count( ( V ) node.getValue().getValue() );
+                return idx.count( ( V ) node.getValue().getNormalized() );
             }
         }