}
break;
case LOG_BASE: {
- slap_mask_t m;
+ slap_mask_t m = 0;
rc = verbstring_to_mask( logops, c->argv[1], '|', &m );
if ( rc == 0 ) {
struct berval dn, ndn;
SlapReply rs2 = {REP_RESULT};
Entry *e;
- if ( !( li->li_ops & LOG_OP_UNBIND ))
- return SLAP_CB_CONTINUE;
+ if ( !( li->li_ops & LOG_OP_UNBIND )) {
+ log_base *lb;
+ int i = 0;
+
+ for ( lb = li->li_bases; lb; lb=lb->lb_next )
+ if (( lb->lb_ops & LOG_OP_UNBIND ) && dnIsSuffix( &op->o_ndn, &lb->lb_base )) {
+ i = 1;
+ break;
+ }
+ if ( !i )
+ return SLAP_CB_CONTINUE;
+ }
e = accesslog_entry( op, rs, LOG_EN_UNBIND, &op2 );
op2.o_hdr = op->o_hdr;
char buf[64];
struct berval bv;
- if ( !op->o_time || !( li->li_ops & LOG_OP_ABANDON ))
+ if ( !op->o_time )
return SLAP_CB_CONTINUE;
+ if ( !( li->li_ops & LOG_OP_ABANDON )) {
+ log_base *lb;
+ int i = 0;
+
+ for ( lb = li->li_bases; lb; lb=lb->lb_next )
+ if (( lb->lb_ops & LOG_OP_ABANDON ) && dnIsSuffix( &op->o_ndn, &lb->lb_base )) {
+ i = 1;
+ break;
+ }
+ if ( !i )
+ return SLAP_CB_CONTINUE;
+ }
+
e = accesslog_entry( op, rs, LOG_EN_ABANDON, &op2 );
bv.bv_val = buf;
bv.bv_len = snprintf( buf, sizeof( buf ), "%d", op->orn_msgid );
AttributeDescription *ad = NULL;
const char *text = NULL;
Entry *e_ctx;
+ BackendDB db;
e = entry_alloc();
ber_dupbv( &e->e_name, li->li_db->be_suffix );
}
be_entry_release_rw( op, e_ctx, 0 );
}
- op->o_bd = li->li_db;
+ db = *li->li_db;
+ op->o_bd = &db;
op->ora_e = e;
op->o_req_dn = e->e_name;
op->o_callback = &nullsc;
SLAP_DBFLAGS( op->o_bd ) |= SLAP_DBFLAG_NOLASTMOD;
rc = op->o_bd->be_add( op, &rs );
- SLAP_DBFLAGS( op->o_bd ) ^= SLAP_DBFLAG_NOLASTMOD;
if ( e == op->ora_e )
entry_free( e );
}