X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fdn2id.c;h=683d30a2e56c4019e6c484bb812c0d6d140790ab;hb=573e279d8769b0b74cdf63c21653f261cb741f25;hp=ae0f62d8ddaba28fbd09573145cfbbc33ac1a86b;hpb=d5bc2084be320a8a434936d9ec8a30f397cd8c16;p=openldap diff --git a/servers/slapd/back-ldbm/dn2id.c b/servers/slapd/back-ldbm/dn2id.c index ae0f62d8dd..683d30a2e5 100644 --- a/servers/slapd/back-ldbm/dn2id.c +++ b/servers/slapd/back-ldbm/dn2id.c @@ -23,10 +23,8 @@ dn2id_add( Datum key, data; struct ldbminfo *li = (struct ldbminfo *) be->be_private; -#ifdef HAVE_BERKELEY_DB2 - memset( &key, 0, sizeof( key ) ); - memset( &data, 0, sizeof( data ) ); -#endif + ldbm_datum_init( key ); + ldbm_datum_init( data ); Debug( LDAP_DEBUG_TRACE, "=> dn2id_add( \"%s\", %ld )\n", dn, id, 0 ); @@ -37,7 +35,7 @@ dn2id_add( return( -1 ); } - dn = strdup( dn ); + dn = ch_strdup( dn ); dn_normalize_case( dn ); key.dptr = dn; @@ -68,12 +66,10 @@ dn2id( ID id; Datum key, data; -#ifdef HAVE_BERKELEY_DB2 - memset( &key, 0, sizeof( key ) ); - memset( &data, 0, sizeof( data ) ); -#endif + ldbm_datum_init( key ); + ldbm_datum_init( data ); - dn = strdup( dn ); + dn = ch_strdup( dn ); Debug( LDAP_DEBUG_TRACE, "=> dn2id( \"%s\" )\n", dn, 0, 0 ); dn_normalize_case( dn ); @@ -125,9 +121,7 @@ dn2id_delete( Datum key; int rc; -#ifdef HAVE_BERKELEY_DB2 - memset( &key, 0, sizeof( key ) ); -#endif + ldbm_datum_init( key ); Debug( LDAP_DEBUG_TRACE, "=> dn2id_delete( \"%s\" )\n", dn, 0, 0 ); @@ -139,12 +133,15 @@ dn2id_delete( return( -1 ); } + dn = ch_strdup( dn ); dn_normalize_case( dn ); key.dptr = dn; key.dsize = strlen( dn ) + 1; rc = ldbm_cache_delete( db, key ); + free( dn ); + ldbm_cache_close( be, db ); Debug( LDAP_DEBUG_TRACE, "<= dn2id_delete %d\n", rc, 0, 0 ); @@ -169,7 +166,7 @@ dn2entry( Entry *e = NULL; char *pdn; - Debug(LDAP_DEBUG_TRACE, "dn2entry_%s: dn: %s\n", + Debug(LDAP_DEBUG_TRACE, "dn2entry_%s: dn: \"%s\"\n", rw ? "w" : "r", dn, 0); *matched = NULL; @@ -180,6 +177,14 @@ dn2entry( return( e ); } + if ( id != NOID ) { + Debug(LDAP_DEBUG_ANY, + "dn2entry_%s: no entry for valid id (%lu), dn \"%s\"\n", + rw ? "w" : "r", id, dn); + /* must have been deleted from underneath us */ + /* treat as if NOID was found */ + } + /* stop when we get to the suffix */ if ( be_issuffix( be, dn ) ) { return( NULL ); @@ -189,6 +194,9 @@ dn2entry( if ( (pdn = dn_parent( be, dn )) != NULL ) { /* get entry with reader lock */ if ( (e = dn2entry_r( be, pdn, matched )) != NULL ) { + if(*matched != NULL) { + free(*matched); + } *matched = pdn; /* free entry with reader lock */ cache_return_entry_r( &li->li_cache, e );