]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/syncrepl.c
Added overlay objects
[openldap] / servers / slapd / syncrepl.c
index dab5fd8be87e1b4738a0a6624da2071b9ed54819..f9da2a59c594fc139601f09ca60af4d91e6918a6 100644 (file)
@@ -282,11 +282,11 @@ do_syncrep1(
        psub = &si->si_be->be_nsuffix[0];
 
        /* Init connection to master */
-       rc = ldap_initialize( &si->si_ld, si->si_provideruri );
+       rc = ldap_initialize( &si->si_ld, si->si_provideruri.bv_val );
        if ( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
                        "do_syncrep1: ldap_initialize failed (%s)\n",
-                       si->si_provideruri, 0, 0 );
+                       si->si_provideruri.bv_val, 0, 0 );
                return rc;
        }
 
@@ -317,7 +317,7 @@ do_syncrep1(
                        if( rc != LDAP_OPT_SUCCESS ) {
                                Debug( LDAP_DEBUG_ANY, "Error: ldap_set_option "
                                        "(%s,SECPROPS,\"%s\") failed!\n",
-                                       si->si_provideruri, si->si_secprops, 0 );
+                                       si->si_provideruri.bv_val, si->si_secprops, 0 );
                                goto done;
                        }
                }
@@ -527,6 +527,10 @@ do_syncrep2(
                        msg != NULL;
                        msg = ldap_next_message( si->si_ld, msg ) )
                {
+                       if ( slapd_shutdown ) {
+                               rc = -2;
+                               goto done;
+                       }
                        switch( ldap_msgtype( msg ) ) {
                        case LDAP_RES_SEARCH_ENTRY:
                                ldap_get_entry_controls( si->si_ld, msg, &rctrls );
@@ -839,11 +843,14 @@ do_syncrepl(
        if ( si == NULL )
                return NULL;
 
+       ldap_pvt_thread_mutex_lock( &si->si_mutex );
+
        switch( abs( si->si_type )) {
        case LDAP_SYNC_REFRESH_ONLY:
        case LDAP_SYNC_REFRESH_AND_PERSIST:
                break;
        default:
+               ldap_pvt_thread_mutex_unlock( &si->si_mutex );
                return NULL;
        }
 
@@ -854,6 +861,7 @@ do_syncrepl(
                        ldap_unbind( si->si_ld );
                        si->si_ld = NULL;
                }
+               ldap_pvt_thread_mutex_unlock( &si->si_mutex );
                return NULL;
        }
 
@@ -947,6 +955,7 @@ do_syncrepl(
        }
        
        ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
+       ldap_pvt_thread_mutex_unlock( &si->si_mutex );
 
        return NULL;
 }
@@ -1143,16 +1152,11 @@ syncrepl_entry(
        SlapReply       rs_add = {REP_RESULT};
        SlapReply       rs_modify = {REP_RESULT};
        Filter f = {0};
-       AttributeAssertion ava = {0};
+       AttributeAssertion ava = { NULL, BER_BVNULL, NULL };
        int rc = LDAP_SUCCESS;
        int ret = LDAP_SUCCESS;
 
        struct berval pdn = BER_BVNULL;
-       struct berval org_req_dn = BER_BVNULL;
-       struct berval org_req_ndn = BER_BVNULL;
-       struct berval org_dn = BER_BVNULL;
-       struct berval org_ndn = BER_BVNULL;
-       int     org_managedsait;
        dninfo dni = {0};
        int     retry = 1;
 
@@ -1249,15 +1253,6 @@ syncrepl_entry(
        cb.sc_response = null_callback;
        cb.sc_private = si;
 
-       org_req_dn = op->o_req_dn;
-       org_req_ndn = op->o_req_ndn;
-       org_dn = op->o_dn;
-       org_ndn = op->o_ndn;
-       org_managedsait = get_manageDSAit( op );
-       op->o_dn = op->o_bd->be_rootdn;
-       op->o_ndn = op->o_bd->be_rootndn;
-       op->o_managedsait = SLAP_CONTROL_NONCRITICAL;
-
        if ( entry && !BER_BVISNULL( &entry->e_name ) ) {
                Debug( LDAP_DEBUG_SYNC,
                                "syncrepl_entry: %s\n",
@@ -1268,11 +1263,6 @@ syncrepl_entry(
                                dni.dn.bv_val ? dni.dn.bv_val : "(null)", 0, 0 );
        }
 
-       org_req_dn = op->o_req_dn;
-       org_req_ndn = op->o_req_ndn;
-       org_managedsait = get_manageDSAit( op );
-       op->o_managedsait = SLAP_CONTROL_NONCRITICAL;
-
        if ( syncstate != LDAP_SYNC_DELETE ) {
                Attribute       *a = attr_find( entry->e_attrs, slap_schema.si_ad_entryUUID );
 
@@ -1540,7 +1530,6 @@ syncrepl_del_nonpresent(
        struct berval pdn = BER_BVNULL;
        struct berval org_req_dn = BER_BVNULL;
        struct berval org_req_ndn = BER_BVNULL;
-       int     org_managedsait;
 
        op->o_req_dn = si->si_base;
        op->o_req_ndn = si->si_base;
@@ -1558,14 +1547,13 @@ syncrepl_del_nonpresent(
 
        if ( uuids ) {
                Filter uf;
-               AttributeAssertion eq;
+               AttributeAssertion eq = { NULL, BER_BVNULL, NULL };
                int i;
 
                op->ors_attrsonly = 1;
                op->ors_attrs = slap_anlist_no_attrs;
                op->ors_limit = NULL;
                op->ors_filter = &uf;
-               op->o_managedsait = SLAP_CONTROL_NONCRITICAL;
 
                uf.f_ava = &eq;
                uf.f_av_desc = slap_schema.si_ad_entryUUID;
@@ -1589,7 +1577,6 @@ syncrepl_del_nonpresent(
                op->ors_filter = str2filter_x( op, si->si_filterstr.bv_val );
                op->ors_filterstr = si->si_filterstr;
                op->o_nocaching = 1;
-               op->o_managedsait = SLAP_CONTROL_NONE;
 
                if ( limits_check( op, &rs_search ) == 0 ) {
                        rc = be->be_search( op, &rs_search );
@@ -1597,7 +1584,6 @@ syncrepl_del_nonpresent(
                if ( op->ors_filter ) filter_free_x( op, op->ors_filter );
        }
 
-       op->o_managedsait = SLAP_CONTROL_NONCRITICAL;
        op->o_nocaching = 0;
 
        if ( !LDAP_LIST_EMPTY( &si->si_nonpresentlist ) ) {
@@ -1639,9 +1625,6 @@ syncrepl_del_nonpresent(
                                rc = be->be_modify( op, &rs_modify );
                        }
 
-                       org_managedsait = get_manageDSAit( op );
-                       op->o_managedsait = SLAP_CONTROL_NONCRITICAL;
-
                        while ( rs_delete.sr_err == LDAP_SUCCESS &&
                                        op->o_delete_glue_parent ) {
                                op->o_delete_glue_parent = 0;
@@ -1659,15 +1642,10 @@ syncrepl_del_nonpresent(
                            }
                        }
 
-                       op->o_managedsait = org_managedsait;
-                       op->o_req_dn = org_req_dn;
-                       op->o_req_ndn = org_req_ndn;
                        op->o_delete_glue_parent = 0;
 
                        ber_bvfree( np_prev->npe_name );
                        ber_bvfree( np_prev->npe_nname );
-                       BER_BVZERO( &op->o_req_dn );
-                       BER_BVZERO( &op->o_req_ndn );
                        ch_free( np_prev );
                }
 
@@ -2105,11 +2083,9 @@ avl_ber_bvfree( void *v_bv )
 void
 syncinfo_free( syncinfo_t *sie )
 {
-       if ( sie->si_provideruri ) {
-               ch_free( sie->si_provideruri );
-       }
-       if ( sie->si_provideruri_bv ) {
-               ber_bvarray_free( sie->si_provideruri_bv );
+       ldap_pvt_thread_mutex_destroy( &sie->si_mutex );
+       if ( !BER_BVISNULL( &sie->si_provideruri ) ) {
+               ch_free( sie->si_provideruri.bv_val );
        }
        if ( sie->si_binddn ) {
                ch_free( sie->si_binddn );