version 1.125, 2005/11/15 17:27:40
|
version 1.133, 2005/12/07 00:30:28
|
Line 1
|
Line 1
|
/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.124 2005/11/07 23:40:20 ando Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.132 2005/12/06 22:10:14 ando Exp $ */ |
/* syncprov.c - syncrepl provider */ |
/* syncprov.c - syncrepl provider */ |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
/* This work is part of OpenLDAP Software <http://www.openldap.org/>. |
* |
* |
Line 450 syncprov_findbase( Operation *op, fbase_
|
Line 450 syncprov_findbase( Operation *op, fbase_
|
case LDAP_SCOPE_SUBTREE: |
case LDAP_SCOPE_SUBTREE: |
fc->fscope = dnIsSuffix( fc->fdn, &fc->fss->s_base ); |
fc->fscope = dnIsSuffix( fc->fdn, &fc->fss->s_base ); |
break; |
break; |
#ifdef LDAP_SCOPE_SUBORDINATE |
|
case LDAP_SCOPE_SUBORDINATE: |
case LDAP_SCOPE_SUBORDINATE: |
fc->fscope = dnIsSuffix( fc->fdn, &fc->fss->s_base ) && |
fc->fscope = dnIsSuffix( fc->fdn, &fc->fss->s_base ) && |
!dn_match( fc->fdn, &fc->fss->s_base ); |
!dn_match( fc->fdn, &fc->fss->s_base ); |
break; |
break; |
#endif |
|
} |
} |
} |
} |
|
|
Line 510 findcsn_cb( Operation *op, SlapReply *rs
|
Line 508 findcsn_cb( Operation *op, SlapReply *rs
|
{ |
{ |
slap_callback *sc = op->o_callback; |
slap_callback *sc = op->o_callback; |
|
|
if ( rs->sr_type == REP_SEARCH && rs->sr_err == LDAP_SUCCESS ) { |
/* We just want to know that at least one exists, so it's OK if |
|
* we exceed the unchecked limit. |
|
*/ |
|
if ( rs->sr_err == LDAP_ADMINLIMIT_EXCEEDED || |
|
(rs->sr_type == REP_SEARCH && rs->sr_err == LDAP_SUCCESS )) { |
sc->sc_private = (void *)1; |
sc->sc_private = (void *)1; |
} |
} |
return LDAP_SUCCESS; |
return LDAP_SUCCESS; |
Line 583 syncprov_findcsn( Operation *op, find_cs
|
Line 585 syncprov_findcsn( Operation *op, find_cs
|
#else |
#else |
AttributeAssertion eq = { NULL, BER_BVNULL }; |
AttributeAssertion eq = { NULL, BER_BVNULL }; |
#endif |
#endif |
int i, rc = LDAP_SUCCESS; |
|
fpres_cookie pcookie; |
fpres_cookie pcookie; |
sync_control *srs = NULL; |
sync_control *srs = NULL; |
int findcsn_retry = 1; |
struct slap_limits_set fc_limits; |
|
int i, rc = LDAP_SUCCESS, findcsn_retry = 1; |
|
|
if ( mode != FIND_MAXCSN ) { |
if ( mode != FIND_MAXCSN ) { |
srs = op->o_controls[slap_cids.sc_LDAPsync]; |
srs = op->o_controls[slap_cids.sc_LDAPsync]; |
Line 637 again:
|
Line 639 again:
|
/* On retry, look for <= */ |
/* On retry, look for <= */ |
} else { |
} else { |
cf.f_choice = LDAP_FILTER_LE; |
cf.f_choice = LDAP_FILTER_LE; |
|
fop.ors_limit = &fc_limits; |
|
fc_limits.lms_s_unchecked = 1; |
fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN<=%s)", |
fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN<=%s)", |
cf.f_av_value.bv_val ); |
cf.f_av_value.bv_val ); |
} |
} |
Line 1222 syncprov_checkpoint( Operation *op, Slap
|
Line 1226 syncprov_checkpoint( Operation *op, Slap
|
syncprov_info_t *si = on->on_bi.bi_private; |
syncprov_info_t *si = on->on_bi.bi_private; |
Modifications mod; |
Modifications mod; |
Operation opm; |
Operation opm; |
SlapReply rsm; |
SlapReply rsm = { 0 }; |
struct berval bv[2]; |
struct berval bv[2]; |
slap_callback cb = {0}; |
slap_callback cb = {0}; |
|
|
Line 1244 syncprov_checkpoint( Operation *op, Slap
|
Line 1248 syncprov_checkpoint( Operation *op, Slap
|
opm.o_req_ndn = op->o_bd->be_nsuffix[0]; |
opm.o_req_ndn = op->o_bd->be_nsuffix[0]; |
opm.o_bd->bd_info = on->on_info->oi_orig; |
opm.o_bd->bd_info = on->on_info->oi_orig; |
opm.o_managedsait = SLAP_CONTROL_NONCRITICAL; |
opm.o_managedsait = SLAP_CONTROL_NONCRITICAL; |
|
SLAP_DBFLAGS( opm.o_bd ) |= SLAP_DBFLAG_NOLASTMOD; |
opm.o_bd->be_modify( &opm, &rsm ); |
opm.o_bd->be_modify( &opm, &rsm ); |
|
SLAP_DBFLAGS( opm.o_bd ) ^= SLAP_DBFLAG_NOLASTMOD; |
if ( mod.sml_next != NULL ) { |
if ( mod.sml_next != NULL ) { |
slap_mods_free( mod.sml_next, 1 ); |
slap_mods_free( mod.sml_next, 1 ); |
} |
} |
Line 1794 syncprov_search_response( Operation *op,
|
Line 1800 syncprov_search_response( Operation *op,
|
return SLAP_CB_CONTINUE; |
return SLAP_CB_CONTINUE; |
} |
} |
a = attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_entryCSN ); |
a = attr_find( rs->sr_entry->e_attrs, slap_schema.si_ad_entryCSN ); |
|
if ( a == NULL && rs->sr_operational_attrs != NULL ) { |
|
a = attr_find( rs->sr_operational_attrs, slap_schema.si_ad_entryCSN ); |
|
} |
if ( a ) { |
if ( a ) { |
/* Make sure entry is less than the snaphot'd contextCSN */ |
/* Make sure entry is less than the snaphot'd contextCSN */ |
if ( ber_bvcmp( &a->a_nvals[0], &ss->ss_ctxcsn ) > 0 ) |
if ( ber_bvcmp( &a->a_nvals[0], &ss->ss_ctxcsn ) > 0 ) |
Line 2187 sp_cf_gen(ConfigArgs *c)
|
Line 2196 sp_cf_gen(ConfigArgs *c)
|
} |
} |
switch ( c->type ) { |
switch ( c->type ) { |
case SP_CHKPT: |
case SP_CHKPT: |
si->si_chkops = atoi( c->argv[1] ); |
if ( lutil_atoi( &si->si_chkops, c->argv[1] ) != 0 ) { |
si->si_chktime = atoi( c->argv[2] ) * 60; |
sprintf( c->msg, "%s unable to parse checkpoint ops # \"%s\"", |
|
c->argv[0], c->argv[1] ); |
|
Debug( LDAP_DEBUG_CONFIG, "%s: %s\n", c->log, c->msg, 0 ); |
|
return ARG_BAD_CONF; |
|
} |
|
if ( si->si_chkops <= 0 ) { |
|
sprintf( c->msg, "%s invalid checkpoint ops # \"%d\"", |
|
c->argv[0], si->si_chkops ); |
|
Debug( LDAP_DEBUG_CONFIG, "%s: %s\n", c->log, c->msg, 0 ); |
|
return ARG_BAD_CONF; |
|
} |
|
if ( lutil_atoi( &si->si_chktime, c->argv[2] ) != 0 ) { |
|
sprintf( c->msg, "%s unable to parse checkpoint time \"%s\"", |
|
c->argv[0], c->argv[1] ); |
|
Debug( LDAP_DEBUG_CONFIG, "%s: %s\n", c->log, c->msg, 0 ); |
|
return ARG_BAD_CONF; |
|
} |
|
if ( si->si_chktime <= 0 ) { |
|
sprintf( c->msg, "%s invalid checkpoint time \"%d\"", |
|
c->argv[0], si->si_chkops ); |
|
Debug( LDAP_DEBUG_CONFIG, "%s: %s\n", c->log, c->msg, 0 ); |
|
return ARG_BAD_CONF; |
|
} |
|
si->si_chktime *= 60; |
break; |
break; |
case SP_SESSL: { |
case SP_SESSL: { |
sessionlog *sl; |
sessionlog *sl; |
Line 2291 syncprov_db_open(
|
Line 2323 syncprov_db_open(
|
strcpy( ctxcsnbuf, si->si_ctxcsnbuf ); |
strcpy( ctxcsnbuf, si->si_ctxcsnbuf ); |
} |
} |
be_entry_release_rw( op, e, 0 ); |
be_entry_release_rw( op, e, 0 ); |
op->o_bd->bd_info = (BackendInfo *)on; |
if ( !BER_BVISEMPTY( &si->si_ctxcsn ) ) { |
op->o_req_dn = be->be_suffix[0]; |
op->o_bd->bd_info = (BackendInfo *)on; |
op->o_req_ndn = be->be_nsuffix[0]; |
op->o_req_dn = be->be_suffix[0]; |
op->ors_scope = LDAP_SCOPE_SUBTREE; |
op->o_req_ndn = be->be_nsuffix[0]; |
ldap_pvt_thread_create( &tid, 0, syncprov_db_otask, op ); |
op->ors_scope = LDAP_SCOPE_SUBTREE; |
ldap_pvt_thread_join( tid, NULL ); |
ldap_pvt_thread_create( &tid, 0, syncprov_db_otask, op ); |
|
ldap_pvt_thread_join( tid, NULL ); |
|
} |
} else if ( SLAP_SYNC_SHADOW( op->o_bd )) { |
} else if ( SLAP_SYNC_SHADOW( op->o_bd )) { |
/* If we're also a consumer, and we didn't find the context entry, |
/* If we're also a consumer, and we didn't find the context entry, |
* then don't generate anything, wait for our provider to send it |
* then don't generate anything, wait for our provider to send it |
Line 2390 syncprov_db_destroy(
|
Line 2424 syncprov_db_destroy(
|
syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private; |
syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private; |
|
|
if ( si ) { |
if ( si ) { |
|
if ( si->si_logs ) { |
|
ch_free( si->si_logs ); |
|
} |
ldap_pvt_thread_mutex_destroy( &si->si_mods_mutex ); |
ldap_pvt_thread_mutex_destroy( &si->si_mods_mutex ); |
ldap_pvt_thread_mutex_destroy( &si->si_ops_mutex ); |
ldap_pvt_thread_mutex_destroy( &si->si_ops_mutex ); |
ldap_pvt_thread_mutex_destroy( &si->si_csn_mutex ); |
ldap_pvt_thread_mutex_destroy( &si->si_csn_mutex ); |
Line 2508 static int syncprov_parseCtrl (
|
Line 2545 static int syncprov_parseCtrl (
|
static slap_overinst syncprov; |
static slap_overinst syncprov; |
|
|
int |
int |
syncprov_init() |
syncprov_initialize() |
{ |
{ |
int rc; |
int rc; |
|
|
Line 2553 syncprov_init()
|
Line 2590 syncprov_init()
|
int |
int |
init_module( int argc, char *argv[] ) |
init_module( int argc, char *argv[] ) |
{ |
{ |
return syncprov_init(); |
return syncprov_initialize(); |
} |
} |
#endif /* SLAPD_OVER_SYNCPROV == SLAPD_MOD_DYNAMIC */ |
#endif /* SLAPD_OVER_SYNCPROV == SLAPD_MOD_DYNAMIC */ |
|
|