From: Ralf Haferkamp Date: Thu, 31 May 2007 15:46:46 +0000 (+0000) Subject: ITS#4991 restore mapped AttributeNames before processing a response X-Git-Tag: OPENLDAP_REL_ENG_2_4_MP~438 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=72032767856d13f5268c976b9f21e56a3cb12b2e;p=openldap ITS#4991 restore mapped AttributeNames before processing a response --- diff --git a/servers/slapd/overlays/rwm.c b/servers/slapd/overlays/rwm.c index a54b41e8e6..1c37890585 100644 --- a/servers/slapd/overlays/rwm.c +++ b/servers/slapd/overlays/rwm.c @@ -32,6 +32,7 @@ typedef struct rwm_op_state { struct berval ro_ndn; struct berval r_dn; struct berval r_ndn; + AttributeName *mapped_attrs; OpRequest o_request; } rwm_op_state; @@ -88,7 +89,7 @@ rwm_op_cleanup( Operation *op, SlapReply *rs ) } break; case LDAP_REQ_SEARCH: - ch_free( op->ors_attrs ); + ch_free( ros->mapped_attrs ); filter_free_x( op, op->ors_filter ); ch_free( op->ors_filterstr.bv_val ); op->ors_attrs = ros->ors_attrs; @@ -779,6 +780,11 @@ rwm_swap_attrs( Operation *op, SlapReply *rs ) rwm_op_state *ros = cb->sc_private; rs->sr_attrs = ros->ors_attrs; + + /* other overlays might have touched op->ors_attrs, + * so we restore the original version here, otherwise + * attribute-mapping might fail */ + op->ors_attrs = ros->mapped_attrs; return SLAP_CB_CONTINUE; } @@ -853,6 +859,9 @@ rwm_op_search( Operation *op, SlapReply *rs ) } op->ors_attrs = an; + /* store the mapped Attributes for later usage, in + * the case that other overlays change op->ors_attrs */ + roc->ros.mapped_attrs = an; roc->cb.sc_response = rwm_swap_attrs; op->o_callback = &roc->cb;