From 84db7cb21f7778a55cd75b54f34c5ba0398f3733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Thu, 21 Jan 2021 16:04:53 +0000 Subject: [PATCH] ITS#7766 Include all relevant attributes in diff --- servers/slapd/syncrepl.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index 09d07cdc7a..c88811db64 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -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; }