static int
translucent_tag_cb( Operation *op, SlapReply *rs )
{
- op->o_tag = (ber_tag_t)op->o_callback->sc_private;
+ op->o_tag = LDAP_REQ_MODIFY;
+ op->orm_modlist = op->o_callback->sc_private;
rs->sr_tag = slap_req2res( op->o_tag );
return SLAP_CB_CONTINUE;
glue_parent(&nop);
cb.sc_response = translucent_tag_cb;
- cb.sc_private = (void *)LDAP_REQ_MODIFY;
+ cb.sc_private = op->orm_modlist;
cb.sc_next = nop.o_callback;
nop.o_callback = &cb;
rc = on->on_info->oi_orig->bi_op_add(&nop, &nrs);
return(rc);
}
+/*
+** translucent_connection_destroy()
+** pass disconnect notification to captive backend;
+**
+*/
+
+static int translucent_connection_destroy(BackendDB *be, Connection *conn) {
+ slap_overinst *on = (slap_overinst *) be->bd_info;
+ overlay_stack *ov = on->on_bi.bi_private;
+ void *private = be->be_private;
+ int rc = 0;
+
+ Debug(LDAP_DEBUG_TRACE, "translucent_connection_destroy\n", 0, 0, 0);
+
+ be->be_private = ov->private;
+ rc = ov->info->bi_connection_destroy(be, conn);
+ be->be_private = private;
+
+ return(rc);
+}
+
/*
** translucent_db_config()
** pass config directives to captive backend;
ov->info = backend_info("ldap");
if(!ov->info) {
+ ch_free( ov );
Debug(LDAP_DEBUG_ANY, "translucent: backend_info failed!\n", 0, 0, 0);
return(1);
}
translucent.on_bi.bi_op_delete = translucent_delete;
translucent.on_bi.bi_op_search = translucent_search;
translucent.on_bi.bi_op_compare = translucent_compare;
+ translucent.on_bi.bi_connection_destroy = translucent_connection_destroy;
return(overlay_register(&translucent));
}