]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/init.c
Reworked recent backend API changes, now using a separate struct,
[openldap] / servers / slapd / back-bdb / init.c
index 32289e73899c55193035e4ad34067f543f1e2210..4b5f012335680ce0b15eeeceaa1501cfab4fa4db 100644 (file)
@@ -26,6 +26,7 @@
 #include <lutil.h>
 #include <ldap_rq.h>
 #include "alock.h"
+#include "config.h"
 
 static const struct bdbi_database {
        char *file;
@@ -46,7 +47,7 @@ typedef void * db_realloc(void *, size_t);
 #define bdb_db_close BDB_SYMBOL(db_close)
 
 static int
-bdb_db_init( BackendDB *be )
+bdb_db_init( BackendDB *be, ConfigReply *cr )
 {
        struct bdb_info *bdb;
        int rc;
@@ -93,10 +94,10 @@ bdb_db_init( BackendDB *be )
 }
 
 static int
-bdb_db_close( BackendDB *be );
+bdb_db_close( BackendDB *be, ConfigReply *cr );
 
 static int
-bdb_db_open( BackendDB *be )
+bdb_db_open( BackendDB *be, ConfigReply *cr )
 {
        int rc, i;
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
@@ -121,8 +122,11 @@ bdb_db_open( BackendDB *be )
 
 #ifndef BDB_MULTIPLE_SUFFIXES
        if ( be->be_suffix[1].bv_val ) {
-       Debug( LDAP_DEBUG_ANY,
-               LDAP_XSTRING(bdb_db_open) ": only one suffix allowed\n", 0, 0, 0 );
+               if (cr) {
+                       snprintf(cr->msg, sizeof(cr->msg), "only one suffix allowed");
+                       Debug( LDAP_DEBUG_ANY,
+                               LDAP_XSTRING(bdb_db_open) ": %s\n", cr->msg, 0, 0 );
+               }
                return -1;
        }
 #endif
@@ -133,7 +137,7 @@ bdb_db_open( BackendDB *be )
                Debug( LDAP_DEBUG_ANY,
                        LDAP_XSTRING(bdb_db_open) ": Cannot access database directory %s (%d)\n",
                        bdb->bi_dbenv_home, errno, 0 );
-                       return -1;
+               return -1;
        }
 
        /* Perform database use arbitration/recovery logic */
@@ -456,9 +460,10 @@ shm_retry:
        if ( !e ) {
                e = entry_alloc();
                e->e_id = 0;
-               ber_dupbv( &e->e_name, &slap_empty_bv );
-               ber_dupbv( &e->e_nname, &slap_empty_bv );
+               ber_dupbv( &e->e_name, (struct berval *)&slap_empty_bv );
+               ber_dupbv( &e->e_nname, (struct berval *)&slap_empty_bv );
        }
+       e->e_ocflags = SLAP_OC_GLUE|SLAP_OC__END;
        e->e_private = &bdb->bi_cache.c_dntree;
        bdb->bi_cache.c_dntree.bei_e = e;
 
@@ -473,12 +478,12 @@ shm_retry:
        return 0;
 
 fail:
-       bdb_db_close( be );
+       bdb_db_close( be, NULL );
        return rc;
 }
 
 static int
-bdb_db_close( BackendDB *be )
+bdb_db_close( BackendDB *be, ConfigReply *cr )
 {
        int rc;
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
@@ -573,7 +578,7 @@ bdb_db_close( BackendDB *be )
 }
 
 static int
-bdb_db_destroy( BackendDB *be )
+bdb_db_destroy( BackendDB *be, ConfigReply *cr )
 {
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;