}
punlock = -1;
if ( ber_peek_tag( ber, &len ) == LDAP_TAG_SYNC_COOKIE ) {
- ber_scanf( ber, /*"{"*/ "m}", &cookie );
+ if ( ber_scanf( ber, /*"{"*/ "m}", &cookie ) != LBER_ERROR ) {
Debug( LDAP_DEBUG_SYNC, "do_syncrep2: %s cookie=%s\n",
si->si_ridtxt,
}
op->o_controls[slap_cids.sc_LDAPsync] = &syncCookie;
}
+ }
}
rc = 0;
if ( si->si_syncdata && si->si_logstate == SYNCLOG_LOGGING ) {
ber_scanf( ber, "b", &refreshDeletes );
}
syncUUIDs = NULL;
- ber_scanf( ber, "[W]", &syncUUIDs );
+ rc = ber_scanf( ber, "[W]", &syncUUIDs );
ber_scanf( ber, /*"{"*/ "}" );
- if ( refreshDeletes ) {
- syncrepl_del_nonpresent( op, si, syncUUIDs,
- &syncCookie, m );
- ber_bvarray_free_x( syncUUIDs, op->o_tmpmemctx );
- } else {
- int i;
- for ( i = 0; !BER_BVISNULL( &syncUUIDs[i] ); i++ ) {
- (void)avl_presentlist_insert( si, &syncUUIDs[i] );
- slap_sl_free( syncUUIDs[i].bv_val, op->o_tmpmemctx );
+ if ( rc != LBER_ERROR ) {
+ if ( refreshDeletes ) {
+ syncrepl_del_nonpresent( op, si, syncUUIDs,
+ &syncCookie, m );
+ ber_bvarray_free_x( syncUUIDs, op->o_tmpmemctx );
+ } else {
+ int i;
+ for ( i = 0; !BER_BVISNULL( &syncUUIDs[i] ); i++ ) {
+ (void)avl_presentlist_insert( si, &syncUUIDs[i] );
+ slap_sl_free( syncUUIDs[i].bv_val, op->o_tmpmemctx );
+ }
+ slap_sl_free( syncUUIDs, op->o_tmpmemctx );
}
- slap_sl_free( syncUUIDs, op->o_tmpmemctx );
}
+ rc = 0;
slap_sync_cookie_free( &syncCookie, 0 );
break;
default:
{
Debug( LDAP_DEBUG_ANY, "syn_add(%s): exactly one substitute syntax must be present\n",
ssyn->ssyn_syn.syn_oid, 0, 0 );
+ SLAP_FREE( ssyn );
return SLAP_SCHERR_SYN_SUBST_NOT_SPECIFIED;
}
if ( subst == NULL ) {
Debug( LDAP_DEBUG_ANY, "syn_add(%s): substitute syntax %s not found\n",
ssyn->ssyn_syn.syn_oid, (*lsei)->lsei_values[0], 0 );
+ SLAP_FREE( ssyn );
return SLAP_SCHERR_SYN_SUBST_NOT_FOUND;
}
break;