-
- int rc;
-
- if ( mod->sm_bvalues[1].bv_val == 0 ) {
- if ( a != NULL ) {
- int i;
-
- for ( matched = 0, i = 0; a->a_vals[ i ].bv_val; i++ ) {
- int match;
-
- if( mod->sm_nvalues ) {
- rc = value_match( &match, mod->sm_desc, mr,
- SLAP_MR_EQUALITY
- | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX
- | SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH
- | SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH,
- &a->a_nvals[i],
- &mod->sm_nvalues[0],
- text );
-
- } else {
- rc = value_match( &match, mod->sm_desc, mr,
- SLAP_MR_EQUALITY
- | SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX,
- &a->a_vals[i],
- &mod->sm_values[0],
- text );
- }
-
-
- if( rc == LDAP_SUCCESS && match == 0 ) {
- if ( permissive ) {
- matched++;
- continue;
- }
- *text = textbuf;
- snprintf( textbuf, textlen,
- "modify/%s: %s: value #0 already exists",
- op, mod->sm_desc->ad_cname.bv_val );
- return LDAP_TYPE_OR_VALUE_EXISTS;
- }
+ for ( p = i = 0; !BER_BVISNULL( &mod->sm_values[i] ); i++ ) {
+ int match;
+
+ assert( a->a_vals[0].bv_val != NULL );
+ for ( j = 0; !BER_BVISNULL( &a->a_vals[j] ); j++ ) {
+ if ( mod->sm_nvalues ) {
+ rc = ordered_value_match( &match, mod->sm_desc, mr,
+ SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX
+ | SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH
+ | SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH,
+ &a->a_nvals[j], &mod->sm_nvalues[i], text );
+ } else {
+ rc = ordered_value_match( &match, mod->sm_desc, mr,
+ SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX,
+ &a->a_vals[j], &mod->sm_values[i], text );