]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#7766 Include all relevant attributes in diff
authorOndřej Kuzník <ondra@mistotebe.net>
Thu, 21 Jan 2021 16:04:53 +0000 (16:04 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 28 Jan 2021 20:59:17 +0000 (20:59 +0000)
servers/slapd/syncrepl.c

index 09d07cdc7a4699f2c255954caafa6bd1247e630f..c88811db642922b29ee6049b25c1f2c7110acb5f 100644 (file)
@@ -5358,6 +5358,33 @@ void syncrepl_diff_entry( Operation *op, Attribute *old, Attribute *new,
                new = new->a_next;
                old = old->a_next;
        }
+
+       /* These are all missing from provider */
+       while ( old ) {
+               Modifications *mod = ch_malloc( sizeof( Modifications ) );
+
+               mod = ch_malloc( sizeof( Modifications ) );
+               mod->sml_op = LDAP_MOD_DELETE;
+               mod->sml_flags = 0;
+               mod->sml_desc = old->a_desc;
+               mod->sml_type = mod->sml_desc->ad_cname;
+               mod->sml_numvals = 0;
+               mod->sml_values = NULL;
+               mod->sml_nvalues = NULL;
+
+               *modtail = mod;
+               modtail = &mod->sml_next;
+
+               old = old->a_next;
+       }
+
+       /* Newly added attributes */
+       while ( new ) {
+               attr_cmp( op, NULL, new, &modtail, &ml );
+
+               new = new->a_next;
+       }
+
        *modtail = *ml;
        *ml = NULL;
 }