done:;
rs->sr_err = rc;
- if ( rc != LDAP_SUCCESS && META_BACK_ONERR_STOP( mi ) ) {
+ if ( rc != LDAP_SUCCESS ) {
+ if ( dolock ) {
+ ldap_pvt_thread_mutex_lock( &mi->mi_conninfo.lai_mutex );
+ }
LDAP_BACK_CONN_BINDING_CLEAR( msc );
- LDAP_BACK_CONN_TAINTED_SET( mc );
- meta_back_release_conn_lock( op, mc, dolock );
- *mcp = NULL;
+ if ( META_BACK_ONERR_STOP( mi ) ) {
+ LDAP_BACK_CONN_TAINTED_SET( mc );
+ meta_back_release_conn_lock( op, mc, dolock );
+ *mcp = NULL;
+ }
+ if ( dolock ) {
+ ldap_pvt_thread_mutex_unlock( &mi->mi_conninfo.lai_mutex );
+ }
- if ( sendok & LDAP_BACK_SENDERR ) {
+ if ( META_BACK_ONERR_STOP( mi ) && ( sendok & LDAP_BACK_SENDERR ) ) {
send_ldap_result( op, rs );
}
}
{
Attribute **a;
AttributeDescription *desc;
- SlapReply *rs = (SlapReply *)c->cac_private;
+ SlapReply *rs;
if ( c == NULL || attribute == NULL || entry == NULL ) {
return 0;
}
+ rs = (SlapReply *)c->cac_private;
+
assert( rs->sr_entry == entry );
desc = attribute->a_desc;
break;
case SLAPI_MODIFY_MODS: {
LDAPMod **mods = NULL;
- Modifications *ml;
+ Modifications *ml = NULL;
pblock_get_default( pb, param, (void **)&mods );
if ( mods == NULL && pb->pb_intop == 0 ) {
case LDAP_REQ_MODRDN:
ml = pb->pb_op->orr_modlist;
break;
- defaulat:
+ default:
rc = PBLOCK_ERROR;
break;
}
- mods = slapi_int_modifications2ldapmods( ml );
- pblock_set_default( pb, param, (void *)mods );
+ if ( rc != PBLOCK_ERROR ) {
+ mods = slapi_int_modifications2ldapmods( ml );
+ pblock_set_default( pb, param, (void *)mods );
+ }
}
*((LDAPMod ***)value) = mods;
break;