]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/id2children.c
Add reference to slapd.conf(5) and recommendation to avoid cleartext passwords.
[openldap] / servers / slapd / back-ldbm / id2children.c
index 522e3d2733c1bf6b3dc6ff0e704b4943ee1ae994..aa8a79cecdec28aed1dd913ef2d2b3541a1d1f84 100644 (file)
 #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 ) {