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

version 1.200, 2007/09/24 03:02:32 version 1.204, 2007/10/08 11:28:25
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.199 2007/09/23 23:31:24 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 770  syncprov_sendresp( Operation *op, opcook Line 776  syncprov_sendresp( Operation *op, opcook
         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, so->s_sid );
   
           Debug( LDAP_DEBUG_SYNC, "syncprov_sendresp: cookie=%s\n", cookie.bv_val, 0, 0 );
   
         e_uuid.e_attrs = &a_uuid;          e_uuid.e_attrs = &a_uuid;
         a_uuid.a_desc = slap_schema.si_ad_entryUUID;          a_uuid.a_desc = slap_schema.si_ad_entryUUID;
         a_uuid.a_nvals = &opc->suuid;          a_uuid.a_nvals = &opc->suuid;
Line 974  static int Line 982  static int
 syncprov_qresp( opcookie *opc, syncops *so, int mode )  syncprov_qresp( opcookie *opc, syncops *so, int mode )
 {  {
         syncres *sr;          syncres *sr;
         int sid;          int sid, srsize;
   
         /* Don't send changes back to their originator */          /* Don't send changes back to their originator */
         sid = slap_parse_csn_sid( &opc->sctxcsn );          sid = slap_parse_csn_sid( &opc->sctxcsn );
         if ( sid >= 0 && sid == so->s_sid )          if ( sid >= 0 && sid == so->s_sid )
                 return LDAP_SUCCESS;                  return LDAP_SUCCESS;
   
         sr = ch_malloc(sizeof(syncres) + opc->suuid.bv_len + 1 +          srsize = sizeof(syncres) + opc->suuid.bv_len + 1 +
                 opc->sdn.bv_len + 1 + opc->sndn.bv_len + 1 + opc->sctxcsn.bv_len + 1 );                  opc->sdn.bv_len + 1 + opc->sndn.bv_len + 1;
           if ( opc->sctxcsn.bv_len )
                   srsize += opc->sctxcsn.bv_len + 1;
           sr = ch_malloc( srsize );
         sr->s_next = NULL;          sr->s_next = NULL;
         sr->s_dn.bv_val = (char *)(sr + 1);          sr->s_dn.bv_val = (char *)(sr + 1);
         sr->s_dn.bv_len = opc->sdn.bv_len;          sr->s_dn.bv_len = opc->sdn.bv_len;
Line 995  syncprov_qresp( opcookie *opc, syncops * Line 1006  syncprov_qresp( opcookie *opc, syncops *
                  opc->sndn.bv_val ) + 1;                   opc->sndn.bv_val ) + 1;
         sr->s_uuid.bv_len = opc->suuid.bv_len;          sr->s_uuid.bv_len = opc->suuid.bv_len;
         AC_MEMCPY( sr->s_uuid.bv_val, opc->suuid.bv_val, opc->suuid.bv_len );          AC_MEMCPY( sr->s_uuid.bv_val, opc->suuid.bv_val, opc->suuid.bv_len );
         sr->s_csn.bv_val = sr->s_uuid.bv_val + sr->s_uuid.bv_len + 1;          if ( opc->sctxcsn.bv_len ) {
                   sr->s_csn.bv_val = sr->s_uuid.bv_val + sr->s_uuid.bv_len + 1;
                   strcpy( sr->s_csn.bv_val, opc->sctxcsn.bv_val );
           } else {
                   sr->s_csn.bv_val = NULL;
           }
         sr->s_csn.bv_len = opc->sctxcsn.bv_len;          sr->s_csn.bv_len = opc->sctxcsn.bv_len;
         strcpy( sr->s_csn.bv_val, opc->sctxcsn.bv_val );  
   
         ldap_pvt_thread_mutex_lock( &so->s_mutex );          ldap_pvt_thread_mutex_lock( &so->s_mutex );
         if ( !so->s_res ) {          if ( !so->s_res ) {
Line 1527  syncprov_playlog( Operation *op, SlapRep Line 1542  syncprov_playlog( Operation *op, SlapRep
   
                 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 );                          srs->sr_state.sid );
   
                   Debug( LDAP_DEBUG_SYNC, "syncprov_playlog: cookie=%s\n", cookie.bv_val, 0, 0 );
   
                 uuids[ndel].bv_val = NULL;                  uuids[ndel].bv_val = NULL;
                 syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, &cookie, 0, uuids, 1 );                  syncprov_sendinfo( op, rs, LDAP_TAG_SYNC_ID_SET, &cookie, 0, uuids, 1 );
                 op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );                  op->o_tmpfree( cookie.bv_val, op->o_tmpmemctx );
Line 1980  syncprov_search_response( Operation *op, Line 1998  syncprov_search_response( Operation *op,
                 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, srs->sr_state.sid );
   
                   Debug( LDAP_DEBUG_SYNC, "syncprov_search_response: cookie=%s\n", cookie.bv_val, 0, 0 );
   
                 /* Is this a regular refresh? */                  /* Is this a regular refresh? */
                 if ( !ss->ss_so ) {                  if ( !ss->ss_so ) {
                         rs->sr_ctrls = op->o_tmpalloc( sizeof(LDAPControl *)*2,                          rs->sr_ctrls = op->o_tmpalloc( sizeof(LDAPControl *)*2,
Line 2188  no_change:  nochange = 1; Line 2208  no_change:  nochange = 1;
                         if ( si->si_usehint && srs->sr_rhint == 0 ) {                          if ( si->si_usehint && srs->sr_rhint == 0 ) {
                                 if ( ctxcsn )                                  if ( ctxcsn )
                                         ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx );                                          ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx );
                                   if ( sids )
                                           op->o_tmpfree( sids, op->o_tmpmemctx );
                                 send_ldap_error( op, rs, LDAP_SYNC_REFRESH_REQUIRED, "sync cookie is stale" );                                  send_ldap_error( op, rs, LDAP_SYNC_REFRESH_REQUIRED, "sync cookie is stale" );
                                 return rs->sr_err;                                  return rs->sr_err;
                         }                          }
Line 2198  no_change:  nochange = 1; Line 2220  no_change:  nochange = 1;
                                 LDAP_SUCCESS ) {                                  LDAP_SUCCESS ) {
                                 if ( ctxcsn )                                  if ( ctxcsn )
                                         ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx );                                          ber_bvarray_free_x( ctxcsn, op->o_tmpmemctx );
                                   if ( sids )
                                           op->o_tmpfree( sids, op->o_tmpmemctx );
                                 send_ldap_result( op, rs );                                  send_ldap_result( op, rs );
                                 return rs->sr_err;                                  return rs->sr_err;
                         }                          }
Line 2368  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.200  
changed lines
  Added in v.1.204


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