diff --git a/servers/slapd/overlays/translucent.c b/servers/slapd/overlays/translucent.c index f5d3cf8e380962f1e06d9880c805fbc8e271291d..102b909418bad93d21cea013ba89bc3bd0e6f71b 100644 --- a/servers/slapd/overlays/translucent.c +++ b/servers/slapd/overlays/translucent.c @@ -281,22 +281,6 @@ void glue_parent(Operation *op) { return; } -/* -** dup_bervarray() -** copy a BerVarray; -*/ - -BerVarray dup_bervarray(BerVarray b) { - int i, len; - BerVarray nb; - for(len = 0; b[len].bv_val; len++); - nb = ch_malloc((len+1) * sizeof(BerValue)); - for(i = 0; i < len; i++) ber_dupbv(&nb[i], &b[i]); - nb[len].bv_val = NULL; - nb[len].bv_len = 0; - return(nb); -} - /* ** free_attr_chain() ** free only the Attribute*, not the contents; @@ -886,9 +870,12 @@ static int translucent_search_cb(Operation *op, SlapReply *rs) { if(a->a_vals != a->a_nvals) ber_bvarray_free(a->a_nvals); ber_bvarray_free(a->a_vals); - a->a_vals = dup_bervarray(ax->a_vals); - a->a_nvals = (ax->a_vals == ax->a_nvals) ? - a->a_vals : dup_bervarray(ax->a_nvals); + ber_bvarray_dup_x( &a->a_vals, ax->a_vals, NULL ); + if ( ax->a_vals == ax->a_nvals ) { + a->a_nvals = a->a_vals; + } else { + ber_bvarray_dup_x( &a->a_nvals, ax->a_nvals, NULL ); + } break; } }