]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/syncprov.c
check for ee == NULL
[openldap] / servers / slapd / overlays / syncprov.c
index ff36ef0a203114a4f72a2d8f43a8e6b0c30e6335..9cae2c53dc3212cf2ba6ddad9d467be00bf67b58 100644 (file)
@@ -585,11 +585,7 @@ syncprov_findcsn( Operation *op, find_csn_t mode )
        char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
        struct berval maxcsn;
        Filter cf;
-#ifdef LDAP_COMP_MATCH
-       AttributeAssertion eq = { NULL, BER_BVNULL, NULL };
-#else
-       AttributeAssertion eq = { NULL, BER_BVNULL };
-#endif
+       AttributeAssertion eq = ATTRIBUTEASSERTION_INIT;
        fpres_cookie pcookie;
        sync_control *srs = NULL;
        struct slap_limits_set fc_limits;
@@ -1291,6 +1287,7 @@ syncprov_checkpoint( Operation *op, SlapReply *rs, slap_overinst *on )
        SlapReply rsm = { 0 };
        slap_callback cb = {0};
 
+       mod.sml_numvals = si->si_numcsns;
        mod.sml_values = si->si_ctxcsn;
        mod.sml_nvalues = NULL;
        mod.sml_desc = slap_schema.si_ad_contextCSN;
@@ -1483,11 +1480,7 @@ syncprov_playlog( Operation *op, SlapReply *rs, sessionlog *sl,
                SlapReply frs = { REP_RESULT };
                int rc;
                Filter mf, af;
-#ifdef LDAP_COMP_MATCH
-               AttributeAssertion eq = { NULL, BER_BVNULL, NULL };
-#else
-               AttributeAssertion eq;
-#endif
+               AttributeAssertion eq = ATTRIBUTEASSERTION_INIT;
                slap_callback cb = {0};
 
                fop = *op;
@@ -1687,10 +1680,10 @@ syncprov_op_compare( Operation *op, SlapReply *rs )
 
                rs->sr_err = LDAP_COMPARE_FALSE;
 
-               if ( value_find_ex( op->oq_compare.rs_ava->aa_desc,
+               if ( attr_valfind( &a,
                        SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH |
                                SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH,
-                               a.a_nvals, &op->oq_compare.rs_ava->aa_value, op->o_tmpmemctx ) == 0 )
+                               &op->oq_compare.rs_ava->aa_value, NULL, op->o_tmpmemctx ) == 0 )
                {
                        rs->sr_err = LDAP_COMPARE_TRUE;
                }
@@ -2308,10 +2301,15 @@ syncprov_operational(
                                                a = attr_find( rs->sr_entry->e_attrs,
                                                        slap_schema.si_ad_contextCSN );
                                        }
-                                       free( a->a_vals );
+                                       if ( a->a_nvals != a->a_vals ) {
+                                               ber_bvarray_free( a->a_nvals );
+                                       }
+                                       a->a_nvals = NULL;
+                                       ber_bvarray_free( a->a_vals );
+                                       a->a_vals = NULL;
+                                       a->a_numvals = 0;
                                }
-                               ber_bvarray_dup_x( &a->a_vals, si->si_ctxcsn, NULL );
-                               a->a_nvals = a->a_vals;
+                               attr_valadd( a, si->si_ctxcsn, si->si_ctxcsn, si->si_numcsns );
                        }
                        ldap_pvt_thread_rdwr_runlock( &si->si_csn_rwlock );
                }
@@ -2557,11 +2555,9 @@ syncprov_db_open(
 
                a = attr_find( e->e_attrs, slap_schema.si_ad_contextCSN );
                if ( a ) {
-                       int i;
                        ber_bvarray_dup_x( &si->si_ctxcsn, a->a_vals, NULL );
-                       for ( i = 0; !BER_BVISNULL( &a->a_vals[i] ); i++ );
-                       si->si_numcsns = i;
-                       si->si_sids = slap_parse_csn_sids( si->si_ctxcsn, i, NULL );
+                       si->si_numcsns = a->a_numvals;
+                       si->si_sids = slap_parse_csn_sids( si->si_ctxcsn, a->a_numvals, NULL );
                }
                overlay_entry_release_ov( op, e, 0, on );
                if ( si->si_ctxcsn ) {