diff --git a/servers/slapd/overlays/rwm.c b/servers/slapd/overlays/rwm.c index 4e87d36dd2..8bdf9355bb 100644 --- a/servers/slapd/overlays/rwm.c +++ b/servers/slapd/overlays/rwm.c @@ -55,8 +55,17 @@ rwm_op_cleanup( Operation *op, SlapReply *rs ) op->o_req_dn = ros->ro_dn; op->o_req_ndn = ros->ro_ndn; - if ( !BER_BVISEMPTY( &ros->r_dn )) ch_free( ros->r_dn.bv_val ); - if ( !BER_BVISEMPTY( &ros->r_ndn )) ch_free( ros->r_ndn.bv_val ); + if ( !BER_BVISNULL( &ros->r_dn ) + && ros->r_dn.bv_val != ros->r_ndn.bv_val ) + { + ch_free( ros->r_dn.bv_val ); + BER_BVZERO( &ros->r_dn ); + } + + if ( !BER_BVISNULL( &ros->r_ndn ) ) { + ch_free( ros->r_ndn.bv_val ); + BER_BVZERO( &ros->r_ndn ); + } switch( ros->r_tag ) { case LDAP_REQ_COMPARE: