X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fsyncrepl.c;h=1e6e00c049b611343ed9b633b34dfc4de1d9a420;hb=a12bedc2d8643dcc45435943908777c67a9de9d3;hp=dec190da0fb9daa63a7495711586a7aad468169c;hpb=1c1b5ca0c4cc7da98beff036c0ab54042fe63899;p=openldap diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index dec190da0f..1e6e00c049 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -2,7 +2,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 2003-2012 The OpenLDAP Foundation. + * Copyright 2003-2013 The OpenLDAP Foundation. * Portions Copyright 2003 by IBM Corporation. * Portions Copyright 2003-2008 by Howard Chu, Symas Corporation. * All rights reserved. @@ -590,7 +590,8 @@ check_syncprov( slap_compose_sync_cookie( NULL, &si->si_syncCookie.octet_str, si->si_syncCookie.ctxcsn, si->si_syncCookie.rid, si->si_syncCookie.sid ); - slap_parse_sync_cookie( &si->si_syncCookie, NULL ); + ch_free( si->si_syncCookie.sids ); + slap_reparse_sync_cookie( &si->si_syncCookie, op->o_tmpmemctx ); } ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_mutex ); return changed; @@ -667,11 +668,11 @@ do_syncrep1( LDAP_STAILQ_REMOVE( &slap_sync_cookie, sc, sync_cookie, sc_next ); - /* ctxcsn wasn't parsed yet, do it now */ - slap_parse_sync_cookie( sc, NULL ); slap_sync_cookie_free( &si->si_syncCookie, 0 ); - slap_dup_sync_cookie( &si->si_syncCookie, sc ); - slap_sync_cookie_free( sc, 1 ); + si->si_syncCookie.octet_str = sc->octet_str; + ch_free( sc ); + /* ctxcsn wasn't parsed yet, do it now */ + slap_parse_sync_cookie( &si->si_syncCookie, NULL ); } else { ldap_pvt_thread_mutex_lock( &si->si_cookieState->cs_mutex ); if ( !si->si_cookieState->cs_num ) { @@ -1344,6 +1345,9 @@ do_syncrep2( ldap_memfree( retoid ); ber_bvfree( retdata ); + if ( rc ) + goto done; + } else { Debug( LDAP_DEBUG_ANY, "do_syncrep2: %s " "unknown intermediate response (%d)\n", @@ -1363,8 +1367,8 @@ do_syncrep2( } if ( !BER_BVISNULL( &syncCookie.octet_str ) ) { slap_sync_cookie_free( &syncCookie_req, 0 ); - slap_dup_sync_cookie( &syncCookie_req, &syncCookie ); - slap_sync_cookie_free( &syncCookie, 0 ); + syncCookie_req = syncCookie; + memset( &syncCookie, 0, sizeof( syncCookie )); } ldap_msgfree( msg ); msg = NULL; @@ -5080,14 +5084,15 @@ parse_syncrepl_line( STRLENOF( STRICT_REFRESH ) ) ) { si->si_strict_refresh = 1; - } else if ( bindconf_parse( c->argv[i], &si->si_bindconf ) ) { + } else if ( !bindconf_parse( c->argv[i], &si->si_bindconf ) ) { + si->si_got |= GOT_BINDCONF; + } else { snprintf( c->cr_msg, sizeof( c->cr_msg ), "Error: parse_syncrepl_line: " "unable to parse \"%s\"\n", c->argv[ i ] ); Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->cr_msg, 0 ); return -1; } - si->si_got |= GOT_BINDCONF; } if ( ( si->si_got & GOT_REQUIRED ) != GOT_REQUIRED ) { @@ -5101,11 +5106,11 @@ parse_syncrepl_line( } if ( !be_issubordinate( c->be, &si->si_base ) && !( si->si_got & GOT_SUFFIXM )) { - ch_free( si->si_base.bv_val ); - BER_BVZERO( &si->si_base ); snprintf( c->cr_msg, sizeof( c->cr_msg ), "Base DN \"%s\" is not within the database naming context", - val ); + si->si_base.bv_val ); + ch_free( si->si_base.bv_val ); + BER_BVZERO( &si->si_base ); Debug( LDAP_DEBUG_ANY, "%s: %s.\n", c->log, c->cr_msg, 0 ); return -1; }