]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/syncrepl.c
cleanup
[openldap] / servers / slapd / syncrepl.c
index 9a53d86c498a44228734dd6b50fc05c504edfb92..cb0a461adc4c00126cde391ee670cdeafcdf9b6e 100644 (file)
@@ -165,8 +165,6 @@ ldap_sync_search(
        return rc;
 }
 
-static const Listener dummy_list = { {0, ""}, {0, ""} };
-
 static int
 do_syncrep1(
        Operation *op,
@@ -522,6 +520,7 @@ do_syncrep2(
                                }
                                if ( rc_efree && entry ) {
                                        entry_free( entry );
+                                       entry = NULL;
                                }
                                break;
 
@@ -808,25 +807,12 @@ do_syncrepl(
                return NULL;
        }
 
-       conn.c_connid = -1;
-       conn.c_send_ldap_result = slap_send_ldap_result;
-       conn.c_send_search_entry = slap_send_search_entry;
-       conn.c_send_search_reference = slap_send_search_reference;
-       conn.c_listener = (Listener *)&dummy_list;
-       conn.c_peer_name = slap_empty_bv;
-
-       /* set memory context */
-       op.o_tmpmemctx = sl_mem_create( SLMALLOC_SLAB_SIZE, ctx );
-       op.o_tmpmfuncs = &sl_mfuncs;
+       connection_fake_init( &conn, &op, ctx );
 
        op.o_dn = si->si_updatedn;
        op.o_ndn = si->si_updatedn;
-       op.o_time = slap_get_time();
-       op.o_threadctx = ctx;
        op.o_managedsait = 1;
        op.o_bd = si->si_be;
-       op.o_conn = &conn;
-       op.o_connid = op.o_conn->c_connid;
 
        op.o_sync_state.ctxcsn = NULL;
        op.o_sync_state.sid = -1;
@@ -853,7 +839,7 @@ do_syncrepl(
                         */
                        if ( rc == LDAP_SUCCESS ) {
                                if ( first ) {
-                                       rc = connection_client_setup( s, (Listener *)&dummy_list, do_syncrepl,
+                                       rc = connection_client_setup( s, do_syncrepl,
                                                arg );
                                } else {
                                        connection_client_enable( s );
@@ -1093,6 +1079,7 @@ syncrepl_entry(
                syncUUID->bv_val, syncUUID->bv_len );
        op->ors_filterstr.bv_val[op->ors_filterstr.bv_len] = '\0';
 
+       op->o_tag = LDAP_REQ_SEARCH;
        op->ors_scope = LDAP_SCOPE_SUBTREE;
 
        /* get syncrepl cookie of shadow replica from subentry */
@@ -1106,7 +1093,9 @@ syncrepl_entry(
 
        si->si_syncUUID_ndn.bv_val = NULL;
 
-       rc = be->be_search( op, &rs );
+       if ( limits_check( op, &rs ) == 0 ) {
+               rc = be->be_search( op, &rs );
+       }
 
        if ( op->ors_filterstr.bv_val ) {
                sl_free( op->ors_filterstr.bv_val, op->o_tmpmemctx );
@@ -1260,7 +1249,7 @@ syncrepl_entry(
 
        case LDAP_SYNC_DELETE :
                /* Already deleted */
-               ret = 1;
+               ret = 0;
                goto done;
 
        default :
@@ -1336,7 +1325,11 @@ syncrepl_del_nonpresent(
 
        op->o_nocaching = 1;
        op->o_managedsait = 0;
-       be->be_search( op, &rs );
+
+       if ( limits_check( op, &rs ) == 0 ) {
+               be->be_search( op, &rs );
+       }
+
        op->o_managedsait = 1;
        op->o_nocaching = 0;
 
@@ -1863,7 +1856,8 @@ null_callback(
        if ( rs->sr_err != LDAP_SUCCESS &&
                rs->sr_err != LDAP_REFERRAL &&
                rs->sr_err != LDAP_ALREADY_EXISTS &&
-               rs->sr_err != LDAP_NO_SUCH_OBJECT )
+               rs->sr_err != LDAP_NO_SUCH_OBJECT &&
+               rs->sr_err != LDAP_NOT_ALLOWED_ON_NONLEAF )
        {
 #ifdef NEW_LOGGING
                LDAP_LOG( OPERATION, ERR,