]> git.sur5r.net Git - openldap/commitdiff
Import backglue/backover conflict fix from HEAD
authorHoward Chu <hyc@openldap.org>
Mon, 19 Jul 2004 20:31:41 +0000 (20:31 +0000)
committerHoward Chu <hyc@openldap.org>
Mon, 19 Jul 2004 20:31:41 +0000 (20:31 +0000)
servers/slapd/back-monitor/database.c
servers/slapd/back-monitor/overlay.c
servers/slapd/backover.c

index 7191e5479b43efefe69d745a31faafa5d8bdc504..ad33800de91338435753472f7276dd99f70ef809 100644 (file)
@@ -80,7 +80,7 @@ monitor_subsys_database_init(
                bi = be->bd_info;
 
                if ( strcmp( be->bd_info->bi_type, "over" ) == 0 ) {
-                       oi = (slap_overinfo *)be->bd_info;
+                       oi = (slap_overinfo *)be->bd_info->bi_private;
                        bi = oi->oi_orig;
                }
 
index 22b704f66aa47eadf1d1b15417bf769bef53bc08..27f309b61c47a55f0e4e56287e0fde73a676b80a 100644 (file)
@@ -118,7 +118,7 @@ monitor_subsys_overlay_init(
                                continue;
                        }
 
-                       on2 = ((slap_overinfo *)be->bd_info)->oi_list;
+                       on2 = ((slap_overinfo *)be->bd_info->bi_private)->oi_list;
                        for ( ; on2; on2 = on2->on_next ) {
                                if ( on2->on_bi.bi_type == on->on_bi.bi_type ) {
                                        break;
index d51de28535a485b5ec59ca3744ee68d820e1df24..1b490825ed7c8fe0f60b3180851801d8e965af08 100644 (file)
@@ -36,8 +36,9 @@ over_db_func(
        enum db_which which
 )
 {
-       slap_overinfo *oi = (slap_overinfo *) be->bd_info;
+       slap_overinfo *oi = be->bd_info->bi_private;
        slap_overinst *on = oi->oi_list;
+       BackendInfo *bi_orig = be->bd_info;
        BI_db_open **func;
        int rc = 0;
 
@@ -54,7 +55,7 @@ over_db_func(
                        rc = func[which]( be );
                }
        }
-       be->bd_info = (BackendInfo *)oi;
+       be->bd_info = bi_orig;
        return rc;
 }
 
@@ -67,8 +68,9 @@ over_db_config(
        char **argv
 )
 {
-       slap_overinfo *oi = (slap_overinfo *) be->bd_info;
+       slap_overinfo *oi = be->bd_info->bi_private;
        slap_overinst *on = oi->oi_list;
+       BackendInfo *bi_orig = be->bd_info;
        int rc = 0;
 
        if ( oi->oi_orig->bi_db_config ) {
@@ -87,7 +89,7 @@ over_db_config(
                        if ( rc != SLAP_CONF_UNKNOWN ) break;
                }
        }
-       be->bd_info = (BackendInfo *)oi;
+       be->bd_info = bi_orig;
        return rc;
 }
 
@@ -112,7 +114,7 @@ over_db_destroy(
        BackendDB *be
 )
 {
-       slap_overinfo *oi = (slap_overinfo *) be->bd_info;
+       slap_overinfo *oi = be->bd_info->bi_private;
        slap_overinst *on = oi->oi_list, *next;
        int rc;
 
@@ -188,7 +190,7 @@ over_op_func(
        enum op_which which
 )
 {
-       slap_overinfo *oi = (slap_overinfo *) op->o_bd->bd_info;
+       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;
@@ -209,15 +211,16 @@ over_op_func(
                }
        }
 
-       op->o_bd = be;
        func = &oi->oi_orig->bi_op_bind;
        if ( func[which] && rc == SLAP_CB_CONTINUE ) {
+               db.bd_info = oi->oi_orig;
                rc = func[which]( op, rs );
        }
        /* should not fall thru this far without anything happening... */
        if ( rc == SLAP_CB_CONTINUE ) {
                rc = op_rc[ which ];
        }
+       op->o_bd = be;
        op->o_callback = cb.sc_next;
        return rc;
 }
@@ -342,6 +345,12 @@ overlay_config( BackendDB *be, const char *ov )
                oi = ch_malloc( sizeof(slap_overinfo) );
                oi->oi_orig = be->bd_info;
                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;
                bi = (BackendInfo *)oi;
 
@@ -376,24 +385,9 @@ overlay_config( BackendDB *be, const char *ov )
                be->bd_info = bi;
 
        } else {
-               oi = (slap_overinfo *) be->bd_info;
+               oi = be->bd_info->bi_private;
        }
 
-#if 0
-       /* Walk to the end of the list of overlays, add the new
-        * one onto the end
-        */
-       for ( prev=NULL, on2 = oi->oi_list; on2; prev=on2, on2=on2->on_next );
-       on2 = ch_calloc( 1, sizeof(slap_overinst) );
-       if ( !prev ) {
-               oi->oi_list = on2;
-       } else {
-               prev->on_next = on2;
-       }
-       *on2 = *on;
-       on2->on_next = NULL;
-       on2->on_info = oi;
-#else
        /* Insert new overlay on head of list. Overlays are executed
         * in reverse of config order...
         */
@@ -402,7 +396,6 @@ overlay_config( BackendDB *be, const char *ov )
        on2->on_info = oi;
        on2->on_next = oi->oi_list;
        oi->oi_list = on2;
-#endif
 
        /* Any initialization needed? */
        if ( on->on_bi.bi_db_init ) {