Diff for /servers/slapd/overlays/syncprov.c between versions 1.230 and 1.236

version 1.230, 2008/04/24 16:35:35 version 1.236, 2008/05/13 19:57:19
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.229 2008/04/16 22:03:06 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.235 2008/05/12 16:33:05 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 1176  syncprov_matchops( Operation *op, opcook Line 1176  syncprov_matchops( Operation *op, opcook
         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)
         {          {
                   Operation op2;
                 syncmatches *sm;                  syncmatches *sm;
                 int found = 0;                  int found = 0;
   
                 snext = ss->s_next;                  snext = ss->s_next;
                   if ( ss->s_op->o_abandon )
                           continue;
   
                 /* validate base */                  /* validate base */
                 fc.fss = ss;                  fc.fss = ss;
                 fc.fbase = 0;                  fc.fbase = 0;
Line 1220  syncprov_matchops( Operation *op, opcook Line 1224  syncprov_matchops( Operation *op, opcook
                         }                          }
                 }                  }
   
                   if ( fc.fscope ) {
                           op2 = *ss->s_op;
                           op2.o_hdr = op->o_hdr;
                           op2.o_extra = op->o_extra;
                   }
   
                 /* check if current o_req_dn is in scope and matches filter */                  /* check if current o_req_dn is in scope and matches filter */
                 if ( fc.fscope && test_filter( ss->s_op, e, ss->s_op->ors_filter ) ==                  if ( fc.fscope && test_filter( &op2, e, ss->s_op->ors_filter ) ==
                         LDAP_COMPARE_TRUE ) {                          LDAP_COMPARE_TRUE ) {
                         if ( saveit ) {                          if ( saveit ) {
                                 sm = op->o_tmpalloc( sizeof(syncmatches), op->o_tmpmemctx );                                  sm = op->o_tmpalloc( sizeof(syncmatches), op->o_tmpmemctx );
Line 1609  syncprov_op_response( Operation *op, Sla Line 1619  syncprov_op_response( Operation *op, Sla
                                         sizeof(int));                                          sizeof(int));
                                 si->si_sids[i] = sid;                                  si->si_sids[i] = sid;
                         }                          }
                   } else {
                           /* internal ops that aren't meant to be replicated */
                           ldap_pvt_thread_rdwr_wunlock( &si->si_csn_rwlock );
                           return SLAP_CB_CONTINUE;
                 }                  }
   
                 /* Don't do any processing for consumer contextCSN updates */                  /* Don't do any processing for consumer contextCSN updates */
Line 1971  syncprov_search_response( Operation *op, Line 1985  syncprov_search_response( Operation *op,
 {  {
         searchstate *ss = op->o_callback->sc_private;          searchstate *ss = op->o_callback->sc_private;
         slap_overinst *on = ss->ss_on;          slap_overinst *on = ss->ss_on;
           syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private;
         sync_control *srs = op->o_controls[slap_cids.sc_LDAPsync];          sync_control *srs = op->o_controls[slap_cids.sc_LDAPsync];
   
         if ( rs->sr_type == REP_SEARCH || rs->sr_type == REP_SEARCHREF ) {          if ( rs->sr_type == REP_SEARCH || rs->sr_type == REP_SEARCHREF ) {
Line 2036  syncprov_search_response( Operation *op, Line 2051  syncprov_search_response( Operation *op,
                 rs->sr_ctrls = op->o_tmpalloc( sizeof(LDAPControl *)*2,                  rs->sr_ctrls = op->o_tmpalloc( sizeof(LDAPControl *)*2,
                         op->o_tmpmemctx );                          op->o_tmpmemctx );
                 rs->sr_ctrls[1] = NULL;                  rs->sr_ctrls[1] = NULL;
                 rs->sr_err = syncprov_state_ctrl( op, rs, rs->sr_entry,                  /* If we're in delta-sync mode, always send a cookie */
                         LDAP_SYNC_ADD, rs->sr_ctrls, 0, 0, NULL );                  if ( si->si_nopres && si->si_usehint && a ) {
                           struct berval cookie;
                           slap_compose_sync_cookie( op, &cookie, a->a_nvals, srs->sr_state.rid, srs->sr_state.sid );
                           rs->sr_err = syncprov_state_ctrl( op, rs, rs->sr_entry,
                                   LDAP_SYNC_ADD, rs->sr_ctrls, 0, 1, &cookie );
                   } else {
                           rs->sr_err = syncprov_state_ctrl( op, rs, rs->sr_entry,
                                   LDAP_SYNC_ADD, rs->sr_ctrls, 0, 0, NULL );
                   }
         } else if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS ) {          } else if ( rs->sr_type == REP_RESULT && rs->sr_err == LDAP_SUCCESS ) {
                 struct berval cookie;                  struct berval cookie;
   
Line 2396  syncprov_operational( Line 2419  syncprov_operational(
   
                                 if ( !ap ) {                                  if ( !ap ) {
                                         if ( !(rs->sr_flags & REP_ENTRY_MODIFIABLE) ) {                                          if ( !(rs->sr_flags & REP_ENTRY_MODIFIABLE) ) {
                                                 rs->sr_entry = entry_dup( rs->sr_entry );                                                  Entry *e = entry_dup( rs->sr_entry );
                                                   if ( rs->sr_flags & REP_ENTRY_MUSTRELEASE ) {
                                                           overlay_entry_release_ov( op, rs->sr_entry, 0, on );
                                                           rs->sr_flags ^= REP_ENTRY_MUSTRELEASE;
                                                   } else if ( rs->sr_flags & REP_ENTRY_MUSTBEFREED ) {
                                                           entry_free( rs->sr_entry );
                                                   }
                                                   rs->sr_entry = e;
                                                 rs->sr_flags |=                                                  rs->sr_flags |=
                                                         REP_ENTRY_MODIFIABLE|REP_ENTRY_MUSTBEFREED;                                                          REP_ENTRY_MODIFIABLE|REP_ENTRY_MUSTBEFREED;
                                                 a = attr_find( rs->sr_entry->e_attrs,                                                  a = attr_find( rs->sr_entry->e_attrs,

Removed from v.1.230  
changed lines
  Added in v.1.236


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