From: Kurt Zeilenga Date: Sat, 25 Sep 2004 04:55:39 +0000 (+0000) Subject: Import add fix X-Git-Tag: OPENLDAP_REL_ENG_2_2_18~18 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=439e3b2bae625f65babe604abef6f06f9f85d83f;p=openldap Import add fix --- diff --git a/servers/slapd/add.c b/servers/slapd/add.c index e68b65f032..699a4747e7 100644 --- a/servers/slapd/add.c +++ b/servers/slapd/add.c @@ -446,16 +446,32 @@ slap_mods2entry( /* should check for duplicates */ - AC_MEMCPY( &attr->a_vals[i], mods->sml_values, - sizeof( struct berval ) * j ); + if ( dup ) { + for ( j = 0; mods->sml_values[j].bv_val; j++ ) { + ber_dupbv( &attr->a_vals[i+j], &mods->sml_values[j] ); + } + BER_BVZERO( &attr->a_vals[i+j] ); + } else { + AC_MEMCPY( &attr->a_vals[i], mods->sml_values, + sizeof( struct berval ) * j ); + ch_free( mods->sml_values ); + mods->sml_values = NULL; + } if( mods->sml_nvalues ) { attr->a_nvals = ch_realloc( attr->a_nvals, sizeof( struct berval ) * (i+j) ); - - AC_MEMCPY( &attr->a_nvals[i], mods->sml_nvalues, - sizeof( struct berval ) * j ); - + if ( dup ) { + for ( j = 0; mods->sml_nvalues[j].bv_val; j++ ) { + ber_dupbv( &attr->a_nvals[i+j], &mods->sml_nvalues[j] ); + } + BER_BVZERO( &attr->a_nvals[i+j] ); + } else { + AC_MEMCPY( &attr->a_nvals[i], mods->sml_nvalues, + sizeof( struct berval ) * j ); + ch_free( mods->sml_nvalues ); + mods->sml_nvalues = NULL; + } } else { attr->a_nvals = attr->a_vals; }