]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/bconfig.c
update for new backend types
[openldap] / servers / slapd / bconfig.c
index 3e88c3f9095b69e95c616cfc385d969823759945..042d4b0d586f68adb943f4cf9eb16e1e9e876f4b 100644 (file)
@@ -1854,11 +1854,12 @@ config_requires(ConfigArgs *c) {
        return(0);
 }
 
+static slap_verbmasks  *loglevel_ops;
+
 static int
-config_loglevel(ConfigArgs *c) {
-       int i;
-       char *next;
-       slap_verbmasks loglevel_ops[] = {
+loglevel_init( void )
+{
+       slap_verbmasks  lo[] = {
                { BER_BVC("Any"),       -1 },
                { BER_BVC("Trace"),     LDAP_DEBUG_TRACE },
                { BER_BVC("Packets"),   LDAP_DEBUG_PACKETS },
@@ -1878,6 +1879,39 @@ config_loglevel(ConfigArgs *c) {
                { BER_BVNULL,   0 }
        };
 
+       return slap_verbmasks_init( &loglevel_ops, lo );
+}
+
+static slap_mask_t     loglevel_ignore[] = { -1, 0 };
+
+int
+slap_loglevel_register( slap_mask_t m, struct berval *s )
+{
+       int     rc;
+
+       if ( loglevel_ops == NULL ) {
+               loglevel_init();
+       }
+
+       rc = slap_verbmasks_append( &loglevel_ops, m, s, loglevel_ignore );
+
+       if ( rc != 0 ) {
+               Debug( LDAP_DEBUG_ANY, "slap_loglevel_register(%d, \"%s\") failed\n",
+                       m, s->bv_val, 0 );
+       }
+
+       return rc;
+}
+
+static int
+config_loglevel(ConfigArgs *c) {
+       int i;
+       char *next;
+
+       if ( loglevel_ops == NULL ) {
+               loglevel_init();
+       }
+
        if (c->op == SLAP_CONFIG_EMIT) {
                return mask_to_verbs( loglevel_ops, ldap_syslog, &c->rvalue_vals );
        } else if ( c->op == LDAP_MOD_DELETE ) {
@@ -4051,7 +4085,10 @@ config_back_db_close( BackendDB *be )
        cfb_free_entries( cfb->cb_root );
        cfb->cb_root = NULL;
 
-       backend_shutdown( &cfb->cb_db );
+       if ( cfb->cb_db.bd_info ) {
+               backend_shutdown( &cfb->cb_db );
+       }
+
        return 0;
 }
 
@@ -4066,13 +4103,17 @@ config_back_db_destroy( BackendDB *be )
 
        avl_free( CfOcTree, NULL );
 
-       cfb->cb_db.be_suffix = NULL;
-       cfb->cb_db.be_nsuffix = NULL;
-       cfb->cb_db.be_rootdn.bv_val = NULL;
-       cfb->cb_db.be_rootndn.bv_val = NULL;
-       backend_destroy_one( &cfb->cb_db, 0 );
+       if ( cfb->cb_db.bd_info ) {
+               cfb->cb_db.be_suffix = NULL;
+               cfb->cb_db.be_nsuffix = NULL;
+               BER_BVZERO( &cfb->cb_db.be_rootdn );
+               BER_BVZERO( &cfb->cb_db.be_rootndn );
+
+               backend_destroy_one( &cfb->cb_db, 0 );
+       }
 
        free( be->be_private );
+
        return 0;
 }