return rc;
}
+int
+overlay_callback_after_backover( Operation *op, slap_callback *sc, int append )
+{
+ slap_callback **scp;
+
+ for ( scp = &op->o_callback; *scp != NULL; scp = &(*scp)->sc_next ) {
+ if ( (*scp)->sc_response == over_back_response ) {
+ sc->sc_next = (*scp)->sc_next;
+ (*scp)->sc_next = sc;
+ return 0;
+ }
+ }
+
+ if ( append ) {
+ *scp = sc;
+ return 0;
+ }
+
+ return 1;
+}
+
/*
* default return code in case of missing backend function
* and overlay stack returning SLAP_CB_CONTINUE
op->ore_reqdata = ros->ore_reqdata;
}
break;
+ case LDAP_REQ_BIND:
+ if ( rs->sr_err == LDAP_SUCCESS ) {
+#if 0
+ /* too late, conn_mutex released */
+ ber_bvreplace( &op->o_conn->c_ndn,
+ &op->o_req_ndn );
+#endif
+ }
+ break;
default: break;
}
op->o_callback = op->o_callback->sc_next;
return -1;
}
- op->o_callback = &roc->cb;
+ overlay_callback_after_backover( op, &roc->cb, 1 );
return SLAP_CB_CONTINUE;
}
LDAP_SLAPD_F (void) overlay_remove LDAP_P((
BackendDB *be, slap_overinst *on ));
#endif /* SLAP_CONFIG_DELETE */
+LDAP_SLAPD_F (int) overlay_callback_after_backover LDAP_P((
+ Operation *op, slap_callback *sc, int append ));
+
/*
* bconfig.c
*/