]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/syncrepl.c
implement search timeout when the remote server does not respond in the specified...
[openldap] / servers / slapd / syncrepl.c
index e37181370cefd755b6d30f04c2c86a6e63c72514..72374ec545cee7451b0037308f8ed4808249959f 100644 (file)
@@ -828,9 +828,10 @@ do_syncrep2(
                                                                struct berval *syncuuid_bv;
                                                                syncuuid_bv = ber_dupbv( NULL, &syncUUIDs[i] );
                                                                slap_sl_free( syncUUIDs[i].bv_val,op->o_tmpmemctx );
-                                                               avl_insert( &si->si_presentlist,
+                                                               if ( avl_insert( &si->si_presentlist,
                                                                        (caddr_t) syncuuid_bv,
-                                                                       syncuuid_cmp, avl_dup_error );
+                                                                       syncuuid_cmp, avl_dup_error ))
+                                                                       ber_bvfree( syncuuid_bv );
                                                        }
                                                        slap_sl_free( syncUUIDs, op->o_tmpmemctx );
                                                }
@@ -1412,12 +1413,6 @@ syncrepl_message_to_entry(
                return rc;
        }
 
-       dnPrettyNormal( NULL, &bdn, &dn, &ndn, op->o_tmpmemctx );
-       ber_dupbv( &op->o_req_dn, &dn );
-       ber_dupbv( &op->o_req_ndn, &ndn );
-       slap_sl_free( ndn.bv_val, op->o_tmpmemctx );
-       slap_sl_free( dn.bv_val, op->o_tmpmemctx );
-
        if ( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_DELETE ) {
                /* NOTE: this could be done even before decoding the DN,
                 * although encoding errors wouldn't be detected */
@@ -1430,6 +1425,12 @@ syncrepl_message_to_entry(
                goto done;
        }
 
+       dnPrettyNormal( NULL, &bdn, &dn, &ndn, op->o_tmpmemctx );
+       ber_dupbv( &op->o_req_dn, &dn );
+       ber_dupbv( &op->o_req_ndn, &ndn );
+       slap_sl_free( ndn.bv_val, op->o_tmpmemctx );
+       slap_sl_free( dn.bv_val, op->o_tmpmemctx );
+
        e = entry_alloc();
        e->e_name = op->o_req_dn;
        e->e_nname = op->o_req_ndn;
@@ -1608,8 +1609,11 @@ syncrepl_entry(
        if (( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_ADD )) {
                if ( !si->si_refreshPresent ) {
                        syncuuid_bv = ber_dupbv( NULL, syncUUID );
-                       avl_insert( &si->si_presentlist, (caddr_t) syncuuid_bv,
-                               syncuuid_cmp, avl_dup_error );
+                       if ( avl_insert( &si->si_presentlist, (caddr_t) syncuuid_bv,
+                               syncuuid_cmp, avl_dup_error )) {
+                               ber_bvfree( syncuuid_bv );
+                               syncuuid_bv = NULL;
+                       }
                }
        }
 
@@ -2286,7 +2290,7 @@ syncrepl_updateCookie(
        Modifications mod = { { 0 } };
        struct berval vals[ 2 ];
 
-       int rc;
+       int rc, flags;
 
        slap_callback cb = { NULL };
        SlapReply       rs_modify = {REP_RESULT};
@@ -2314,7 +2318,10 @@ syncrepl_updateCookie(
        /* update contextCSN */
        op->o_msgid = SLAP_SYNC_UPDATE_MSGID;
        op->orm_modlist = &mod;
+       flags = SLAP_DBFLAGS( op->o_bd );
+       SLAP_DBFLAGS( op->o_bd ) |= SLAP_DBFLAG_NOLASTMOD;
        rc = be->be_modify( op, &rs_modify );
+       SLAP_DBFLAGS( op->o_bd ) = flags;
        op->o_msgid = 0;
 
        if ( rs_modify.sr_err == LDAP_SUCCESS ) {
@@ -3382,7 +3389,7 @@ add_syncrepl(
                         * in case they really want to do this, they can vary
                         * the case of the URL to allow it.
                         */
-                       if ( l ) {
+                       if ( l && !SLAP_DBHIDDEN( c->be )) {
                                int i;
                                for ( i=0; l[i]; i++ ) {
                                        if ( bvmatch( &l[i]->sl_url, &si->si_bindconf.sb_uri )) {