Diff for /servers/slapd/overlays/syncprov.c between versions 1.147.2.11 and 1.204

version 1.147.2.11, 2007/10/18 01:35:12 version 1.204, 2007/10/08 11:28:25
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.147.2.10 2007/09/29 09:55:22 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.203 2007/10/02 21:51:40 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 624  again: Line 624  again:
                                 maxid = i;                                  maxid = i;
                         }                          }
                 }                  }
                 fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN>=%s)",                  fop.ors_filterstr.bv_len = snprintf( buf, sizeof( buf ),
                         cf.f_av_value.bv_val );                          "(entryCSN>=%s)", cf.f_av_value.bv_val );
                   if ( fop.ors_filterstr.bv_len < 0 || fop.ors_filterstr.bv_len >= sizeof( buf ) ) {
                           return LDAP_OTHER;
                   }
                 fop.ors_attrsonly = 0;                  fop.ors_attrsonly = 0;
                 fop.ors_attrs = csn_anlist;                  fop.ors_attrs = csn_anlist;
                 fop.ors_slimit = SLAP_NO_LIMIT;                  fop.ors_slimit = SLAP_NO_LIMIT;
Line 649  again: Line 652  again:
                 /* Look for exact match the first time */                  /* Look for exact match the first time */
                 if ( findcsn_retry ) {                  if ( findcsn_retry ) {
                         cf.f_choice = LDAP_FILTER_EQUALITY;                          cf.f_choice = LDAP_FILTER_EQUALITY;
                         fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN=%s)",                          fop.ors_filterstr.bv_len = snprintf( buf, sizeof( buf ),
                                 cf.f_av_value.bv_val );                                  "(entryCSN=%s)", cf.f_av_value.bv_val );
                 /* 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;                          fop.ors_limit = &fc_limits;
                         memset( &fc_limits, 0, sizeof( fc_limits ));                          memset( &fc_limits, 0, sizeof( fc_limits ));
                         fc_limits.lms_s_unchecked = 1;                          fc_limits.lms_s_unchecked = 1;
                         fop.ors_filterstr.bv_len = sprintf( buf, "(entryCSN<=%s)",                          fop.ors_filterstr.bv_len = snprintf( buf, sizeof( buf ),
                                 cf.f_av_value.bv_val );                                  "(entryCSN<=%s)", cf.f_av_value.bv_val );
                   }
                   if ( fop.ors_filterstr.bv_len < 0 || fop.ors_filterstr.bv_len >= sizeof( buf ) ) {
                           return LDAP_OTHER;
                 }                  }
                 fop.ors_attrsonly = 1;                  fop.ors_attrsonly = 1;
                 fop.ors_attrs = slap_anlist_no_attrs;                  fop.ors_attrs = slap_anlist_no_attrs;
Line 1558  syncprov_op_response( Operation *op, Sla Line 1564  syncprov_op_response( Operation *op, Sla
         {          {
                 struct berval maxcsn = BER_BVNULL;                  struct berval maxcsn = BER_BVNULL;
                 char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];                  char cbuf[LDAP_LUTIL_CSNSTR_BUFSIZE];
                 int do_check = 0, have_psearches;                  int do_check = 0;
   
                 /* Update our context CSN */                  /* Update our context CSN */
                 cbuf[0] = '\0';                  cbuf[0] = '\0';
