]> git.sur5r.net Git - openldap/commitdiff
ITS#5600
authorQuanah Gibson-Mount <quanah@openldap.org>
Thu, 10 Jul 2008 02:52:39 +0000 (02:52 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 10 Jul 2008 02:52:39 +0000 (02:52 +0000)
CHANGES
servers/slapd/syncrepl.c

diff --git a/CHANGES b/CHANGES
index 293b54382aff434e3a27ad918a95f91c6d10d79a..9b98c825f4f8b2a7de3a08da0b49e390310af73f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -14,6 +14,7 @@ OpenLDAP 2.4.11 Engineering
        Fixed slapd sets memory leak (ITS#5557)
        Fixed slapd sortvals binary search (ITS#5578)
        Fixed slapd syncrepl updates with multiple masters (ITS#5597)
+       Fixed slapd syncrepl superior objectClass delete/add (ITS#5600)
        Fixed slapd syncrepl/slapo-syncprov contextCSN updates as internal ops (ITS#5596)
        Added slapd-ldap/slapd-meta option to filter out search references (ITS#5593)
        Fixed slapd-meta link to slapd-ldap (ITS#5355)
index a3164aeb36ba6886876d6c0c1f2d97e270f7f694..7c08cb07dfbd3d190aff975031fe988c25c18ed2 100644 (file)
@@ -2883,6 +2883,14 @@ attr_cmp( Operation *op, Attribute *old, Attribute *new,
                        }
                }
 
+               /* Don't delete/add an objectClass, always use the replace op.
+                * Modify would fail if provider has replaced entry with a new,
+                * and the new explicitly includes a superior of a class that was
+                * only included implicitly in the old entry.  Ref ITS#5517.
+                */
+               if ( nn && no < o && old->a_desc == slap_schema.si_ad_objectClass )
+                       no = o;
+
                i = j;
                /* all old values were deleted, just use the replace op */
                if ( no == o ) {