From: Pierangelo Masarati Date: Wed, 9 Nov 2005 02:40:34 +0000 (+0000) Subject: fix previous commit X-Git-Tag: OPENLDAP_REL_ENG_2_2_MP~62 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=82d3fbf4e3f1332079465340f6f4b79b0afd20ca;p=openldap fix previous commit --- diff --git a/servers/slapd/overlays/retcode.c b/servers/slapd/overlays/retcode.c index 5041c25f10..e285d57c31 100644 --- a/servers/slapd/overlays/retcode.c +++ b/servers/slapd/overlays/retcode.c @@ -86,7 +86,7 @@ typedef struct retcode_t { } retcode_t; static int -retcode_entry_response( Operation *op, SlapReply *rs, Entry *e ); +retcode_entry_response( Operation *op, SlapReply *rs, BackendInfo *bi, Entry *e ); static int retcode_cleanup_cb( Operation *op, SlapReply *rs ) @@ -161,10 +161,11 @@ done:; static int retcode_op_add( Operation *op, SlapReply *rs ) { - return retcode_entry_response( op, rs, op->ora_e ); + return retcode_entry_response( op, rs, NULL, op->ora_e ); } typedef struct retcode_cb_t { + BackendInfo *rdc_info; unsigned rdc_flags; ber_tag_t rdc_tag; AttributeName *rdc_attrs; @@ -183,7 +184,7 @@ retcode_cb_response( Operation *op, SlapReply *rs ) if ( op->o_tag == LDAP_REQ_SEARCH ) { rs->sr_attrs = rdc->rdc_attrs; } - rc = retcode_entry_response( op, rs, rs->sr_entry ); + rc = retcode_entry_response( op, rs, rdc->rdc_info, rs->sr_entry ); op->o_tag = o_tag; return rc; @@ -229,6 +230,7 @@ retcode_op_internal( Operation *op, SlapReply *rs ) db.bd_info = on->on_info->oi_orig; op2.o_bd = &db; + rdc.rdc_info = on->on_info->oi_orig; rdc.rdc_flags = RETCODE_FINDIR; if ( op->o_tag == LDAP_REQ_SEARCH ) { rdc.rdc_attrs = op->ors_attrs; @@ -463,10 +465,8 @@ retcode_op2str( ber_tag_t op, struct berval *bv ) } static int -retcode_entry_response( Operation *op, SlapReply *rs, Entry *e ) +retcode_entry_response( Operation *op, SlapReply *rs, BackendInfo *bi, Entry *e ) { - slap_overinst *on = (slap_overinst *)op->o_bd->bd_info; - Attribute *a; int err; char *next; @@ -527,7 +527,8 @@ retcode_entry_response( Operation *op, SlapReply *rs, Entry *e ) } if ( rs->sr_err != LDAP_SUCCESS ) { - BackendDB db = *op->o_bd; + BackendDB db = *op->o_bd, + *o_bd = op->o_bd; void *o_callback = op->o_callback; /* message text */ @@ -542,7 +543,13 @@ retcode_entry_response( Operation *op, SlapReply *rs, Entry *e ) rs->sr_matched = a->a_vals[ 0 ].bv_val; } - db.bd_info = on->on_info->oi_orig; + if ( bi == NULL ) { + slap_overinst *on = (slap_overinst *)op->o_bd->bd_info; + + bi = on->on_info->oi_orig; + } + + db.bd_info = bi; op->o_bd = &db; op->o_callback = NULL; @@ -567,6 +574,7 @@ retcode_entry_response( Operation *op, SlapReply *rs, Entry *e ) rs->sr_text = NULL; rs->sr_matched = NULL; + op->o_bd = o_bd; op->o_callback = o_callback; } @@ -588,7 +596,7 @@ retcode_response( Operation *op, SlapReply *rs ) return SLAP_CB_CONTINUE; } - return retcode_entry_response( op, rs, rs->sr_entry ); + return retcode_entry_response( op, rs, NULL, rs->sr_entry ); } static int