]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/backover.c
Fix ITS#3424
[openldap] / servers / slapd / backover.c
index 5547bcd6c48ed8a9734c644ab201b0a918089e12..3f2bc9b766e91c61bae468fa95a80e25998da9ed 100644 (file)
@@ -160,7 +160,7 @@ over_db_close(
                }
        }
 
-       if ( be->bd_info->bi_db_close ) {
+       if ( oi->oi_orig->bi_db_close ) {
                be->bd_info = oi->oi_orig;
                rc = be->bd_info->bi_db_close( be );
        }
@@ -256,12 +256,15 @@ over_op_func(
        slap_overinfo *oi = op->o_bd->bd_info->bi_private;
        slap_overinst *on = oi->oi_list;
        BI_op_bind **func;
-       BackendDB *be = op->o_bd, db = *op->o_bd;
+       BackendDB *be = op->o_bd, db;
        slap_callback cb = {NULL, over_back_response, NULL, NULL};
        int rc = SLAP_CB_CONTINUE;
 
-       db.be_flags |= SLAP_DBFLAG_OVERLAY;
-       op->o_bd = &db;
+       if ( !SLAP_ISOVERLAY( op->o_bd )) {
+               db = *op->o_bd;
+               db.be_flags |= SLAP_DBFLAG_OVERLAY;
+               op->o_bd = &db;
+       }
        cb.sc_next = op->o_callback;
        cb.sc_private = oi;
        op->o_callback = &cb;
@@ -480,8 +483,6 @@ overlay_config( BackendDB *be, const char *ov )
                oi->oi_bi = *be->bd_info;
 
                /* Save a pointer to ourself in bi_private.
-                * This allows us to keep working in conjunction
-                * with backglue...
                 */
                oi->oi_bi.bi_private = oi;
                oi->oi_list = NULL;