]> git.sur5r.net Git - openldap/commitdiff
More struct berval conversions
authorHoward Chu <hyc@openldap.org>
Tue, 1 Jan 2002 13:31:20 +0000 (13:31 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 1 Jan 2002 13:31:20 +0000 (13:31 +0000)
16 files changed:
servers/slapd/back-ldbm/add.c
servers/slapd/back-ldbm/alias.c
servers/slapd/back-ldbm/attribute.c
servers/slapd/back-ldbm/bind.c
servers/slapd/back-ldbm/cache.c
servers/slapd/back-ldbm/compare.c
servers/slapd/back-ldbm/delete.c
servers/slapd/back-ldbm/dn2id.c
servers/slapd/back-ldbm/group.c
servers/slapd/back-ldbm/modify.c
servers/slapd/back-ldbm/modrdn.c
servers/slapd/back-ldbm/passwd.c
servers/slapd/back-ldbm/proto-back-ldbm.h
servers/slapd/back-ldbm/referral.c
servers/slapd/back-ldbm/search.c
servers/slapd/back-ldbm/tools.c

index 059abb031189cfb3ed8d1572005687e892c08922..ad43e63c7cd637c932bbf8600b0f073259b11ab1 100644 (file)
@@ -25,7 +25,7 @@ ldbm_back_add(
 )
 {
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
-       char            *pdn;
+       struct berval   pdn;
        Entry           *p = NULL;
        int                     rootlock = 0;
        int                     rc;
@@ -45,7 +45,7 @@ ldbm_back_add(
        /* nobody else can add until we lock our parent */
        ldap_pvt_thread_mutex_lock(&li->li_add_mutex);
 
-       if ( ( rc = dn2id( be, e->e_ndn, &id ) ) || id != NOID ) {
+       if ( ( rc = dn2id( be, &e->e_nname, &id ) ) || id != NOID ) {
                /* if (rc) something bad happened to ldbm cache */
                ldap_pvt_thread_mutex_unlock(&li->li_add_mutex);
                send_ldap_result( conn, op, 
@@ -80,15 +80,17 @@ ldbm_back_add(
         * add the entry.
         */
 
-       pdn = dn_parent( be, e->e_ndn );
+       pdn.bv_val = dn_parent( be, e->e_ndn );
+       if (pdn.bv_val && pdn.bv_val[0])
+               pdn.bv_len = e->e_nname.bv_len - (pdn.bv_val - e->e_ndn);
+       else
+               pdn.bv_len = 0;
 
-       if( pdn != NULL && *pdn != '\0' ) {
+       if( pdn.bv_len ) {
                Entry *matched = NULL;
 
-               assert( *pdn != '\0' );
-
                /* get parent with writer lock */
-               if ( (p = dn2entry_w( be, pdn, &matched )) == NULL ) {
+               if ( (p = dn2entry_w( be, &pdn, &matched )) == NULL ) {
                        char *matched_dn = NULL;
                        struct berval **refs;
 
@@ -198,8 +200,8 @@ ldbm_back_add(
                }
 
        } else {
-               if(pdn != NULL) {
-                       assert( *pdn == '\0' );
+               if(pdn.bv_val != NULL) {
+                       assert( *pdn.bv_val == '\0' );
                }
 
                /* no parent, must be adding entry to root */
@@ -239,11 +241,11 @@ ldbm_back_add(
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                                           "ldbm_back_add: %s add denied.\n",
-                                          pdn == NULL ? "suffix" 
+                                          pdn.bv_val == NULL ? "suffix" 
                                           : "entry at root" ));
 #else
                                Debug( LDAP_DEBUG_TRACE, "%s add denied\n",
-                                               pdn == NULL ? "suffix" 
+                                               pdn.bv_val == NULL ? "suffix" 
                                                : "entry at root", 0, 0 );
 #endif
 
@@ -340,7 +342,7 @@ ldbm_back_add(
        }
 
        /* dn2id index */
-       if ( dn2id_add( be, e->e_ndn, e->e_id ) != 0 ) {
+       if ( dn2id_add( be, &e->e_nname, e->e_id ) != 0 ) {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                           "ldbm_back_add: dn2id_add failed.\n" ));
@@ -367,7 +369,7 @@ ldbm_back_add(
 #endif
 
                /* FIXME: delete attr indices? */
-               (void) dn2id_delete( be, e->e_ndn, e->e_id );
+               (void) dn2id_delete( be, &e->e_nname, e->e_id );
                
                send_ldap_result( conn, op, LDAP_OTHER,
                        NULL, "entry store failed", NULL, NULL );
index c2d4354fe1bb97a85ea9668f9a1d8b7f234f5a57..17da4e7fabb6512b43d683634eebdb536662173a 100644 (file)
 #include "proto-back-ldbm.h"
 
 
-static char* get_alias_dn(
+static int get_alias_dn(
        Entry *e,
+       struct berval *al,
        int *err,
        const char **errmsg );
 
-static char* new_superior(
-       const char *dn,
-       const char *oldSup,
-       const char *newSup );
+static void new_superior(
+       struct berval *dn,
+       struct berval *oldSup,
+       struct berval *newSup,
+       struct berval *res );
 
 static int dnlist_subordinate(
-       char** dnlist,
-       const char *dn );
+       BVarray dnlist,
+       struct berval *dn );
 
 Entry *deref_internal_r(
        Backend*        be,
@@ -36,12 +38,12 @@ Entry *deref_internal_r(
        Entry**         matched,
        const char**            text )
 {
-       char *dn;
+       struct berval dn;
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
        Entry *entry;
        Entry *sup;
        unsigned depth;
-       char **dnlist;
+       BVarray dnlist;
 
        assert( ( alias != NULL && dn_in == NULL )
                || ( alias == NULL && dn_in != NULL ) );
@@ -51,22 +53,22 @@ Entry *deref_internal_r(
        *text = NULL;
 
        if( alias == NULL ) {
-               dn = ch_strdup( dn_in->bv_val );
-               entry = dn2entry_r( be, dn, &sup );
+               ber_dupbv( &dn, dn_in );
+               entry = dn2entry_r( be, &dn, &sup );
 
        } else {
-               dn = ch_strdup( alias->e_ndn );
+               ber_dupbv( &dn, &alias->e_nname );
                entry = alias;
                sup = NULL;
        }
 
        dnlist = NULL;
-       charray_add( &dnlist, dn );
+       bvarray_add( &dnlist, &dn );
 
        for( depth=0 ; ; depth++ ) {
                if( entry != NULL ) {
                        Entry *newe;
-                       char *aliasDN;
+                       struct berval aliasDN;
 
                        /* have entry, may be an alias */
 
@@ -85,17 +87,15 @@ Entry *deref_internal_r(
                        }
 
                        /* deref entry */
-                       aliasDN = get_alias_dn( entry, err, text );
-
-                       if( aliasDN == NULL ) {
+                       if( get_alias_dn( entry, &aliasDN, err, text )) {
                                *matched = entry;
                                entry = NULL;
                                break;
                        }
 
                        /* check if aliasDN is a subordinate of any DN in our list */
-                       if( dnlist_subordinate( dnlist, aliasDN ) ) {
-                               ch_free( aliasDN );
+                       if( dnlist_subordinate( dnlist, &aliasDN ) ) {
+                               ch_free( aliasDN.bv_val );
                                *matched = entry;
                                entry = NULL;
                                *err = LDAP_ALIAS_PROBLEM;
@@ -105,15 +105,15 @@ Entry *deref_internal_r(
 
                        /* attempt to dereference alias */
 
-                       newe = dn2entry_r( be, aliasDN, &sup );
-                       ch_free( aliasDN );
+                       newe = dn2entry_r( be, &aliasDN, &sup );
+                       ch_free( aliasDN.bv_val );
 
                        if( newe != NULL ) {
-                               free( dn );
+                               free( dn.bv_val );
                                cache_return_entry_r(&li->li_cache, entry );
                                entry = newe;
-                               dn = ch_strdup( entry->e_ndn );
-                               charray_add( &dnlist, dn );
+                               ber_dupbv( &dn, &entry->e_nname );
+                               bvarray_add( &dnlist, &dn );
                                continue;
                        }
                        
@@ -130,8 +130,8 @@ Entry *deref_internal_r(
                        /* have superior, may be an alias */
                        Entry *newe;
                        Entry *newSup;
-                       char *supDN;
-                       char *aliasDN;
+                       struct berval supDN;
+                       struct berval aliasDN;
 
                        if( !is_entry_alias( sup ) ) {
                                /* entry is not an alias */
@@ -150,27 +150,17 @@ Entry *deref_internal_r(
                        }
 
                        /* deref entry */
-                       supDN = get_alias_dn( sup, err, text );
-
-                       if( supDN == NULL ) {
+                       if( get_alias_dn( sup, &supDN, err, text )) {
                                *matched = sup;
                                break;
                        }
 
-                       aliasDN = new_superior( dn, sup->e_ndn, supDN );
-                       free(supDN);
-
-                       if( aliasDN == NULL ) {
-                               free(aliasDN);
-                               *matched = sup;
-                               *err = LDAP_ALIAS_PROBLEM;
-                               *text = "superior alias problem";
-                               break;
-                       }
+                       new_superior( &dn, &sup->e_nname, &supDN, &aliasDN );
+                       free(supDN.bv_val);
 
                        /* check if aliasDN is a subordinate of any DN in our list */
-                       if( dnlist_subordinate( dnlist, aliasDN ) ) {
-                               free(aliasDN);
+                       if( dnlist_subordinate( dnlist, &aliasDN ) ) {
+                               free(aliasDN.bv_val);
                                *matched = entry;
                                entry = NULL;
                                *err = LDAP_ALIAS_PROBLEM;
@@ -179,24 +169,23 @@ Entry *deref_internal_r(
                        }
 
                        /* attempt to dereference alias */
-                       newe = dn2entry_r( be, aliasDN, &newSup );
+                       newe = dn2entry_r( be, &aliasDN, &newSup );
 
                        if( newe != NULL ) {
-                               free(aliasDN);
-                               free( dn );
+                               free(aliasDN.bv_val);
+                               free( dn.bv_val );
                                cache_return_entry_r(&li->li_cache, sup );
                                entry = newe;
-                               dn = ch_strdup( entry->e_ndn );
-                               charray_add( &dnlist, dn );
+                               ber_dupbv( &dn, &entry->e_nname );
+                               bvarray_add( &dnlist, &dn );
                                continue;
-
                        }
                        
                        if ( newSup != NULL ) {
-                               free( dn );
+                               free( dn.bv_val );
                                cache_return_entry_r(&li->li_cache, sup );
                                sup = newSup;
-                               dn = aliasDN;
+                               ber_dupbv( &dn, &aliasDN );
                                continue;
                        }
 
@@ -208,19 +197,19 @@ Entry *deref_internal_r(
                }
        }
 
-       free( dn );
-       charray_free( dnlist );
+       free( dn.bv_val );
+       bvarray_free( dnlist );
        return entry;
 }
 
 
-static char* get_alias_dn(
+static int get_alias_dn(
        Entry *e,
+       struct berval *ndn,
        int *err,
        const char **errmsg )
 {      
        int rc;
-       struct berval ndn;
        Attribute *a;
        AttributeDescription *aliasedObjectName
                = slap_schema.si_ad_aliasedObjectName;
@@ -233,7 +222,7 @@ static char* get_alias_dn(
                 */
                *err = LDAP_ALIAS_PROBLEM;
                *errmsg = "alias missing aliasedObjectName attribute";
-               return NULL;
+               return -1;
        }
 
        /* 
@@ -245,60 +234,58 @@ static char* get_alias_dn(
                 */
                *err = LDAP_ALIAS_PROBLEM;
                *errmsg = "alias missing aliasedObjectName value";
-               return NULL;
+               return -1;
        }
 
        if( a->a_vals[1] != NULL ) {
                *err = LDAP_ALIAS_PROBLEM;
                *errmsg = "alias has multivalued aliasedObjectName";
-               return NULL;
+               return -1;
        }
 
-       rc = dnNormalize2( NULL, a->a_vals[0], &ndn );
+       rc = dnNormalize2( NULL, a->a_vals[0], ndn );
        if( rc != LDAP_SUCCESS ) {
                *err = LDAP_ALIAS_PROBLEM;
                *errmsg = "alias aliasedObjectName value is invalid";
-               return NULL;
+               return -1;
        }
 
-       return ndn.bv_val;
+       return 0;
 }
 
-static char* new_superior(
-       const char *dn,
-       const char *oldSup,
-       const char *newSup )
+static void new_superior(
+       struct berval *dn,
+       struct berval *oldSup,
+       struct berval *newSup,
+       struct berval *newDN )
 {
-       char *newDN;
        size_t dnlen, olen, nlen;
-       assert( dn && oldSup && newSup );
+       assert( dn && oldSup && newSup && newDN );
 
-       dnlen = strlen( dn );
-       olen = strlen( oldSup );
-       nlen = strlen( newSup );
+       dnlen = dn->bv_len;
+       olen = oldSup->bv_len;
+       nlen = newSup->bv_len;
 
-       newDN = ch_malloc( dnlen - olen + nlen + 1 );
+       newDN->bv_val = ch_malloc( dnlen - olen + nlen + 1 );
 
-       AC_MEMCPY( newDN, dn, dnlen - olen );
-       AC_MEMCPY( &newDN[dnlen - olen], newSup, nlen );
-       newDN[dnlen - olen + nlen] = '\0';
+       AC_MEMCPY( newDN->bv_val, dn->bv_val, dnlen - olen );
+       AC_MEMCPY( &newDN->bv_val[dnlen - olen], newSup->bv_val, nlen );
+       newDN->bv_val[dnlen - olen + nlen] = '\0';
 
-       return newDN;
+       return;
 }
 
 static int dnlist_subordinate(
-       char** dnlist,
-       const char *dn )
+       BVarray dnlist,
+       struct berval *dn )
 {
-       int i;
        assert( dnlist );
 
-       for( i = 0; dnlist[i] != NULL; i++ ) {
-               if( dn_issuffix( dnlist[i], dn ) ) {
+       for( ; dnlist->bv_val != NULL; dnlist++ ) {
+               if( dnIsSuffix( dnlist, dn ) ) {
                        return 1;
                }
        }
 
        return 0;
 }
-
index 0e1e4303cd9d7a623cf9db9d2e30ca1f2e6dcb57..1036f3eb9a9df622ff14fac1649feb496cec9219 100644 (file)
@@ -74,7 +74,7 @@ ldbm_back_attribute(
 
        } else {
                /* can we find entry with reader lock */
-               if ((e = dn2entry_r(be, entry_ndn->bv_val, NULL )) == NULL) {
+               if ((e = dn2entry_r(be, entry_ndn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "backend", LDAP_LEVEL_INFO,
                                "ldbm_back_attribute: cannot find entry (%s)\n",
index f2746e63a9d9e524c52c0d71de0d206881d7b3c0..e244a339fcaa2f3d8fade68875b118c106e66166 100644 (file)
@@ -54,7 +54,7 @@ ldbm_back_bind(
        dn = ndn;
 
        /* get entry with reader lock */
-       if ( (e = dn2entry_r( be, dn->bv_val, &matched )) == NULL ) {
+       if ( (e = dn2entry_r( be, dn, &matched )) == NULL ) {
                char *matched_dn = NULL;
                struct berval **refs = NULL;
 
index 9453a26571c72268fc3993f5c22c12540a318be0..fcb33dd9ea2a01f7c3d93a092e73884242ae5c6b 100644 (file)
@@ -563,41 +563,11 @@ cache_update_entry(
        return( 0 );
 }
 
-/*
- * cache_find_entry_dn2id - find an entry in the cache, given dn
- */
-
-ID
-cache_find_entry_dn2id(
-       Backend         *be,
-    Cache      *cache,
-    const char         *dn
-)
-{
-       int rc;
-       struct berval bv;
-       struct berval ndn;
-       ID id;
-
-       bv.bv_val = (char *)dn;
-       bv.bv_len = strlen( dn );
-
-       rc = dnNormalize2( NULL, &bv, &ndn );
-       if( rc != LDAP_SUCCESS ) {
-               return NOID;
-       }
-
-       id = cache_find_entry_ndn2id( be, cache, ndn.bv_val );
-
-       free( ndn.bv_val );
-       return ( id );
-}
-
 ID
 cache_find_entry_ndn2id(
        Backend         *be,
     Cache      *cache,
-    const char         *ndn
+    struct berval      *ndn
 )
 {
        Entry           e, *ep;
@@ -605,7 +575,7 @@ cache_find_entry_ndn2id(
        int count = 0;
 
        /* this function is always called with normalized DN */
-       e.e_ndn = (char *)ndn;
+       e.e_nname = *ndn;
 
 try_again:
        /* set cache mutex */
index 366673a1d99ab541963bea0fa1c68ee71da95211..5556b011499d1f0af77be5b9bc2f122e9b33ddaf 100644 (file)
@@ -34,7 +34,7 @@ ldbm_back_compare(
        int             manageDSAit = get_manageDSAit( op );
 
        /* get entry with reader lock */
-       if ( (e = dn2entry_r( be, ndn->bv_val, &matched )) == NULL ) {
+       if ( (e = dn2entry_r( be, ndn, &matched )) == NULL ) {
                char *matched_dn = NULL;
                struct berval **refs = NULL;
 
index d1a53967bce98d09dd8db6afc042c5c5957c21ce..03fc27918c652af4f2cb068e20d48d0d6c5e369f 100644 (file)
@@ -27,7 +27,7 @@ ldbm_back_delete(
 {
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
        Entry   *matched;
-       char    *pdn = NULL;
+       struct berval   pdn;
        Entry   *e, *p = NULL;
        int rootlock = 0;
        int     rc = -1;
@@ -42,7 +42,7 @@ ldbm_back_delete(
 #endif
 
        /* get entry with writer lock */
-       if ( (e = dn2entry_w( be, ndn->bv_val, &matched )) == NULL ) {
+       if ( (e = dn2entry_w( be, ndn, &matched )) == NULL ) {
                char *matched_dn = NULL;
                struct berval **refs;
 
@@ -115,8 +115,9 @@ ldbm_back_delete(
        }
 
        /* delete from parent's id2children entry */
-       if( (pdn = dn_parent( be, e->e_ndn )) != NULL && pdn[ 0 ] != '\0' ) {
-               if( (p = dn2entry_w( be, pdn, NULL )) == NULL) {
+       if( (pdn.bv_val = dn_parent( be, e->e_ndn )) != NULL && pdn.bv_val[ 0 ] != '\0' ) {
+               pdn.bv_len = e->e_nname.bv_len - (pdn.bv_val - e->e_ndn);
+               if( (p = dn2entry_w( be, &pdn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                                "ldbm_back_delete: parent of (%s) does not exist\n", dn ));
@@ -201,7 +202,7 @@ ldbm_back_delete(
        }
 
        /* delete from dn2id mapping */
-       if ( dn2id_delete( be, e->e_ndn, e->e_id ) != 0 ) {
+       if ( dn2id_delete( be, &e->e_nname, e->e_id ) != 0 ) {
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                        "ldbm_back_delete: (%s) operations error\n",
index 14f108753bac2eef67deab89194d807c86b8ae9b..dc5429a4ea6dfd858e4bfea66ecf17d6e8aacd19 100644 (file)
@@ -19,7 +19,7 @@
 int
 dn2id_add(
     Backend    *be,
-    const char *dn,
+    struct berval *dn,
     ID         id
 )
 {
@@ -30,9 +30,9 @@ dn2id_add(
 
 #ifdef NEW_LOGGING
        LDAP_LOG(( "backend", LDAP_LEVEL_ENTRY,
-                  "dn2id_add: (%s):%ld\n", dn, id ));
+                  "dn2id_add: (%s):%ld\n", dn->bv_val, id ));
 #else
-       Debug( LDAP_DEBUG_TRACE, "=> dn2id_add( \"%s\", %ld )\n", dn, id, 0 );
+       Debug( LDAP_DEBUG_TRACE, "=> dn2id_add( \"%s\", %ld )\n", dn->bv_val, id, 0 );
 #endif
 
        assert( id != NOID );
@@ -51,12 +51,12 @@ dn2id_add(
        }
 
        ldbm_datum_init( key );
-       key.dsize = strlen( dn ) + 2;
+       key.dsize = dn->bv_len + 2;
        buf = ch_malloc( key.dsize );
        key.dptr = buf;
        buf[0] = DN_BASE_PREFIX;
        ptr = buf + 1;
-       strcpy( ptr, dn );
+       strcpy( ptr, dn->bv_val );
 
        ldbm_datum_init( data );
        data.dptr = (char *) &id;
@@ -118,7 +118,7 @@ dn2id_add(
 int
 dn2id(
     Backend    *be,
-    const char *dn,
+    struct berval *dn,
     ID          *idp
 )
 {
@@ -128,9 +128,9 @@ dn2id(
 
 #ifdef NEW_LOGGING
        LDAP_LOG(( "backend", LDAP_LEVEL_ENTRY,
-                  "dn2id: (%s)\n", dn ));
+                  "dn2id: (%s)\n", dn->bv_val ));
 #else
-       Debug( LDAP_DEBUG_TRACE, "=> dn2id( \"%s\" )\n", dn, 0, 0 );
+       Debug( LDAP_DEBUG_TRACE, "=> dn2id( \"%s\" )\n", dn->bv_val, 0, 0 );
 #endif
 
        assert( idp );
@@ -167,9 +167,9 @@ dn2id(
 
        ldbm_datum_init( key );
 
-       key.dsize = strlen( dn ) + 2;
+       key.dsize = dn->bv_len + 2;
        key.dptr = ch_malloc( key.dsize );
-       sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn );
+       sprintf( key.dptr, "%c%s", DN_BASE_PREFIX, dn->bv_val );
 
        data = ldbm_cache_fetch( db, key );
 
@@ -264,7 +264,7 @@ dn2idl(
 int
 dn2id_delete(
     Backend    *be,
-    const char *dn,
+    struct berval *dn,
        ID id
 )
 {
@@ -275,9 +275,9 @@ dn2id_delete(
 
 #ifdef NEW_LOGGING
        LDAP_LOG(( "backend", LDAP_LEVEL_ENTRY,
-                  "dn2id_delete: (%s)%ld\n", dn, id ));
+                  "dn2id_delete: (%s)%ld\n", dn->bv_val, id ));
 #else
-       Debug( LDAP_DEBUG_TRACE, "=> dn2id_delete( \"%s\", %ld )\n", dn, id, 0 );
+       Debug( LDAP_DEBUG_TRACE, "=> dn2id_delete( \"%s\", %ld )\n", dn->bv_val, id, 0 );
 #endif
 
 
@@ -298,12 +298,12 @@ dn2id_delete(
        }
 
        ldbm_datum_init( key );
-       key.dsize = strlen( dn ) + 2;
+       key.dsize = dn->bv_len + 2;
        buf = ch_malloc( key.dsize );
        key.dptr = buf;
        buf[0] = DN_BASE_PREFIX;
        ptr = buf + 1;
-       strcpy( ptr, dn );
+       strcpy( ptr, dn->bv_val );
 
        rc = ldbm_cache_delete( db, key );
        
@@ -364,22 +364,22 @@ dn2id_delete(
 Entry *
 dn2entry_rw(
     Backend    *be,
-    const char *dn,
+    struct berval *dn,
     Entry      **matched,
     int                rw
 )
 {
        ID              id;
        Entry           *e = NULL;
-       char            *pdn;
+       struct berval   pdn;
 
 #ifdef NEW_LOGGING
        LDAP_LOG(( "backend", LDAP_LEVEL_ENTRY,
                   "dn2entry_rw: %s entry %s\n", rw ? "w" : "r",
-                  dn ));
+                  dn->bv_val ));
 #else
        Debug(LDAP_DEBUG_TRACE, "dn2entry_%s: dn: \"%s\"\n",
-               rw ? "w" : "r", dn, 0);
+               rw ? "w" : "r", dn->bv_val, 0);
 #endif
 
 
@@ -401,11 +401,11 @@ dn2entry_rw(
 #ifdef NEW_LOGGING
                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                           "dn2entry_rw: no entry for valid id (%ld), dn (%s)\n",
-                          id, dn ));
+                          id, dn->bv_val ));
 #else
                Debug(LDAP_DEBUG_ANY,
                        "dn2entry_%s: no entry for valid id (%ld), dn \"%s\"\n",
-                       rw ? "w" : "r", id, dn);
+                       rw ? "w" : "r", id, dn->bv_val);
 #endif
 
                /* must have been deleted from underneath us */
@@ -417,9 +417,10 @@ dn2entry_rw(
 
        /* entry does not exist - see how much of the dn does exist */
        /* dn_parent checks returns NULL if dn is suffix */
-       if ( (pdn = dn_parent( be, dn )) != NULL ) {
+       if ( (pdn.bv_val = dn_parent( be, dn->bv_val )) != NULL && *pdn.bv_val ) {
+               pdn.bv_len = dn->bv_len - (pdn.bv_val - dn->bv_val);
                /* get entry with reader lock */
-               if ( (e = dn2entry_r( be, pdn, matched )) != NULL ) {
+               if ( (e = dn2entry_r( be, &pdn, matched )) != NULL ) {
                        *matched = e;
                }
        }
index 16440c9444bf2942837c83dd665ba39146a566e6..7cb8d0b9ecf48a75c4683bf0878819d43b1f8af1 100644 (file)
@@ -84,7 +84,7 @@ ldbm_back_group(
 
        } else {
                /* can we find group entry with reader lock */
-               if ((e = dn2entry_r(be, gr_ndn->bv_val, NULL )) == NULL) {
+               if ((e = dn2entry_r(be, gr_ndn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "backend", LDAP_LEVEL_DETAIL1,
                                "ldbm_back_group: cannot find group (%s)\n",
index c0a5c9a06f7bdb46c3f1a4be52bee7e2a452f64a..c80c440d1acb220ccf62608064171a2389f5b8c7 100644 (file)
@@ -268,7 +268,7 @@ ldbm_back_modify(
 
 
        /* acquire and lock entry */
-       if ( (e = dn2entry_w( be, ndn->bv_val, &matched )) == NULL ) {
+       if ( (e = dn2entry_w( be, ndn, &matched )) == NULL ) {
                char* matched_dn = NULL;
                struct berval **refs;
 
index f4b60495f13846fff73ff3aa6297e1a0e369cdf4..17efe09f314dbe73618b7253a6babb345c53fa1c 100644 (file)
@@ -89,7 +89,7 @@ ldbm_back_modrdn(
 #endif
 
        /* get entry with writer lock */
-       if ( (e = dn2entry_w( be, ndn->bv_val, &matched )) == NULL ) {
+       if ( (e = dn2entry_w( be, ndn, &matched )) == NULL ) {
                char* matched_dn = NULL;
                struct berval** refs;
 
@@ -159,7 +159,7 @@ ldbm_back_modrdn(
                 * children.
                 */
 
-               if( (p = dn2entry_w( be, p_ndn.bv_val, NULL )) == NULL) {
+               if( (p = dn2entry_w( be, &p_ndn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                        LDAP_LOG(( "backend", LDAP_LEVEL_INFO,
                                "ldbm_back_modrdn: parent of %s does not exist\n", e->e_ndn ));
@@ -314,7 +314,7 @@ ldbm_back_modrdn(
                /* Get Entry with dn=newSuperior. Does newSuperior exist? */
 
                if ( nnewSuperior->bv_len ) {
-                       if( (np = dn2entry_w( be, np_ndn->bv_val, NULL )) == NULL) {
+                       if( (np = dn2entry_w( be, np_ndn, NULL )) == NULL) {
 #ifdef NEW_LOGGING
                                LDAP_LOG(( "backend", LDAP_LEVEL_ERR,
                                        "ldbm_back_modrdn: newSup(ndn=%s) not found.\n", np_ndn->bv_val ));
@@ -475,7 +475,7 @@ ldbm_back_modrdn(
        }
 
        ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
-       if ( ( rc_id = dn2id ( be, new_ndn.bv_val, &id ) ) || id != NOID ) {
+       if ( ( rc_id = dn2id ( be, &new_ndn, &id ) ) || id != NOID ) {
                /* if (rc_id) something bad happened to ldbm cache */
                send_ldap_result( conn, op, 
                        rc_id ? LDAP_OPERATIONS_ERROR : LDAP_ALREADY_EXISTS,
@@ -712,7 +712,7 @@ ldbm_back_modrdn(
        ldap_pvt_thread_mutex_unlock( &op->o_abandonmutex );
 
        /* delete old one */
-       if ( dn2id_delete( be, e->e_ndn, e->e_id ) != 0 ) {
+       if ( dn2id_delete( be, &e->e_nname, e->e_id ) != 0 ) {
                send_ldap_result( conn, op, LDAP_OTHER,
                        NULL, "DN index delete fail", NULL, NULL );
                goto return_results;
@@ -731,7 +731,7 @@ ldbm_back_modrdn(
        new_ndn.bv_val = NULL;
 
        /* add new one */
-       if ( dn2id_add( be, e->e_ndn, e->e_id ) != 0 ) {
+       if ( dn2id_add( be, &e->e_nname, e->e_id ) != 0 ) {
                send_ldap_result( conn, op, LDAP_OTHER,
                        NULL, "DN index add failed", NULL, NULL );
                goto return_results;
@@ -748,7 +748,7 @@ ldbm_back_modrdn(
                }
 
                /* here we may try to delete the newly added dn */
-               if ( dn2id_delete( be, e->e_ndn, e->e_id ) != 0 ) {
+               if ( dn2id_delete( be, &e->e_nname, e->e_id ) != 0 ) {
                        /* we already are in trouble ... */
                        ;
                }
index 69b496b13081095847dac668a9e9c3bdc371d601..576dca72010e6406aee9beff02b0109256ae4255 100644 (file)
@@ -108,7 +108,7 @@ ldbm_back_exop_passwd(
                goto done;
        }
 
-       e = dn2entry_w( be, ndn.bv_val, NULL );
+       e = dn2entry_w( be, &ndn, NULL );
        if( e == NULL ) {
                *text = "could not locate authorization entry";
                rc = LDAP_NO_SUCH_OBJECT;
index 4433f736cf2fff43f4af95596ed7f0344c838d13..781e846776efc60563908dc8d655ca575288a260 100644 (file)
@@ -53,8 +53,7 @@ void cache_return_entry_rw LDAP_P(( Cache *cache, Entry *e, int rw ));
 #define cache_return_entry_w(c, e) cache_return_entry_rw((c), (e), 1)
 void cache_entry_commit LDAP_P(( Entry *e ));
 
-ID cache_find_entry_dn2id LDAP_P(( Backend *be, Cache *cache, const char *dn ));
-ID cache_find_entry_ndn2id LDAP_P(( Backend *be, Cache *cache, const char *ndn ));
+ID cache_find_entry_ndn2id LDAP_P(( Backend *be, Cache *cache, struct berval *ndn ));
 Entry * cache_find_entry_id LDAP_P(( Cache *cache, ID id, int rw ));
 int cache_delete_entry LDAP_P(( Cache *cache, Entry *e ));
 void cache_release_all LDAP_P(( Cache *cache ));
@@ -78,12 +77,12 @@ void *ldbm_cache_sync_daemon LDAP_P(( void *));
  * dn2id.c
  */
 
-int dn2id_add LDAP_P(( Backend *be, const char *dn, ID id ));
-int dn2id LDAP_P(( Backend *be, const char *dn, ID *idp ));
+int dn2id_add LDAP_P(( Backend *be, struct berval *dn, ID id ));
+int dn2id LDAP_P(( Backend *be, struct berval *dn, ID *idp ));
 int dn2idl LDAP_P(( Backend *be, struct berval *dn, int prefix, ID_BLOCK **idlp ));
-int dn2id_delete LDAP_P(( Backend *be, const char *dn, ID id ));
+int dn2id_delete LDAP_P(( Backend *be, struct berval *dn, ID id ));
 
-Entry * dn2entry_rw LDAP_P(( Backend *be, const char *dn, Entry **matched, int rw ));
+Entry * dn2entry_rw LDAP_P(( Backend *be, struct berval *dn, Entry **matched, int rw ));
 #define dn2entry_r(be, dn, m) dn2entry_rw((be), (dn), (m), 0)
 #define dn2entry_w(be, dn, m) dn2entry_rw((be), (dn), (m), 1)
 
index de4f04ec91b5286a851beb877b421cff274f3b85..28455eaf0c47d76f24d5d76812643311d84d2efb 100644 (file)
@@ -39,7 +39,7 @@ ldbm_back_referrals(
        } 
 
        /* get entry with reader lock */
-       e = dn2entry_r( be, ndn->bv_val, &matched );
+       e = dn2entry_r( be, ndn, &matched );
        if ( e == NULL ) {
                char *matched_dn = NULL;
                struct berval **refs = NULL;
index 1ca23ac7d69b304357b723fe3621176c45d14194..d9a23a4e0160199035be42ee40033ec7a18b2de9 100644 (file)
@@ -85,7 +85,7 @@ ldbm_back_search(
 
        } else {
                /* get entry with reader lock */
-               e = dn2entry_r( be, nbase->bv_val, &matched );
+               e = dn2entry_r( be, nbase, &matched );
                err = e != NULL ? LDAP_SUCCESS : LDAP_REFERRAL;
                text = NULL;
        }
index a497be625b458a5a304fe634325026af956881af..96ce80f562fec545781ee4e2ae800cef23dac5d0 100644 (file)
@@ -190,7 +190,7 @@ ID ldbm_tool_entry_put(
                e->e_id, e->e_dn, 0 );
 #endif
 
-       if ( dn2id( be, e->e_ndn, &id ) ) {
+       if ( dn2id( be, &e->e_nname, &id ) ) {
                /* something bad happened to ldbm cache */
                return NOID;
        }
@@ -213,7 +213,7 @@ ID ldbm_tool_entry_put(
                return NOID;
        }
 
-       rc = dn2id_add( be, e->e_ndn, e->e_id );
+       rc = dn2id_add( be, &e->e_nname, e->e_id );
        if( rc != 0 ) {
                return NOID;
        }
@@ -236,7 +236,7 @@ ID ldbm_tool_entry_put(
        rc = ldbm_cache_store( id2entry, key, data, LDBM_REPLACE );
 
        if( rc != 0 ) {
-               (void) dn2id_delete( be, e->e_ndn, e->e_id );
+               (void) dn2id_delete( be, &e->e_nname, e->e_id );
                return NOID;
        }
 
@@ -290,7 +290,7 @@ int ldbm_tool_entry_reindex(
                id, e->e_dn, 0 );
 #endif
 
-       dn2id_add( be, e->e_ndn, e->e_id );
+       dn2id_add( be, &e->e_nname, e->e_id );
        rc = index_entry_add( be, e, e->e_attrs );
 
        entry_free( e );