]> git.sur5r.net Git - openldap/commitdiff
Add entryCSN comparison for consistency check
authorHoward Chu <hyc@openldap.org>
Mon, 5 Feb 2007 06:07:27 +0000 (06:07 +0000)
committerHoward Chu <hyc@openldap.org>
Mon, 5 Feb 2007 06:07:27 +0000 (06:07 +0000)
servers/slapd/syncrepl.c

index ac31996121be63aa621edf97ff41bd54a0937707..dd323ff6af8df41e3e62f160c8543156863d4cf6 100644 (file)
@@ -2696,6 +2696,16 @@ dn_callback(
                                modtail = &dni->mods;
                                ml = dni->modlist;
 
+                               /* Make sure new entry is actually newer than old entry */
+                               old = attr_find( rs->sr_entry->e_attrs,
+                                       slap_schema.si_ad_entryCSN );
+                               new = attr_find( dni->new_entry->e_attrs,
+                                       slap_schema.si_ad_entryCSN );
+                               if ( new && old && ber_bvcmp( &old->a_vals[0],
+                                       &new->a_vals[0] ) >= 0 ) {
+                                       return LDAP_SUCCESS;
+                               }
+
                                /* We assume that attributes are saved in the same order
                                 * in the remote and local databases. So if we walk through
                                 * the attributeDescriptions one by one they should match in