version 1.273, 2009/03/13 05:44:49
|
version 1.274, 2009/03/13 06:50:45
|
Line 1
|
Line 1
|
/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.272 2009/03/13 02:44:51 hyc Exp $ */ |
/* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.273 2009/03/13 05:44:49 hyc 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 146 typedef struct opcookie {
|
Line 146 typedef struct opcookie {
|
struct berval sndn; |
struct berval sndn; |
struct berval suuid; /* UUID of entry */ |
struct berval suuid; /* UUID of entry */ |
struct berval sctxcsn; |
struct berval sctxcsn; |
short ssid; /* sid of op csn */ |
short osid; /* sid of op csn */ |
|
short rsid; /* sid of relay */ |
short sreference; /* Is the entry a reference? */ |
short sreference; /* Is the entry a reference? */ |
} opcookie; |
} opcookie; |
|
|
Line 1117 syncprov_matchops( Operation *op, opcook
|
Line 1118 syncprov_matchops( Operation *op, opcook
|
|
|
fbase_cookie fc; |
fbase_cookie fc; |
syncops *ss, *sprev, *snext; |
syncops *ss, *sprev, *snext; |
struct sync_cookie *scook; |
|
Entry *e = NULL; |
Entry *e = NULL; |
Attribute *a; |
Attribute *a; |
int rc; |
int rc; |
Line 1169 syncprov_matchops( Operation *op, opcook
|
Line 1169 syncprov_matchops( Operation *op, opcook
|
ber_dupbv_x( &opc->sndn, &e->e_nname, op->o_tmpmemctx ); |
ber_dupbv_x( &opc->sndn, &e->e_nname, op->o_tmpmemctx ); |
} |
} |
|
|
scook = op->o_controls ? op->o_controls[slap_cids.sc_LDAPsync] : NULL; |
|
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex ); |
ldap_pvt_thread_mutex_lock( &si->si_ops_mutex ); |
for (ss = si->si_ops, sprev = (syncops *)&si->si_ops; ss; |
for (ss = si->si_ops, sprev = (syncops *)&si->si_ops; ss; |
sprev = ss, ss=snext) |
sprev = ss, ss=snext) |
Line 1187 syncprov_matchops( Operation *op, opcook
|
Line 1186 syncprov_matchops( Operation *op, opcook
|
if ( saveit || op->o_tag == LDAP_REQ_ADD ) { |
if ( saveit || op->o_tag == LDAP_REQ_ADD ) { |
|
|
/* Don't send ops back to the originator */ |
/* Don't send ops back to the originator */ |
if ( opc->ssid > 0 && opc->ssid == ss->s_sid ) { |
if ( opc->osid > 0 && opc->osid == ss->s_sid ) { |
Debug( LDAP_DEBUG_SYNC, "syncprov_matchops: skipping original sid %03x\n", |
Debug( LDAP_DEBUG_SYNC, "syncprov_matchops: skipping original sid %03x\n", |
opc->ssid, 0, 0 ); |
opc->osid, 0, 0 ); |
continue; |
continue; |
} |
} |
|
|
/* Don't send ops back to the messenger */ |
/* Don't send ops back to the messenger */ |
if ( scook && scook->sid > 0 && scook->sid == ss->s_sid ) { |
if ( opc->rsid > 0 && opc->rsid == ss->s_sid ) { |
Debug( LDAP_DEBUG_SYNC, "syncprov_matchops: skipping relayed sid %03x\n", |
Debug( LDAP_DEBUG_SYNC, "syncprov_matchops: skipping relayed sid %03x\n", |
scook->sid, 0, 0 ); |
opc->rsid, 0, 0 ); |
continue; |
continue; |
} |
} |
} |
} |
Line 1251 syncprov_matchops( Operation *op, opcook
|
Line 1250 syncprov_matchops( Operation *op, opcook
|
rc = test_filter( &op2, e, ss->s_op->ors_filter ); |
rc = test_filter( &op2, e, ss->s_op->ors_filter ); |
} |
} |
|
|
Debug( LDAP_DEBUG_SYNC, "syncprov_matchops: sid %03x fscope %d rc %d\n", |
Debug( LDAP_DEBUG_TRACE, "syncprov_matchops: sid %03x fscope %d rc %d\n", |
ss->s_sid, fc.fscope, rc ); |
ss->s_sid, fc.fscope, rc ); |
|
|
/* check if current o_req_dn is in scope and matches filter */ |
/* check if current o_req_dn is in scope and matches filter */ |
Line 1906 syncprov_op_mod( Operation *op, SlapRepl
|
Line 1905 syncprov_op_mod( Operation *op, SlapRepl
|
cb->sc_next = op->o_callback; |
cb->sc_next = op->o_callback; |
op->o_callback = cb; |
op->o_callback = cb; |
|
|
|
opc->osid = -1; |
|
opc->rsid = -1; |
if ( op->o_csn.bv_val ) { |
if ( op->o_csn.bv_val ) { |
opc->ssid = slap_parse_csn_sid( &op->o_csn ); |
opc->osid = slap_parse_csn_sid( &op->o_csn ); |
} else { |
} |
opc->ssid = -1; |
if ( op->o_controls ) { |
|
struct sync_cookie *scook = |
|
op->o_controls[slap_cids.sc_LDAPsync]; |
|
if ( scook ) |
|
opc->rsid = scook->sid; |
} |
} |
|
|
/* If there are active persistent searches, lock this operation. |
/* If there are active persistent searches, lock this operation. |