X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-ldbm%2Fid2children.c;h=aa8a79cecdec28aed1dd913ef2d2b3541a1d1f84;hb=55cd5ee75f1206a7d018442f0bee627f5207e3a7;hp=522e3d2733c1bf6b3dc6ff0e704b4943ee1ae994;hpb=f165bb2b96c4275c657ad82adc3c825e570b4a06;p=openldap diff --git a/servers/slapd/back-ldbm/id2children.c b/servers/slapd/back-ldbm/id2children.c index 522e3d2733..aa8a79cecd 100644 --- a/servers/slapd/back-ldbm/id2children.c +++ b/servers/slapd/back-ldbm/id2children.c @@ -10,10 +10,6 @@ #include "slap.h" #include "back-ldbm.h" -struct dbcache *ldbm_cache_open(); -extern Datum ldbm_cache_fetch(); -IDList *idl_fetch(); - int id2children_add( Backend *be, @@ -27,14 +23,10 @@ id2children_add( IDList *idl; char buf[20]; -#ifdef HAVE_BERKELEY_DB2 - Datum data; - memset( &key, 0, sizeof( key ) ); - memset( &data, 0, sizeof( data ) ); -#endif + ldbm_datum_init( key ); - Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %d, %d )\n", p ? p->e_id - : 0, e->e_id, 0 ); + Debug( LDAP_DEBUG_TRACE, "=> id2children_add( %lu, %lu )\n", + p ? p->e_id : 0, e->e_id, 0 ); if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX, LDBM_WRCREAT )) == NULL ) { @@ -61,6 +53,49 @@ id2children_add( return( 0 ); } + +int +id2children_remove( + Backend *be, + Entry *p, + Entry *e +) +{ + struct dbcache *db; + Datum key; + int len, rc; + IDList *idl; + char buf[20]; + + Debug( LDAP_DEBUG_TRACE, "=> id2children_remove( %lu, %lu )\n", p ? p->e_id + : 0, e->e_id, 0 ); + + if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX, + LDBM_WRCREAT )) == NULL ) { + Debug( LDAP_DEBUG_ANY, + "<= id2children_remove -1 could not open \"id2children%s\"\n", + LDBM_SUFFIX, 0, 0 ); + return( -1 ); + } + + ldbm_datum_init( key ); + sprintf( buf, "%c%ld", EQ_PREFIX, p ? p->e_id : 0 ); + key.dptr = buf; + key.dsize = strlen( buf ) + 1; + + if ( idl_delete_key( be, db, key, e->e_id ) != 0 ) { + Debug( LDAP_DEBUG_TRACE, "<= id2children_remove -1 (idl_insert)\n", + 0, 0, 0 ); + ldbm_cache_close( be, db ); + return( -1 ); + } + + ldbm_cache_close( be, db ); + + Debug( LDAP_DEBUG_TRACE, "<= id2children_remove 0\n", 0, 0, 0 ); + return( 0 ); +} + int has_children( Backend *be, @@ -73,11 +108,9 @@ has_children( IDList *idl; char buf[20]; -#ifdef HAVE_BERKELEY_DB2 - memset( &key, 0, sizeof( key ) ); -#endif + ldbm_datum_init( key ); - Debug( LDAP_DEBUG_TRACE, "=> has_children( %d )\n", p->e_id , 0, 0 ); + Debug( LDAP_DEBUG_TRACE, "=> has_children( %lu )\n", p->e_id , 0, 0 ); if ( (db = ldbm_cache_open( be, "id2children", LDBM_SUFFIX, LDBM_WRCREAT )) == NULL ) {