Line 1617  syncprov_op_response( Operation *op, Sla Line 1623  syncprov_op_response( Operation *op, Sla
                 opc->sctxcsn.bv_val = cbuf;                  opc->sctxcsn.bv_val = cbuf;
   
                 /* Handle any persistent searches */                  /* Handle any persistent searches */
                 ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );                  if ( si->si_ops ) {
                 have_psearches = ( si->si_ops != NULL );  
                 ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );  
                 if ( have_psearches ) {  
                         switch(op->o_tag) {                          switch(op->o_tag) {
                         case LDAP_REQ_ADD:                          case LDAP_REQ_ADD:
                         case LDAP_REQ_MODIFY:                          case LDAP_REQ_MODIFY:
Line 1723  syncprov_op_mod( Operation *op, SlapRepl Line 1726  syncprov_op_mod( Operation *op, SlapRepl
 {  {
         slap_overinst           *on = (slap_overinst *)op->o_bd->bd_info;          slap_overinst           *on = (slap_overinst *)op->o_bd->bd_info;
         syncprov_info_t         *si = on->on_bi.bi_private;          syncprov_info_t         *si = on->on_bi.bi_private;
         slap_callback *cb;  
         opcookie *opc;  
         int have_psearches, cbsize;  
   
         ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );  
         have_psearches = ( si->si_ops != NULL );  
         ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );  
   
         cbsize = sizeof(slap_callback) + sizeof(opcookie) +          slap_callback *cb = op->o_tmpcalloc(1, sizeof(slap_callback)+
                 (have_psearches ? sizeof(modinst) : 0 );                  sizeof(opcookie) +
                   (si->si_ops ? sizeof(modinst) : 0 ),
         cb = op->o_tmpcalloc(1, cbsize, op->o_tmpmemctx);                  op->o_tmpmemctx);
         opc = (opcookie *)(cb+1);          opcookie *opc = (opcookie *)(cb+1);
         opc->son = on;          opc->son = on;
         cb->sc_response = syncprov_op_response;          cb->sc_response = syncprov_op_response;
         cb->sc_cleanup = syncprov_op_cleanup;          cb->sc_cleanup = syncprov_op_cleanup;
Line 1746  syncprov_op_mod( Operation *op, SlapRepl Line 1742  syncprov_op_mod( Operation *op, SlapRepl
         /* 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.
          */           */
         if ( have_psearches ) {          if ( si->si_ops ) {
                 modtarget *mt, mtdummy;                  modtarget *mt, mtdummy;
                 modinst *mi;                  modinst *mi;
   
Line 1793  syncprov_op_mod( Operation *op, SlapRepl Line 1789  syncprov_op_mod( Operation *op, SlapRepl
                 }                  }
         }          }
   
         if (( have_psearches || si->si_logs ) && op->o_tag != LDAP_REQ_ADD )          if (( si->si_ops || si->si_logs ) && op->o_tag != LDAP_REQ_ADD )
                 syncprov_matchops( op, opc, 1 );                  syncprov_matchops( op, opc, 1 );
   
         return SLAP_CB_CONTINUE;          return SLAP_CB_CONTINUE;
Line 1962  syncprov_search_response( Operation *op, Line 1958  syncprov_search_response( Operation *op,
                                         rs->sr_entry->e_name.bv_val, 0, 0 );                                          rs->sr_entry->e_name.bv_val, 0, 0 );
                                 return LDAP_SUCCESS;                                  return LDAP_SUCCESS;
                         }                          }
                           /* Make sure entry is less than the snapshot'd contextCSN */
                         /* If not a persistent search */                          for ( i=0; i<ss->ss_numcsns; i++ ) {
                         if ( !ss->ss_so ) {                                  if ( sid == ss->ss_sids[i] && ber_bvcmp( &a->a_nvals[0],
                                 /* Make sure entry is less than the snapshot'd contextCSN */                                          &ss->ss_ctxcsn[i] ) > 0 ) {
                                 for ( i=0; i<ss->ss_numcsns; i++ ) {                                          Debug( LDAP_DEBUG_SYNC,
                                         if ( sid == ss->ss_sids[i] && ber_bvcmp( &a->a_nvals[0],                                                  "Entry %s CSN %s greater than snapshot %s\n",
                                                 &ss->ss_ctxcsn[i] ) > 0 ) {                                                  rs->sr_entry->e_name.bv_val,
                                                 Debug( LDAP_DEBUG_SYNC,                                                  a->a_nvals[0].bv_val,
                                                         "Entry %s CSN %s greater than snapshot %s\n",                                                  ss->ss_ctxcsn[i].bv_val );
                                                         rs->sr_entry->e_name.bv_val,                                          return LDAP_SUCCESS;
                                                         a->a_nvals[0].bv_val,  
                                                         ss->ss_ctxcsn[i].bv_val );  
                                                 return LDAP_SUCCESS;  
                                         }  
                                 }                                  }
                         }                          }
   
Line 2400  sp_cf_gen(ConfigArgs *c) Line 2392  sp_cf_gen(ConfigArgs *c)
                 case SP_CHKPT:                  case SP_CHKPT:
                         if ( si->si_chkops || si->si_chktime ) {                          if ( si->si_chkops || si->si_chktime ) {
                                 struct berval bv;                                  struct berval bv;
                                 bv.bv_len = sprintf( c->cr_msg, "%d %d",                                  bv.bv_len = snprintf( c->cr_msg, sizeof( c->cr_msg ),
                                         si->si_chkops, si->si_chktime );                                          "%d %d", si->si_chkops, si->si_chktime );
                                 bv.bv_val = c->cr_msg;                                  if ( bv.bv_len < 0 || bv.bv_len >= sizeof( c->cr_msg ) ) {
                                 value_add_one( &c->rvalue_vals, &bv );                                          rc = 1;
                                   } else {
                                           bv.bv_val = c->cr_msg;
                                           value_add_one( &c->rvalue_vals, &bv );
                                   }
                         } else {                          } else {
                                 rc = 1;                                  rc = 1;
                         }                          }

Removed from v.1.147.2.11  
changed lines
  Added in v.1.204


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