]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/init.c
Sync with HEAD as of 14-March-2004
[openldap] / servers / slapd / back-bdb / init.c
index 41ecef07a0837aa0110501f33f7588275543d922..0b64dd192df90b70f1b8a71e79f6761e07793850 100644 (file)
@@ -1,8 +1,17 @@
 /* init.c - initialize bdb backend */
 /* $OpenLDAP$ */
-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 2000-2004 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
  */
 
 #include "portable.h"
@@ -68,6 +77,7 @@ bdb_db_init( BackendDB *be )
 
        /* indicate system schema supported */
        be->be_flags |=
+               SLAP_BFLAG_INCREMENT |
 #ifdef BDB_SUBENTRIES
                SLAP_BFLAG_SUBENTRIES |
 #endif
@@ -90,11 +100,11 @@ bdb_db_init( BackendDB *be )
        bdb->bi_search_stack_depth = DEFAULT_SEARCH_STACK_DEPTH;
        bdb->bi_search_stack = NULL;
 
-#if defined(LDAP_CLIENT_UPDATE) || defined(LDAP_SYNC)
        LDAP_LIST_INIT (&bdb->bi_psearch_list);
-#endif
 
+       ldap_pvt_thread_mutex_init( &bdb->bi_database_mutex );
        ldap_pvt_thread_mutex_init( &bdb->bi_lastid_mutex );
+       ldap_pvt_thread_rdwr_init ( &bdb->bi_pslist_rwlock );
        ldap_pvt_thread_mutex_init( &bdb->bi_cache.lru_mutex );
        ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_dntree.bei_kids_mutex );
        ldap_pvt_thread_rdwr_init ( &bdb->bi_cache.c_rwlock );
@@ -200,6 +210,7 @@ bdb_db_open( BackendDB *be )
 
 #ifdef SLAP_IDL_CACHE
        if ( bdb->bi_idl_cache_max_size ) {
+               bdb->bi_idl_tree = NULL;
                ldap_pvt_thread_rdwr_init( &bdb->bi_idl_tree_rwlock );
                ldap_pvt_thread_mutex_init( &bdb->bi_idl_tree_lrulock );
                bdb->bi_idl_cache_size = 0;
@@ -397,18 +408,18 @@ bdb_db_open( BackendDB *be )
 #ifdef HAVE_EBCDIC
                strcpy( path, bdbi_databases[i].file );
                __atoe( path );
-               rc = DB_OPEN( db->bdi_db, NULL,
+               rc = DB_OPEN( db->bdi_db,
                        path,
                /*      bdbi_databases[i].name, */ NULL,
                        bdbi_databases[i].type,
-                       bdbi_databases[i].flags | flags | DB_AUTO_COMMIT,
+                       bdbi_databases[i].flags | flags,
                        bdb->bi_dbenv_mode );
 #else
-               rc = DB_OPEN( db->bdi_db, NULL,
+               rc = DB_OPEN( db->bdi_db,
                        bdbi_databases[i].file,
                /*      bdbi_databases[i].name, */ NULL,
                        bdbi_databases[i].type,
-                       bdbi_databases[i].flags | flags | DB_AUTO_COMMIT,
+                       bdbi_databases[i].flags | flags,
                        bdb->bi_dbenv_mode );
 #endif
 
@@ -538,7 +549,9 @@ bdb_db_destroy( BackendDB *be )
        ldap_pvt_thread_rdwr_destroy ( &bdb->bi_cache.c_rwlock );
        ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.lru_mutex );
        ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_dntree.bei_kids_mutex );
+       ldap_pvt_thread_rdwr_destroy ( &bdb->bi_pslist_rwlock );
        ldap_pvt_thread_mutex_destroy( &bdb->bi_lastid_mutex );
+       ldap_pvt_thread_mutex_destroy( &bdb->bi_database_mutex );
 #ifdef SLAP_IDL_CACHE
        if ( bdb->bi_idl_cache_max_size ) {
                ldap_pvt_thread_rdwr_destroy( &bdb->bi_idl_tree_rwlock );
@@ -552,12 +565,17 @@ bdb_db_destroy( BackendDB *be )
        return 0;
 }
 
-#ifdef SLAPD_BDB_DYNAMIC
-int back_bdb_LTX_init_module( int argc, char *argv[] ) {
+#if    (defined(SLAPD_BDB_DYNAMIC) && !defined(BDB_HIER)) || \
+       (defined(SLAPD_HDB_DYNAMIC) && defined(BDB_HIER))
+int init_module( int argc, char *argv[] ) {
        BackendInfo bi;
 
        memset( &bi, '\0', sizeof(bi) );
+#ifdef BDB_HIER
+       bi.bi_type = "hdb";
+#else
        bi.bi_type = "bdb";
+#endif
        bi.bi_init = bdb_initialize;
 
        backend_add( &bi );
@@ -571,18 +589,14 @@ bdb_initialize(
 )
 {
        static char *controls[] = {
+               LDAP_CONTROL_ASSERT,
                LDAP_CONTROL_MANAGEDSAIT,
                LDAP_CONTROL_NOOP,
-#ifdef LDAP_CONTROL_PAGEDRESULTS
                LDAP_CONTROL_PAGEDRESULTS,
-#endif
-               LDAP_CONTROL_VALUESRETURNFILTER,
 #ifdef LDAP_CONTROL_SUBENTRIES
                LDAP_CONTROL_SUBENTRIES,
 #endif
-#ifdef LDAP_CLIENT_UPDATE
-               LDAP_CONTROL_CLIENT_UPDATE,
-#endif
+               LDAP_CONTROL_VALUESRETURNFILTER,
                NULL
        };
 
@@ -617,13 +631,14 @@ bdb_initialize(
                {
 #ifdef NEW_LOGGING
                        LDAP_LOG( BACK_BDB, ERR, 
-                               "bdb_db_initialize: version mismatch: "
-                               "\texpected: %s \tgot: %s\n", DB_VERSION_STRING, version, 0 );
+                               "bdb_initialize: BDB library version mismatch:"
+                               " expected " DB_VERSION_STRING ","
+                               " got %s\n", version, 0, 0 );
 #else
                        Debug( LDAP_DEBUG_ANY,
-                               "bdb_initialize: version mismatch\n"
-                               "\texpected: " DB_VERSION_STRING "\n"
-                               "\tgot: %s \n", version, 0, 0 );
+                               "bdb_initialize: BDB library version mismatch:"
+                               " expected " DB_VERSION_STRING ","
+                               " got %s\n", version, 0, 0 );
 #endif
                }
 
@@ -674,13 +689,8 @@ bdb_initialize(
 
        bi->bi_op_unbind = 0;
 
-#ifdef LDAP_CLIENT_UPDATE
        bi->bi_op_abandon = bdb_abandon;
        bi->bi_op_cancel = bdb_cancel;
-#else
-       bi->bi_op_abandon = 0;
-       bi->bi_op_cancel = 0;
-#endif
 
        bi->bi_extended = bdb_extended;
 
@@ -701,6 +711,9 @@ bdb_initialize(
        bi->bi_tool_entry_put = bdb_tool_entry_put;
        bi->bi_tool_entry_reindex = bdb_tool_entry_reindex;
        bi->bi_tool_sync = 0;
+       bi->bi_tool_dn2id_get = bdb_tool_dn2id_get;
+       bi->bi_tool_id2entry_get = bdb_tool_id2entry_get;
+       bi->bi_tool_entry_modify = bdb_tool_entry_modify;
 
        bi->bi_connection_init = 0;
        bi->bi_connection_destroy = 0;