Modifications **, Entry **, int );
static int syncrepl_entry(
syncinfo_t *, Operation*, Entry*,
- Modifications**,int, struct berval* );
+ Modifications**,int, struct berval*,
+ struct berval *cookieCSN );
static int syncrepl_updateCookie(
syncinfo_t *, Operation *, struct berval *,
struct sync_cookie * );
&modlist, &entry, syncstate ) ) == LDAP_SUCCESS )
{
if ( ( rc = syncrepl_entry( si, op, entry, &modlist,
- syncstate, &syncUUID ) ) == LDAP_SUCCESS &&
+ syncstate, &syncUUID, syncCookie.ctxcsn ) ) == LDAP_SUCCESS &&
syncCookie.ctxcsn )
{
rc = syncrepl_updateCookie( si, op, psub, &syncCookie );
Entry* entry,
Modifications** modlist,
int syncstate,
- struct berval* syncUUID )
+ struct berval* syncUUID,
+ struct berval* syncCSN )
{
Backend *be = op->o_bd;
slap_callback cb = { NULL, NULL, NULL, NULL };
}
assert( BER_BVISNULL( &op->o_csn ) );
+ if ( syncCSN ) {
+ slap_queue_csn( op, syncCSN );
+ }
slap_op_time( &op->o_time, &op->o_tincr );
switch ( syncstate ) {
case LDAP_SYNC_ADD:
case LDAP_SYNC_MODIFY:
+ if ( BER_BVISNULL( &op->o_csn ))
{
+
Attribute *a = attr_find( entry->e_attrs, slap_schema.si_ad_entryCSN );
if ( a ) {
/* FIXME: op->o_csn is assumed to be
if ( entry ) {
entry_free( entry );
}
+ if ( syncCSN ) {
+ slap_graduate_commit_csn( op );
+ }
if ( !BER_BVISNULL( &op->o_csn ) && freecsn ) {
op->o_tmpfree( op->o_csn.bv_val, op->o_tmpmemctx );
}
for (i=0; uuids[i].bv_val; i++) {
op->ors_slimit = 1;
- slap_uuidstr_from_normalized( &uf.f_av_value, &uuids[i],
- op->o_tmpmemctx );
- filter2bv_x( op, op->ors_filter, &op->ors_filterstr );
- op->o_tmpfree( uf.f_av_value.bv_val, op->o_tmpmemctx );
uf.f_av_value = uuids[i];
+ filter2bv_x( op, op->ors_filter, &op->ors_filterstr );
rc = be->be_search( op, &rs_search );
op->o_tmpfree( op->ors_filterstr.bv_val, op->o_tmpmemctx );
}
mod2.sml_flags = 0;
mod2.sml_desc = slap_schema.si_ad_structuralObjectClass;
mod2.sml_type = mod2.sml_desc->ad_cname;
- mod1.sml_numvals = 1;
+ mod2.sml_numvals = 1;
mod2.sml_values = &gcbva[1];
mod2.sml_nvalues = NULL;
mod2.sml_next = NULL;
si->si_interval = 0;
} else if ( strchr( val, ':' ) != NULL ) {
char *next, *ptr = val;
- unsigned dd, hh, mm, ss;
+ int dd, hh, mm, ss;
- /* NOTE: the test for ptr[ 0 ] == '-'
- * should go before the call to strtoul() */
- dd = strtoul( ptr, &next, 10 );
- if ( ptr[ 0 ] == '-' || next == ptr || next[0] != ':' ) {
+ dd = strtol( ptr, &next, 10 );
+ if ( next == ptr || next[0] != ':' || dd < 0 ) {
snprintf( c->cr_msg, sizeof( c->cr_msg ),
"Error: parse_syncrepl_line: "
"invalid interval \"%s\", unable to parse days", val );
return -1;
}
ptr = next + 1;
- hh = strtoul( ptr, &next, 10 );
- if ( ptr[ 0 ] == '-' || next == ptr || next[0] != ':' || hh > 24 ) {
+ hh = strtol( ptr, &next, 10 );
+ if ( next == ptr || next[0] != ':' || hh < 0 || hh > 24 ) {
snprintf( c->cr_msg, sizeof( c->cr_msg ),
"Error: parse_syncrepl_line: "
"invalid interval \"%s\", unable to parse hours", val );
return -1;
}
ptr = next + 1;
- mm = strtoul( ptr, &next, 10 );
- if ( ptr[ 0 ] == '-' || next == ptr || next[0] != ':' || mm > 60 ) {
+ mm = strtol( ptr, &next, 10 );
+ if ( next == ptr || next[0] != ':' || mm < 0 || mm > 60 ) {
snprintf( c->cr_msg, sizeof( c->cr_msg ),
"Error: parse_syncrepl_line: "
"invalid interval \"%s\", unable to parse minutes", val );
return -1;
}
ptr = next + 1;
- ss = strtoul( ptr, &next, 10 );
- if ( ptr[ 0 ] == '-' || next == ptr || next[0] != '\0' || ss > 60 ) {
+ ss = strtol( ptr, &next, 10 );
+ if ( next == ptr || next[0] != '\0' || ss < 0 || ss > 60 ) {
snprintf( c->cr_msg, sizeof( c->cr_msg ),
"Error: parse_syncrepl_line: "
"invalid interval \"%s\", unable to parse seconds", val );