]> git.sur5r.net Git - openldap/commitdiff
Fix findmax when multiple matches are found
authorHoward Chu <hyc@openldap.org>
Tue, 11 Jan 2005 05:00:59 +0000 (05:00 +0000)
committerHoward Chu <hyc@openldap.org>
Tue, 11 Jan 2005 05:00:59 +0000 (05:00 +0000)
servers/slapd/overlays/syncprov.c

index 9b89f9655361045247c7af06efdb938bfdf2e4bd..755917e1d9473be7368fd4979cc2ee22c5e6422c 100644 (file)
@@ -525,7 +525,7 @@ findmax_cb( Operation *op, SlapReply *rs )
                Attribute *a = attr_find( rs->sr_entry->e_attrs,
                        slap_schema.si_ad_entryCSN );
 
-               if ( a && ber_bvcmp( &a->a_vals[0], maxcsn )) {
+               if ( a && ber_bvcmp( &a->a_vals[0], maxcsn ) > 0 ) {
                        maxcsn->bv_len = a->a_vals[0].bv_len;
                        strcpy( maxcsn->bv_val, a->a_vals[0].bv_val );
                }
@@ -644,8 +644,9 @@ syncprov_findcsn( Operation *op, int mode )
                fop.ors_slimit = SLAP_NO_LIMIT;
                cb.sc_private = &maxcsn;
                cb.sc_response = findmax_cb;
+               strcpy( cbuf, si->si_ctxcsn.bv_val );
                maxcsn.bv_val = cbuf;
-               maxcsn.bv_len = 0;
+               maxcsn.bv_len = si->si_ctxcsn.bv_len;
                break;
        case FIND_CSN:
                cf.f_choice = LDAP_FILTER_LE;
@@ -696,10 +697,8 @@ syncprov_findcsn( Operation *op, int mode )
 
        switch( mode ) {
        case FIND_MAXCSN:
-               if ( maxcsn.bv_len ) {
-                       strcpy( si->si_ctxcsnbuf, maxcsn.bv_val );
-                       si->si_ctxcsn.bv_len = maxcsn.bv_len;
-               }
+               strcpy( si->si_ctxcsnbuf, maxcsn.bv_val );
+               si->si_ctxcsn.bv_len = maxcsn.bv_len;
                break;
        case FIND_CSN:
                /* If matching CSN was not found, invalidate the context. */