Diff for /servers/slapd/overlays/syncprov.c between versions 1.266 and 1.267

version 1.266, 2009/03/05 16:53:01 version 1.267, 2009/03/12 23:14:19
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.265 2009/03/05 10:21:07 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.266 2009/03/05 16:53:01 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;
         int sreference; /* Is the entry a reference? */          short ssid;     /* sid of op csn */
           short sreference;       /* Is the entry a reference? */
 } opcookie;  } opcookie;
   
 typedef struct fbase_cookie {  typedef struct fbase_cookie {
Line 782  syncprov_sendresp( Operation *op, opcook Line 783  syncprov_sendresp( Operation *op, opcook
         ctrls[1] = NULL;          ctrls[1] = NULL;
         csns[0] = opc->sctxcsn;          csns[0] = opc->sctxcsn;
         BER_BVZERO( &csns[1] );          BER_BVZERO( &csns[1] );
         slap_compose_sync_cookie( op, &cookie, csns, so->s_rid, so->s_sid );          slap_compose_sync_cookie( op, &cookie, csns, so->s_rid, slap_serverID );
   
         Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: cookie=%s\n", cookie.bv_val, 0, 0 );          Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: cookie=%s\n", cookie.bv_val, 0, 0 );
   
Line 981  syncprov_qresp( opcookie *opc, syncops * Line 982  syncprov_qresp( opcookie *opc, syncops *
                 syncprov_info_t *si = opc->son->on_bi.bi_private;                  syncprov_info_t *si = opc->son->on_bi.bi_private;
   
                 slap_compose_sync_cookie( NULL, &cookie, si->si_ctxcsn,                  slap_compose_sync_cookie( NULL, &cookie, si->si_ctxcsn,
                         so->s_rid, so->s_sid);                          so->s_rid, slap_serverID);
         } else if ( opc->sctxcsn.bv_len ) {  
                 /* Don't send changes back to their originator */  
                 int sid = slap_parse_csn_sid( &opc->sctxcsn );  
                 if ( sid >= 0 && sid == so->s_sid )  
                         return LDAP_SUCCESS;  
         }          }
   
         srsize = sizeof(syncres) + opc->suuid.bv_len + 1 +          srsize = sizeof(syncres) + opc->suuid.bv_len + 1 +
Line 1113  syncprov_matchops( Operation *op, opcook Line 1109  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 1164  syncprov_matchops( Operation *op, opcook Line 1161  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[slap_cids.sc_LDAPsync];
         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 1177  syncprov_matchops( Operation *op, opcook Line 1175  syncprov_matchops( Operation *op, opcook
                 if ( ss->s_op->o_abandon )                  if ( ss->s_op->o_abandon )
                         continue;                          continue;
   
                   /* Don't send ops back to the originator */
                   if ( opc->ssid && opc->ssid == ss->s_sid ) {
                           Debug( LDAP_DEBUG_SYNC, "syncprov_matchops: skipping original sid %03x\n",
                                   opc->ssid, 0, 0 );
                           continue;
                   }
   
                   /* Don't send ops back to the messenger */
                   if ( scook && scook->sid == ss->s_sid ) {
                           Debug( LDAP_DEBUG_SYNC, "syncprov_matchops: skipping relayed sid %03x\n",
                                   scook->sid, 0, 0 );
                           continue;
                   }
   
                 /* validate base */                  /* validate base */
                 fc.fss = ss;                  fc.fss = ss;
                 fc.fbase = 0;                  fc.fbase = 0;
Line 1584  syncprov_playlog( Operation *op, SlapRep Line 1596  syncprov_playlog( Operation *op, SlapRep
   
                 if ( delcsn[0].bv_len ) {                  if ( delcsn[0].bv_len ) {
                         slap_compose_sync_cookie( op, &cookie, delcsn, srs->sr_state.rid,                          slap_compose_sync_cookie( op, &cookie, delcsn, srs->sr_state.rid,
                                 srs->sr_state.sid );                                  slap_serverID );
   
                         Debug( LDAP_DEBUG_SYNC, "syncprov_playlog: cookie=%s\n", cookie.bv_val, 0, 0 );                          Debug( LDAP_DEBUG_SYNC, "syncprov_playlog: cookie=%s\n", cookie.bv_val, 0, 0 );
                 }                  }
Line 1877  syncprov_op_mod( Operation *op, SlapRepl Line 1889  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;
   
           if ( op->o_csn.bv_val ) {
                   opc->ssid = slap_parse_csn_sid( &op->o_csn );
           } else {
                   opc->ssid = -1;
           }
   
         /* If there are active persistent searches, lock this operation.          /* If there are active persistent searches, lock this operation.
          * See seqmod.c for the locking logic on its own.           * See seqmod.c for the locking logic on its own.
          */           */
Line 2146  syncprov_search_response( Operation *op, Line 2164  syncprov_search_response( Operation *op,
                 /* If we're in delta-sync mode, always send a cookie */                  /* If we're in delta-sync mode, always send a cookie */
                 if ( si->si_nopres && si->si_usehint && a ) {                  if ( si->si_nopres && si->si_usehint && a ) {
                         struct berval cookie;                          struct berval cookie;
                         slap_compose_sync_cookie( op, &cookie, a->a_nvals, srs->sr_state.rid, srs->sr_state.sid );                          slap_compose_sync_cookie( op, &cookie, a->a_nvals, srs->sr_state.rid, slap_serverID );
                         rs->sr_err = syncprov_state_ctrl( op, rs, rs->sr_entry,                          rs->sr_err = syncprov_state_ctrl( op, rs, rs->sr_entry,
                                 LDAP_SYNC_ADD, rs->sr_ctrls, 0, 1, &cookie );                                  LDAP_SYNC_ADD, rs->sr_ctrls, 0, 1, &cookie );
                 } else {                  } else {
Line 2158  syncprov_search_response( Operation *op, Line 2176  syncprov_search_response( Operation *op,
   
                 if ( ss->ss_flags & SS_CHANGED ) {                  if ( ss->ss_flags & SS_CHANGED ) {
                         slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,                          slap_compose_sync_cookie( op, &cookie, ss->ss_ctxcsn,
                                 srs->sr_state.rid, srs->sr_state.sid );                                  srs->sr_state.rid, slap_serverID );
   
                         Debug( LDAP_DEBUG_SYNC, "syncprov_search_response: cookie=%s\n", cookie.bv_val, 0, 0 );                          Debug( LDAP_DEBUG_SYNC, "syncprov_search_response: cookie=%s\n", cookie.bv_val, 0, 0 );
                 }                  }

Removed from v.1.266  
changed lines
  Added in v.1.267


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org