]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/cache.c
Import slapd.conf mode change (with typo correction) from -devel.
[openldap] / servers / slapd / back-ldbm / cache.c
index 1ab9896cca3f59f32e8b2951a5ef23a9f7335b77..f8664f5ebe2b0c133601ed25314d6f838ca4380d 100644 (file)
@@ -35,7 +35,8 @@ cache_entry_cmp( Entry *e1, Entry *e2 )
 static int
 cache_entrydn_cmp( Entry *e1, Entry *e2 )
 {
-       return( strcasecmp( e1->e_dn, e2->e_dn ) );
+       /* compare their normalized dn's */
+       return( strcasecmp( e1->e_ndn, e2->e_ndn ) );
 }
 
 static int
@@ -234,10 +235,13 @@ cache_find_entry_dn2id(
        pthread_mutex_lock( &cache->c_mutex );
 
        e.e_dn = dn;
+       e.e_ndn = dn_normalize( ch_strdup( dn ) );
 
        if ( (ep = (Entry *) avl_find( cache->c_dntree, (caddr_t) &e,
                cache_entrydn_cmp )) != NULL )
        {
+               free(e.e_ndn);
+
                Debug(LDAP_DEBUG_TRACE, "====> cache_find_entry_dn2id: found dn: %s\n",
                        dn, 0, 0);
 
@@ -291,6 +295,8 @@ cache_find_entry_dn2id(
                return( id );
        }
 
+       free(e.e_ndn);
+
        /* free cache mutex */
        pthread_mutex_unlock( &cache->c_mutex );
 
@@ -417,18 +423,24 @@ cache_delete_entry_internal(
     Entry              *e
 )
 {
+       int rc = 0;     /* return code */
+
        /* dn tree */
        if ( avl_delete( &cache->c_dntree, (caddr_t) e, cache_entrydn_cmp )
                == NULL )
        {
-               return( -1 );
+               rc = -1;
        }
 
        /* id tree */
        if ( avl_delete( &cache->c_idtree, (caddr_t) e, cache_entryid_cmp )
                == NULL )
        {
-               return( -1 );
+               rc = -1;
+       }
+
+       if (rc != 0) {
+               return rc;
        }
 
        /* lru */