]> git.sur5r.net Git - openldap/commitdiff
ITS#5376
authorQuanah Gibson-Mount <quanah@openldap.org>
Wed, 13 Feb 2008 19:04:25 +0000 (19:04 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 13 Feb 2008 19:04:25 +0000 (19:04 +0000)
CHANGES
servers/slapd/syncrepl.c

diff --git a/CHANGES b/CHANGES
index c377ea2922f9e380918b77c5683044befeebf6ab..a71490a60bbdced1b2492061cbb2b685e272fad4 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -29,6 +29,7 @@ OpenLDAP 2.4.8 Engineering
        Fixed slapd sasl with CLEARTEXT (ITS#5368)
        Fixed slapd str2entry with no attrs (ITS#5308)
        Fixed slapd TLSVerifyClient default (ITS#5360)
+       Fixed slapd delta-syncrepl refresh mode (ITS#5376)
        Fixed slapd-bdb crash with modrdn (ITS#5358)
        Fixed slapd-bdb segv with bdb4.6 (ITS#5322)
        Fixed slapd-bdb modrdn to same dn (ITS#5319)
index 1b008233b7c1f92ce6896dc1d0fbe9b2481594cb..68b4c9692146d38da717aea1e5820f766f9cc9f8 100644 (file)
@@ -96,6 +96,7 @@ typedef struct syncinfo_s {
        int                     si_refreshDone;
        int                     si_syncdata;
        int                     si_logstate;
+       ber_int_t       si_msgid;
        Avlnode                 *si_presentlist;
        LDAP                    *si_ld;
        Connection              *si_conn;
@@ -342,7 +343,6 @@ ldap_sync_search(
        BerElementBuffer berbuf;
        BerElement *ber = (BerElement *)&berbuf;
        LDAPControl c[2], *ctrls[3];
-       ber_int_t       msgid;
        int rc;
        int rhint;
        char *base;
@@ -427,7 +427,7 @@ ldap_sync_search(
        }
 
        rc = ldap_search_ext( si->si_ld, base, scope, filter, attrs, attrsonly,
-               ctrls, NULL, NULL, si->si_slimit, &msgid );
+               ctrls, NULL, NULL, si->si_slimit, &si->si_msgid );
        ber_free_buf( ber );
        return rc;
 }
@@ -743,7 +743,7 @@ do_syncrep2(
                tout_p = NULL;
        }
 
-       while ( ( rc = ldap_result( si->si_ld, LDAP_RES_ANY, LDAP_MSG_ONE,
+       while ( ( rc = ldap_result( si->si_ld, si->si_msgid, LDAP_MSG_ONE,
                tout_p, &res ) ) > 0 )
        {
                if ( slapd_shutdown ) {
@@ -833,6 +833,10 @@ do_syncrep2(
                                                syncCookie.ctxcsn )
                                        {
                                                rc = syncrepl_updateCookie( si, op, psub, &syncCookie );
+                                       } else if ( rc == LDAP_NO_SUCH_OBJECT ) {
+                                               rc = LDAP_SYNC_REFRESH_REQUIRED;
+                                               si->si_logstate = SYNCLOG_FALLBACK;
+                                               ldap_abandon_ext( si->si_ld, si->si_msgid, NULL, NULL );
                                        }
                                } else if ( ( rc = syncrepl_message_to_entry( si, op, msg,
                                        &modlist, &entry, syncstate ) ) == LDAP_SUCCESS )