rc = be->bd_info->bi_db_open( be, cr );
if ( rc == 0 ) {
(void)backend_set_controls( be );
+ be->be_flags |= SLAP_DBFLAG_OPEN;
} else {
char *type = be->bd_info->bi_type;
rc );
return rc;
}
+ frontendDB->be_flags |= SLAP_DBFLAG_OPEN;
}
/* open each backend type */
if ( be->bd_info->bi_db_close ) {
rc = be->bd_info->bi_db_close( be, NULL );
+ be->be_flags &= ~SLAP_DBFLAG_OPEN;
if ( rc ) return rc;
}
continue;
if ( be->bd_info->bi_db_close ) {
be->bd_info->bi_db_close( be, NULL );
+ be->be_flags &= ~SLAP_DBFLAG_OPEN;
}
if(rc != 0) {
/* close frontend, if required */
if ( frontendDB->bd_info->bi_db_close ) {
rc = frontendDB->bd_info->bi_db_close ( frontendDB, NULL );
+ frontendDB->be_flags &= ~SLAP_DBFLAG_OPEN;
if ( rc != 0 ) {
Debug( LDAP_DEBUG_ANY,
"backend_startup: bi_db_close(frontend) failed! (%d)\n",
LDAP_STAILQ_FOREACH( be, &backendDB, be_next ) {
if ( be->bd_info->bi_db_close ) {
be->bd_info->bi_db_close( be, NULL );
+ be->be_flags &= ~SLAP_DBFLAG_OPEN;
}
}
if ( rs->sr_type != REP_RESULT && rs->sr_type != REP_EXTENDED )
return SLAP_CB_CONTINUE;
+ /* can't do anything if logDB isn't open */
+ if ( !SLAP_DBOPEN( li->li_db ))
+ return SLAP_CB_CONTINUE;
+
logop = accesslog_op2logop( op );
lo = logops+logop+EN_OFFSET;
if ( !( li->li_ops & lo->mask )) {
#define SLAP_DBFLAG_MULTI_SHADOW 0x80000U /* uses multi-provider */
#define SLAP_DBFLAG_DISABLED 0x100000U
#define SLAP_DBFLAG_LASTBIND 0x200000U
+#define SLAP_DBFLAG_OPEN 0x400000U /* db is currently open */
slap_mask_t be_flags;
#define SLAP_DBFLAGS(be) ((be)->be_flags)
#define SLAP_NOLASTMOD(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_NOLASTMOD)
#define SLAP_SINGLE_SHADOW(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SINGLE_SHADOW)
#define SLAP_MULTIPROVIDER(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_MULTI_SHADOW)
#define SLAP_DBCLEAN(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_CLEAN)
+#define SLAP_DBOPEN(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_OPEN)
#define SLAP_DBACL_ADD(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_ACL_ADD)
#define SLAP_SYNC_SUBENTRY(be) (SLAP_DBFLAGS(be) & SLAP_DBFLAG_SYNC_SUBENTRY)