]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/init.c
return structuralObjectClass errors
[openldap] / servers / slapd / back-bdb / init.c
index 4c41aa1d56d9c1f6b6bccd36b13fc42cde7c36c9..313430d3a55d29a178ac3f60830c8504d4732e10 100644 (file)
@@ -45,6 +45,7 @@ static int
 bdb_db_init( BackendDB *be )
 {
        struct bdb_info *bdb;
+       int rc;
 
        Debug( LDAP_DEBUG_TRACE,
                LDAP_XSTRING(bdb_db_init) ": Initializing " BDB_UCTYPE " database\n",
@@ -80,7 +81,9 @@ bdb_db_init( BackendDB *be )
        be->be_private = bdb;
        be->be_cf_ocs = be->bd_info->bi_cf_ocs;
 
-       return 0;
+       rc = bdb_monitor_db_init( be );
+
+       return rc;
 }
 
 static int
@@ -95,7 +98,7 @@ bdb_db_open( BackendDB *be )
        u_int32_t flags;
        char path[MAXPATHLEN];
        char *dbhome;
-       int do_recover = 0, do_alock_recover = 0, open_env = 1;
+       int do_recover = 0, do_alock_recover = 0;
        int alockt, quick = 0;
 
        if ( be->be_suffix == NULL ) {
@@ -219,6 +222,14 @@ bdb_db_open( BackendDB *be )
                goto fail;
        }
 
+#ifdef HAVE_EBCDIC
+       strcpy( path, bdb->bi_dbenv_home );
+       __atoe( path );
+       dbhome = path;
+#else
+       dbhome = bdb->bi_dbenv_home;
+#endif
+
        /* If existing environment is clean but doesn't support
         * currently requested modes, remove it.
         */
@@ -261,14 +272,6 @@ bdb_db_open( BackendDB *be )
 
 #define        BDB_TXN_FLAGS   (DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_TXN)
 
-#ifdef HAVE_EBCDIC
-       strcpy( path, bdb->bi_dbenv_home );
-       __atoe( path );
-       dbhome = path;
-#else
-       dbhome = bdb->bi_dbenv_home;
-#endif
-
        Debug( LDAP_DEBUG_TRACE,
                "bdb_db_open: dbenv_open(%s)\n",
                bdb->bi_dbenv_home, 0, 0);
@@ -305,10 +308,8 @@ bdb_db_open( BackendDB *be )
 #ifdef SLAP_ZONE_ALLOC
        if ( bdb->bi_cache.c_maxsize ) {
                bdb->bi_cache.c_zctx = slap_zn_mem_create(
-                                                               SLAP_ZONE_INITSIZE,
-                                                               SLAP_ZONE_MAXSIZE,
-                                                               SLAP_ZONE_DELTA,
-                                                               SLAP_ZONE_SIZE);
+                       SLAP_ZONE_INITSIZE, SLAP_ZONE_MAXSIZE,
+                       SLAP_ZONE_DELTA, SLAP_ZONE_SIZE);
        }
 #endif
 
@@ -424,8 +425,16 @@ bdb_db_open( BackendDB *be )
                XLOCK_ID(bdb->bi_dbenv, &bdb->bi_cache.c_locker);
        }
 
+       /* monitor setup */
+       rc = bdb_monitor_db_open( be );
+       if ( rc != 0 ) {
+               goto fail;
+       }
+
        bdb->bi_flags |= BDB_IS_OPEN;
 
+       entry_prealloc( bdb->bi_cache.c_maxsize );
+       attr_prealloc( bdb->bi_cache.c_maxsize * 20 );
        return 0;
 
 fail:
@@ -441,6 +450,9 @@ bdb_db_close( BackendDB *be )
        struct bdb_db_info *db;
        bdb_idl_cache_entry_t *entry, *next_entry;
 
+       /* monitor handling */
+       (void)bdb_monitor_db_close( be );
+
        bdb->bi_flags &= ~BDB_IS_OPEN;
 
        ber_bvarray_free( bdb->bi_db_config );
@@ -519,6 +531,9 @@ bdb_db_destroy( BackendDB *be )
 {
        struct bdb_info *bdb = (struct bdb_info *) be->be_private;
 
+       /* monitor handling */
+       (void)bdb_monitor_db_close( be );
+
        if( bdb->bi_dbenv_home ) ch_free( bdb->bi_dbenv_home );
        if( bdb->bi_db_config_path ) ch_free( bdb->bi_db_config_path );
 
@@ -553,8 +568,13 @@ bdb_back_initialize(
                LDAP_CONTROL_MANAGEDSAIT,
                LDAP_CONTROL_NOOP,
                LDAP_CONTROL_PAGEDRESULTS,
+               LDAP_CONTROL_PRE_READ,
+               LDAP_CONTROL_POST_READ,
                LDAP_CONTROL_SUBENTRIES,
                LDAP_CONTROL_X_PERMISSIVE_MODIFY,
+#ifdef LDAP_X_TXN
+               LDAP_CONTROL_X_TXN_SPEC,
+#endif
                NULL
        };