Diff for /servers/slapd/overlays/syncprov.c between versions 1.147.2.3 and 1.157

version 1.147.2.3, 2006/10/19 20:06:55 version 1.157, 2006/08/15 10:37:59
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.147.2.2 2006/08/17 23:50:32 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.156 2006/08/15 07:28:25 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 65  typedef struct syncops { Line 65  typedef struct syncops {
 #define PS_IS_DETACHED          0x02  #define PS_IS_DETACHED          0x02
 #define PS_WROTE_BASE           0x04  #define PS_WROTE_BASE           0x04
 #define PS_FIND_BASE            0x08  #define PS_FIND_BASE            0x08
 #define PS_FIX_FILTER           0x10  
   
         int             s_inuse;        /* reference count */          int             s_inuse;        /* reference count */
         struct syncres *s_res;          struct syncres *s_res;
Line 774  syncprov_sendresp( Operation *op, opcook Line 773  syncprov_sendresp( Operation *op, opcook
                         rs.sr_flags = REP_ENTRY_MUSTRELEASE;                          rs.sr_flags = REP_ENTRY_MUSTRELEASE;
                 if ( opc->sreference ) {                  if ( opc->sreference ) {
                         rs.sr_ref = get_entry_referrals( op, rs.sr_entry );                          rs.sr_ref = get_entry_referrals( op, rs.sr_entry );
                         rs.sr_err = send_search_reference( op, &rs );                          send_search_reference( op, &rs );
                         ber_bvarray_free( rs.sr_ref );                          ber_bvarray_free( rs.sr_ref );
                         if ( !rs.sr_entry )                          if ( !rs.sr_entry )
                                 *e = NULL;                                  *e = NULL;
Line 786  syncprov_sendresp( Operation *op, opcook Line 785  syncprov_sendresp( Operation *op, opcook
                 if ( rs.sr_entry->e_private )                  if ( rs.sr_entry->e_private )
                         rs.sr_flags = REP_ENTRY_MUSTRELEASE;                          rs.sr_flags = REP_ENTRY_MUSTRELEASE;
                 rs.sr_attrs = op->ors_attrs;                  rs.sr_attrs = op->ors_attrs;
                 rs.sr_err = send_search_entry( op, &rs );                  send_search_entry( op, &rs );
                 if ( !rs.sr_entry )                  if ( !rs.sr_entry )
                         *e = NULL;                          *e = NULL;
                 break;                  break;
Line 798  syncprov_sendresp( Operation *op, opcook Line 797  syncprov_sendresp( Operation *op, opcook
                 if ( opc->sreference ) {                  if ( opc->sreference ) {
                         struct berval bv = BER_BVNULL;                          struct berval bv = BER_BVNULL;
                         rs.sr_ref = &bv;                          rs.sr_ref = &bv;
                         rs.sr_err = send_search_reference( op, &rs );                          send_search_reference( op, &rs );
                 } else {                  } else {
                         rs.sr_err = send_search_entry( op, &rs );                          send_search_entry( op, &rs );
                 }                  }
                 break;                  break;
         default:          default:
Line 878  syncprov_qtask( void *ctx, void *arg ) Line 877  syncprov_qtask( void *ctx, void *arg )
         OperationBuffer opbuf;          OperationBuffer opbuf;
         Operation *op;          Operation *op;
         BackendDB be;          BackendDB be;
         int rc;  
   
         op = (Operation *) &opbuf;          op = (Operation *) &opbuf;
         *op = *so->s_op;          *op = *so->s_op;
Line 899  syncprov_qtask( void *ctx, void *arg ) Line 897  syncprov_qtask( void *ctx, void *arg )
         op->o_private = NULL;          op->o_private = NULL;
         op->o_callback = NULL;          op->o_callback = NULL;
   
         rc = syncprov_qplay( op, on, so );          (void)syncprov_qplay( op, on, so );
   
         /* decrement use count... */          /* decrement use count... */
         syncprov_free_syncop( so );          syncprov_free_syncop( so );
   
         /* wait until we get explicitly scheduled again */          /* wait until we get explicitly scheduled again */
         ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );          ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
         ldap_pvt_runqueue_stoptask( &slapd_rq, rtask );          ldap_pvt_runqueue_stoptask( &slapd_rq, so->s_qtask );
         if ( rc == 0 ) {          ldap_pvt_runqueue_resched( &slapd_rq, so->s_qtask, 1 );
                 ldap_pvt_runqueue_resched( &slapd_rq, rtask, 1 );  
         } else {  
                 /* bail out on any error */  
                 ldap_pvt_runqueue_remove( &slapd_rq, rtask );  
         }  
         ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );          ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
   
 #if 0   /* FIXME: connection_close isn't exported from slapd.  
                  * should it be?  
                  */  
         if ( rc ) {  
                 ldap_pvt_thread_mutex_lock( &op->o_conn->c_mutex );  
                 if ( connection_state_closing( op->o_conn )) {  
                         connection_close( op->o_conn );  
                 }  
                 ldap_pvt_thread_mutex_unlock( &op->o_conn->c_mutex );  
         }  
 #endif  
         return NULL;          return NULL;
 }  }
   
Line 1810  syncprov_detach_op( Operation *op, synco Line 1792  syncprov_detach_op( Operation *op, synco
         op2->ors_filterstr.bv_val = ptr;          op2->ors_filterstr.bv_val = ptr;
         strcpy( ptr, so->s_filterstr.bv_val );          strcpy( ptr, so->s_filterstr.bv_val );
         op2->ors_filterstr.bv_len = so->s_filterstr.bv_len;          op2->ors_filterstr.bv_len = so->s_filterstr.bv_len;
           op2->ors_filter = filter_dup( op->ors_filter, NULL );
         /* Skip the AND/GE clause that we stuck on in front */  
         if ( so->s_flags & PS_FIX_FILTER ) {  
                 op2->ors_filter = op->ors_filter->f_and->f_next;  
                 so->s_flags ^= PS_FIX_FILTER;  
         } else {  
                 op2->ors_filter = op->ors_filter;  
         }  
         op2->ors_filter = filter_dup( op2->ors_filter, NULL );  
         so->s_op = op2;          so->s_op = op2;
   
         /* Copy any cached group ACLs individually */          /* Copy any cached group ACLs individually */
Line 2090  shortcut: Line 2064  shortcut:
                 fava->f_next = op->ors_filter;                  fava->f_next = op->ors_filter;
                 op->ors_filter = fand;                  op->ors_filter = fand;
                 filter2bv_x( op, op->ors_filter, &op->ors_filterstr );                  filter2bv_x( op, op->ors_filter, &op->ors_filterstr );
                 if ( sop )  
                         sop->s_flags |= PS_FIX_FILTER;  
         }          }
   
         /* Let our callback add needed info to returned entries */          /* Let our callback add needed info to returned entries */
Line 2149  syncprov_operational( Line 2121  syncprov_operational(
                         if ( !a ) {                          if ( !a ) {
                                 for ( ap = &rs->sr_operational_attrs; *ap; ap=&(*ap)->a_next );                                  for ( ap = &rs->sr_operational_attrs; *ap; ap=&(*ap)->a_next );
   
                                 a = attr_alloc( slap_schema.si_ad_contextCSN );                                  a = ch_malloc( sizeof(Attribute));
                                   a->a_desc = slap_schema.si_ad_contextCSN;
                                 a->a_vals = ch_malloc( 2 * sizeof(struct berval));                                  a->a_vals = ch_malloc( 2 * sizeof(struct berval));
                                 a->a_vals[1].bv_val = NULL;                                  a->a_vals[1].bv_val = NULL;
                                 a->a_nvals = a->a_vals;                                  a->a_nvals = a->a_vals;
                                   a->a_next = NULL;
                                   a->a_flags = 0;
                                 *ap = a;                                  *ap = a;
                         }                          }
   

Removed from v.1.147.2.3  
changed lines
  Added in v.1.157


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