From: Howard Chu Date: Wed, 29 Jul 2020 15:15:11 +0000 (+0100) Subject: ITS#9295 use replace on single-valued attrs X-Git-Tag: OPENLDAP_REL_ENG_2_4_51~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a95890e9f4477f861370ea245af9445e2b92d35a;p=thirdparty%2Fopenldap.git ITS#9295 use replace on single-valued attrs For delta-sync as well as regular sync --- diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index b01caaaaa9..2261007593 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -1882,6 +1882,8 @@ syncrepl_accesslog_mods( if ( !mod || ad != mod->sml_desc || op != mod->sml_op ) { mod = (Modifications *) ch_malloc( sizeof( Modifications ) ); + if ( op == LDAP_MOD_ADD && is_at_single_value( ad->ad_type )) + op = LDAP_MOD_REPLACE; mod->sml_flags = 0; mod->sml_op = op; mod->sml_next = NULL; @@ -4242,7 +4244,10 @@ attr_cmp( Operation *op, Attribute *old, Attribute *new, /* some values were added */ if ( nn && no < o ) { mod = ch_malloc( sizeof( Modifications ) ); - mod->sml_op = LDAP_MOD_ADD; + if ( is_at_single_value( old->a_desc->ad_type )) + mod->sml_op = LDAP_MOD_REPLACE; + else + mod->sml_op = LDAP_MOD_ADD; mod->sml_flags = 0; mod->sml_desc = old->a_desc; mod->sml_type = mod->sml_desc->ad_cname;