]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/translucent.c
Fix prev commit
[openldap] / servers / slapd / overlays / translucent.c
index 3fde2b1e77154c1ba7ebcc7c3e320716d66785bd..43d7f45cbfe337dcd5b24b438e6b17aaf07b9335 100644 (file)
@@ -208,7 +208,8 @@ static int translucent_delete(Operation *op, SlapReply *rs) {
 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;
@@ -400,7 +401,7 @@ release:
        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);
@@ -583,6 +584,27 @@ static int translucent_bind(Operation *op, SlapReply *rs) {
        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;
@@ -669,6 +691,7 @@ static int translucent_db_init(BackendDB *be) {
        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);
        }
@@ -788,6 +811,7 @@ int translucent_initialize() {
        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));
 }