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

version 1.33, 2004/11/29 04:54:55 version 1.34, 2004/11/29 05:51:44
Line 151  syncprov_state_ctrl( Line 151  syncprov_state_ctrl(
         ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );          ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );
   
         ctrls[num_ctrls] = op->o_tmpalloc( sizeof ( LDAPControl ), op->o_tmpmemctx );          ctrls[num_ctrls] = op->o_tmpalloc( sizeof ( LDAPControl ), op->o_tmpmemctx );
           
         for ( a = e->e_attrs; a != NULL; a = a->a_next ) {          for ( a = e->e_attrs; a != NULL; a = a->a_next ) {
                 AttributeDescription *desc = a->a_desc;                  AttributeDescription *desc = a->a_desc;
                 if ( desc == slap_schema.si_ad_entryUUID ) {                  if ( desc == slap_schema.si_ad_entryUUID ) {
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 795  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 804  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 814  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 883  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 913  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 929  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 995  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 1107  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 1263  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 1313  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 1442  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 1525  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 1646  syncprov_db_open( Line 1671  syncprov_db_open(
                 slap_get_csn( op, si->si_ctxcsnbuf, sizeof(si->si_ctxcsnbuf),                  slap_get_csn( op, si->si_ctxcsnbuf, sizeof(si->si_ctxcsnbuf),
                                 &si->si_ctxcsn, 0 );                                  &si->si_ctxcsn, 0 );
         }          }
           
         op->o_bd->bd_info = (BackendInfo *)on;          op->o_bd->bd_info = (BackendInfo *)on;
         return 0;          return 0;
 }  }

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


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