Diff for /servers/slapd/overlays/syncprov.c between versions 1.31 and 1.34

version 1.31, 2004/11/27 19:34:12 version 1.34, 2004/11/29 05:51:44
Line 131  syncprov_state_ctrl( Line 131  syncprov_state_ctrl(
         Operation       *op,          Operation       *op,
         SlapReply       *rs,          SlapReply       *rs,
         Entry           *e,          Entry           *e,
         int                     entry_sync_state,          int             entry_sync_state,
         LDAPControl     **ctrls,          LDAPControl     **ctrls,
         int                     num_ctrls,          int             num_ctrls,
         int                     send_cookie,          int             send_cookie,
         struct berval   *cookie)          struct berval   *cookie )
 {  {
         Attribute* a;          Attribute* a;
         int ret;          int ret;
Line 145  syncprov_state_ctrl( Line 145  syncprov_state_ctrl(
         BerElementBuffer berbuf;          BerElementBuffer berbuf;
         BerElement *ber = (BerElement *)&berbuf;          BerElement *ber = (BerElement *)&berbuf;
   
         struct berval entryuuid_bv      = BER_BVNULL;          struct berval   entryuuid_bv = BER_BVNULL;
   
         ber_init2( ber, 0, LBER_USE_DER );          ber_init2( ber, 0, LBER_USE_DER );
         ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );          ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );
Line 212  syncprov_done_ctrl( Line 212  syncprov_done_ctrl(
         if ( refreshDeletes == LDAP_SYNC_REFRESH_DELETES ) {          if ( refreshDeletes == LDAP_SYNC_REFRESH_DELETES ) {
                 ber_printf( ber, "b", refreshDeletes );                  ber_printf( ber, "b", refreshDeletes );
         }          }
         ber_printf( ber, "N}" );                  ber_printf( ber, "N}" );
   
         ctrls[num_ctrls]->ldctl_oid = LDAP_CONTROL_SYNC_DONE;          ctrls[num_ctrls]->ldctl_oid = LDAP_CONTROL_SYNC_DONE;
         ctrls[num_ctrls]->ldctl_iscritical = (op->o_sync == SLAP_CONTROL_CRITICAL);          ctrls[num_ctrls]->ldctl_iscritical = (op->o_sync == SLAP_CONTROL_CRITICAL);
Line 427  findbase_cb( Operation *op, SlapReply *r Line 427  findbase_cb( Operation *op, SlapReply *r
                         }                          }
                 }                  }
         }          }
           if ( rs->sr_err != LDAP_SUCCESS ) {
                   Debug( LDAP_DEBUG_ANY, "findbase failed! %d\n", rs->sr_err,0,0 );
           }
         return LDAP_SUCCESS;          return LDAP_SUCCESS;
 }  }
   
