]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/tools.c
if continuation line starts with a tab, rewrite it to a space
[openldap] / servers / slapd / back-bdb / tools.c
index 8282961f9764d69ec85756dce70ae3435cd6e794..096dcec539afb8f9e74d86dffbec516a00465682 100644 (file)
@@ -8,9 +8,7 @@
 #include "portable.h"
 
 #include <stdio.h>
-
 #include <ac/string.h>
-#include <ac/socket.h>
 
 #include "back-bdb.h"
 
@@ -22,9 +20,12 @@ int bdb_tool_entry_open(
 {
        int rc;
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
+
+       assert( be != NULL );
+       assert( bdb != NULL );
        
-       rc = bdb->bi_entries->bdi_db->cursor(
-               bdb->bi_entries->bdi_db, NULL, &cursor, 0 );
+       rc = bdb->bi_id2entry->bdi_db->cursor(
+               bdb->bi_id2entry->bdi_db, NULL, &cursor, 0 );
        if( rc != 0 ) {
                return NOID;
        }
@@ -43,6 +44,8 @@ int bdb_tool_entry_close(
 {
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
 
+       assert( be != NULL );
+
        if( key.data ) {
                ch_free( key.data );
                key.data = NULL;
@@ -66,6 +69,7 @@ ID bdb_tool_entry_next(
        int rc;
        ID id;
 
+       assert( be != NULL );
        assert( slapMode & SLAP_TOOL_MODE );
        assert( cursor != NULL );
 
@@ -88,6 +92,8 @@ Entry* bdb_tool_entry_get( BackendDB *be, ID id )
        int rc;
        Entry *e;
        struct berval bv;
+
+       assert( be != NULL );
        assert( slapMode & SLAP_TOOL_MODE );
        assert( data.data != NULL );
 
@@ -109,72 +115,72 @@ ID bdb_tool_entry_put(
        int rc;
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        DB_TXN *tid;
-       DBT key, data;
-       struct berval *bv;
 
+       assert( be != NULL );
        assert( slapMode & SLAP_TOOL_MODE );
 
-       DBTzero( &key );
-       key.data = (char *) &e->e_id;
-       key.size = sizeof(ID);
-
-       rc = entry_encode( e, &bv );
-       if( rc != LDAP_SUCCESS ) {
-               return NOID;
-       }
-
-       DBTzero( &data );
-       bv2DBT( bv, &data );
-
        Debug( LDAP_DEBUG_TRACE, "=> bdb_tool_entry_put( %ld, \"%s\" )\n",
                e->e_id, e->e_dn, 0 );
 
        rc = txn_begin( bdb->bi_dbenv, NULL, &tid, 0 );
        if( rc != 0 ) {
-               ber_bvfree( bv );
+               Debug( LDAP_DEBUG_ANY,
+                       "=> bdb_tool_entry_put: txn_begin failed: %s (%d)\n",
+                       db_strerror(rc), rc, 0 );
                return NOID;
        }
 
-       e->e_id = bdb_next_id( be, tid );
-       if( e->e_id == NOID ) {
+       rc = bdb_next_id( be, tid, &e->e_id );
+       if( rc != 0 ) {
+               Debug( LDAP_DEBUG_ANY,
+                       "=> bdb_tool_entry_put: next_id failed: %s (%d)\n",
+                       db_strerror(rc), rc, 0 );
                goto done;
        }
 
-       /* store it -- don't override */
-       rc = bdb->bi_entries->bdi_db->put( bdb->bi_entries->bdi_db,
-               tid, &key, &data, DB_NOOVERWRITE );
+       /* add dn2id indices */
+       rc = bdb_dn2id_add( be, tid, e->e_ndn, e->e_id );
        if( rc != 0 ) {
-               e->e_id = NOID;
+               Debug( LDAP_DEBUG_ANY,
+                       "=> bdb_tool_entry_put: dn2id_add failed: %s (%d)\n",
+                       db_strerror(rc), rc, 0 );
                goto done;
        }
 
-       /* add dn indices */
-       rc = bdb_index_dn_add( be, tid, e->e_ndn, e->e_id );
+       /* id2entry index */
+       rc = bdb_id2entry_add( be, tid, e );
        if( rc != 0 ) {
-               e->e_id = NOID;
+               Debug( LDAP_DEBUG_ANY,
+                       "=> bdb_tool_entry_put: id2entry_add failed: %s (%d)\n",
+                       db_strerror(rc), rc, 0 );
                goto done;
        }
 
 #if 0
        rc = bdb_index_entry_add( be, tid, e, e->e_attrs );
        if( rc != 0 ) {
-               e->e_id = NOID;
                goto done;
        }
 #endif
 
 done:
-       if( e->e_id != NOID ) {
+       if( rc == 0 ) {
                rc = txn_commit( tid, 0 );
                if( rc != 0 ) {
+                       Debug( LDAP_DEBUG_ANY,
+                               "=> bdb_tool_entry_put: txn_commit failed: %s (%d)\n",
+                               db_strerror(rc), rc, 0 );
                        e->e_id = NOID;
                }
 
        } else {
+               Debug( LDAP_DEBUG_ANY,
+                       "=> bdb_tool_entry_put: txn_aborted!\n",
+                       0, 0, 0 );
                txn_abort( tid );
+               e->e_id = NOID;
        }
 
-       ber_bvfree( bv );
        return e->e_id;
 }
 
@@ -199,7 +205,7 @@ int bdb_tool_entry_reindex(
                Debug( LDAP_DEBUG_ANY,
                        "bdb_tool_entry_reindex:: could not locate id=%ld\n",
                        (long) id, 0, 0 );
-               txn_abort( bdi->bdi_db_env );
+               txn_abort( tid );
                return -1;
        }