Line 452  syncprov_findbase( Operation *op, fbase_ Line 455  syncprov_findbase( Operation *op, fbase_
         fop.o_tag = LDAP_REQ_SEARCH;          fop.o_tag = LDAP_REQ_SEARCH;
         fop.ors_scope = LDAP_SCOPE_BASE;          fop.ors_scope = LDAP_SCOPE_BASE;
         fop.ors_deref = fc->fss->s_op->ors_deref;          fop.ors_deref = fc->fss->s_op->ors_deref;
           fop.ors_limit = NULL;
         fop.ors_slimit = 1;          fop.ors_slimit = 1;
         fop.ors_tlimit = SLAP_NO_LIMIT;          fop.ors_tlimit = SLAP_NO_LIMIT;
         fop.ors_attrs = slap_anlist_no_attrs;          fop.ors_attrs = slap_anlist_no_attrs;
Line 595  syncprov_findcsn( Operation *op, int mod Line 599  syncprov_findcsn( Operation *op, int mod
                 srs->sr_state.ctxcsn->bv_val );                  srs->sr_state.ctxcsn->bv_val );
   
         fop.o_callback = &cb;          fop.o_callback = &cb;
           fop.ors_limit = NULL;
         fop.ors_tlimit = SLAP_NO_LIMIT;          fop.ors_tlimit = SLAP_NO_LIMIT;
         fop.ors_filter = &cf;          fop.ors_filter = &cf;
         fop.ors_filterstr = fbuf;          fop.ors_filterstr = fbuf;
Line 790  syncprov_matchops( Operation *op, opcook Line 795  syncprov_matchops( Operation *op, opcook
         Attribute *a;          Attribute *a;
         int rc;          int rc;
         struct berval newdn;          struct berval newdn;
           int freefdn = 0;
   
         fc.fdn = &op->o_req_ndn;          fc.fdn = &op->o_req_ndn;
         /* compute new DN */          /* compute new DN */
Line 799  syncprov_matchops( Operation *op, opcook Line 805  syncprov_matchops( Operation *op, opcook
                 else dnParent( fc.fdn, &pdn );                  else dnParent( fc.fdn, &pdn );
                 build_new_dn( &newdn, &pdn, &op->orr_nnewrdn, op->o_tmpmemctx );                  build_new_dn( &newdn, &pdn, &op->orr_nnewrdn, op->o_tmpmemctx );
                 fc.fdn = &newdn;                  fc.fdn = &newdn;
                   freefdn = 1;
         }          }
         if ( op->o_tag != LDAP_REQ_ADD ) {          if ( op->o_tag != LDAP_REQ_ADD ) {
                 op->o_bd->bd_info = (BackendInfo *)on->on_info;                  op->o_bd->bd_info = (BackendInfo *)on->on_info;
Line 809  syncprov_matchops( Operation *op, opcook Line 816  syncprov_matchops( Operation *op, opcook
                 e = op->ora_e;                  e = op->ora_e;
         }          }
   
           /* Never replicate these */
           if ( is_entry_syncConsumerSubentry( e )) {
                   goto done;
           }
         if ( saveit ) {          if ( saveit ) {
                 ber_dupbv_x( &opc->sdn, &e->e_name, op->o_tmpmemctx );                  ber_dupbv_x( &opc->sdn, &e->e_name, op->o_tmpmemctx );
                 ber_dupbv_x( &opc->sndn, &e->e_nname, op->o_tmpmemctx );                  ber_dupbv_x( &opc->sndn, &e->e_nname, op->o_tmpmemctx );
Line 878  syncprov_matchops( Operation *op, opcook Line 889  syncprov_matchops( Operation *op, opcook
                 }                  }
         }          }
         ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );          ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
   done:
         if ( op->o_tag != LDAP_REQ_ADD ) {          if ( op->o_tag != LDAP_REQ_ADD ) {
                 op->o_bd->bd_info = (BackendInfo *)on->on_info;                  op->o_bd->bd_info = (BackendInfo *)on->on_info;
                 be_entry_release_r( op, e );                  be_entry_release_r( op, e );
                 op->o_bd->bd_info = (BackendInfo *)on;                  op->o_bd->bd_info = (BackendInfo *)on;
         }          }
           if ( freefdn ) {
                   op->o_tmpfree( fc.fdn->bv_val, op->o_tmpmemctx );
           }
 }  }
   
 static int  static int
Line 908  syncprov_op_cleanup( Operation *op, Slap Line 923  syncprov_op_cleanup( Operation *op, Slap
         ldap_pvt_thread_rdwr_runlock( &si->si_mods_rwlock );          ldap_pvt_thread_rdwr_runlock( &si->si_mods_rwlock );
         if ( mt ) {          if ( mt ) {
                 modinst *mi = mt->mt_mods;                  modinst *mi = mt->mt_mods;
                   
                 /* If there are more, promote the next one */                  /* If there are more, promote the next one */
                 ldap_pvt_thread_mutex_lock( &mt->mt_mutex );                  ldap_pvt_thread_mutex_lock( &mt->mt_mutex );
                 if ( mi->mi_next ) {                  if ( mi->mi_next ) {
Line 924  syncprov_op_cleanup( Operation *op, Slap Line 939  syncprov_op_cleanup( Operation *op, Slap
                         ch_free( mt );                          ch_free( mt );
                 }                  }
         }          }
           if ( !BER_BVISNULL( &opc->suuid ))
                   op->o_tmpfree( opc->suuid.bv_val, op->o_tmpmemctx );
           if ( !BER_BVISNULL( &opc->sndn ))
                   op->o_tmpfree( opc->sndn.bv_val, op->o_tmpmemctx );
           if ( !BER_BVISNULL( &opc->sdn ))
                   op->o_tmpfree( opc->sdn.bv_val, op->o_tmpmemctx );
         op->o_callback = cb->sc_next;          op->o_callback = cb->sc_next;
         op->o_tmpfree(cb, op->o_tmpmemctx);          op->o_tmpfree(cb, op->o_tmpmemctx);
 }  }
Line 990  syncprov_op_response( Operation *op, Sla Line 1011  syncprov_op_response( Operation *op, Sla
                                 do_check = 1;                                  do_check = 1;
                                 si->si_numops = 0;                                  si->si_numops = 0;
                         }                          }
                         if ( si->si_chktime &&                           if ( si->si_chktime &&
                                 (op->o_time - si->si_chklast >= si->si_chktime )) {                                  (op->o_time - si->si_chklast >= si->si_chktime )) {
                                 do_check = 1;                                  do_check = 1;
                                 si->si_chklast = op->o_time;                                  si->si_chklast = op->o_time;
Line 1102  return_results:; Line 1123  return_results:;
   
         return rc;          return rc;
 }  }
           
 static int  static int
 syncprov_op_mod( Operation *op, SlapReply *rs )  syncprov_op_mod( Operation *op, SlapReply *rs )
 {  {
Line 1258  syncprov_search_response( Operation *op, Line 1279  syncprov_search_response( Operation *op,
   
         if ( rs->sr_type == REP_SEARCH || rs->sr_type == REP_SEARCHREF ) {          if ( rs->sr_type == REP_SEARCH || rs->sr_type == REP_SEARCHREF ) {
                 int i;                  int i;
                   /* If we got a referral without a referral object, there's
                    * something missing that we cannot replicate. Just ignore it.
                    * The consumer will abort because we didn't send the expected
                    * control.
                    */
                   if ( !rs->sr_entry ) {
                           assert( rs->sr_entry );
                           Debug( LDAP_DEBUG_ANY, "bogus referral in context\n",0,0,0 );
                           return SLAP_CB_CONTINUE;
                   }
                 if ( srs->sr_state.ctxcsn ) {                  if ( srs->sr_state.ctxcsn ) {
                         Attribute *a = attr_find( rs->sr_entry->e_attrs,                          Attribute *a = attr_find( rs->sr_entry->e_attrs,
                                 slap_schema.si_ad_entryCSN );                                  slap_schema.si_ad_entryCSN );
Line 1308  syncprov_search_response( Operation *op, Line 1339  syncprov_search_response( Operation *op,
                                         opc.sctxcsn = sr->s_csn;                                          opc.sctxcsn = sr->s_csn;
                                         opc.sreference = sr->s_isreference;                                          opc.sreference = sr->s_isreference;
                                         e = NULL;                                          e = NULL;
                                           
                                         if ( sr->s_mode != LDAP_SYNC_DELETE ) {                                          if ( sr->s_mode != LDAP_SYNC_DELETE ) {
                                                 op->o_bd->bd_info = (BackendInfo *)on->on_info;                                                  op->o_bd->bd_info = (BackendInfo *)on->on_info;
                                                 rc = be_entry_get_rw( op, &opc.sndn, NULL, NULL, 0, &e );                                                  rc = be_entry_get_rw( op, &opc.sndn, NULL, NULL, 0, &e );
Line 1437  syncprov_op_search( Operation *op, SlapR Line 1468  syncprov_op_search( Operation *op, SlapR
                                         return rs->sr_err;                                          return rs->sr_err;
                                 }                                  }
                                 goto shortcut;                                  goto shortcut;
                         } else                           } else
                         /* If context has changed, check for Present UUIDs */                          /* If context has changed, check for Present UUIDs */
                         if ( syncprov_findcsn( op, FIND_PRESENT ) != LDAP_SUCCESS ) {                          if ( syncprov_findcsn( op, FIND_PRESENT ) != LDAP_SUCCESS ) {
                                 send_ldap_result( op, rs );                                  send_ldap_result( op, rs );
Line 1520  syncprov_operational( Line 1551  syncprov_operational(
                         ad_inlist( slap_schema.si_ad_contextCSN, rs->sr_attrs )) {                          ad_inlist( slap_schema.si_ad_contextCSN, rs->sr_attrs )) {
                         Attribute *a, **ap = NULL;                          Attribute *a, **ap = NULL;
   
                           
                         for ( a=rs->sr_entry->e_attrs; a; a=a->a_next ) {                          for ( a=rs->sr_entry->e_attrs; a; a=a->a_next ) {
                                 if ( a->a_desc == slap_schema.si_ad_contextCSN )                                  if ( a->a_desc == slap_schema.si_ad_contextCSN )
                                         break;                                          break;
Line 1603  syncprov_db_open( Line 1633  syncprov_db_open(
     BackendDB *be      BackendDB *be
 )  )
 {  {
     slap_overinst   *on = (slap_overinst *) be->bd_info;          slap_overinst   *on = (slap_overinst *) be->bd_info;
     syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private;          syncprov_info_t *si = (syncprov_info_t *)on->on_bi.bi_private;
   
         char opbuf[OPERATION_BUFFER_SIZE];          char opbuf[OPERATION_BUFFER_SIZE];
         Operation *op = (Operation *)opbuf;          Operation *op = (Operation *)opbuf;
Line 1636  syncprov_db_open( Line 1666  syncprov_db_open(
                 }                  }
                 be_entry_release_r( op, e );                  be_entry_release_r( op, e );
         }          }
   
           if ( BER_BVISEMPTY( &si->si_ctxcsn ) ) {
                   slap_get_csn( op, si->si_ctxcsnbuf, sizeof(si->si_ctxcsnbuf),
                                   &si->si_ctxcsn, 0 );
           }
   
         op->o_bd->bd_info = (BackendInfo *)on;          op->o_bd->bd_info = (BackendInfo *)on;
     return 0;          return 0;
 }  }
   
 /* Write the current contextCSN into the underlying db.  /* Write the current contextCSN into the underlying db.

Removed from v.1.31  
changed lines
  Added in v.1.34


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