Diff for /servers/slapd/overlays/syncprov.c between versions 1.54 and 1.56

version 1.54, 2004/12/10 00:50:16 version 1.56, 2004/12/10 02:18:33
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.53 2004/12/10 00:35:34 hyc Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/syncprov.c,v 1.55 2004/12/10 01:51:34 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 1744  syncprov_op_search( Operation *op, SlapR Line 1744  syncprov_op_search( Operation *op, SlapR
                 sop->s_sid = srs->sr_state.sid;                  sop->s_sid = srs->sr_state.sid;
                 sop->s_rid = srs->sr_state.rid;                  sop->s_rid = srs->sr_state.rid;
                 sop->s_inuse = 1;                  sop->s_inuse = 1;
   
                   ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );
                   sop->s_next = si->si_ops;
                   si->si_ops = sop;
                   ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );
         }          }
   
         /* snapshot the ctxcsn */          /* snapshot the ctxcsn */
Line 1756  syncprov_op_search( Operation *op, SlapR Line 1761  syncprov_op_search( Operation *op, SlapR
         /* If we have a cookie, handle the PRESENT lookups */          /* If we have a cookie, handle the PRESENT lookups */
         if ( srs->sr_state.ctxcsn ) {          if ( srs->sr_state.ctxcsn ) {
                 sessionlog *sl;                  sessionlog *sl;
                 int valid = 0;  
   
                 /* Is the CSN in a valid format? */                  /* The cookie was validated when it was parsed, just use it */
                 /* FIXME: should use csnValidate when that is implemented */  
                 while (!valid) {  
                         char *ptr;  
                         struct berval timestamp;  
                         slap_syntax_validate_func *validate;  
                         AttributeDescription *ad = slap_schema.si_ad_modifyTimestamp;  
   
                         if ( srs->sr_state.ctxcsn->bv_len >= LDAP_LUTIL_CSNSTR_BUFSIZE )  
                                 break;  
                         ptr = strchr( srs->sr_state.ctxcsn->bv_val, '#' );  
                         if ( !ptr )  
                                 break;  
                         timestamp.bv_val = srs->sr_state.ctxcsn->bv_val;  
                         timestamp.bv_len = ptr - timestamp.bv_val;  
                         validate = ad->ad_type->sat_syntax->ssyn_validate;  
                         if ( validate( ad->ad_type->sat_syntax, &timestamp ))  
                                 break;  
                         valid = 1;  
                 }  
                 if ( !valid ) {  
                         if ( sop ) ch_free( sop );  
                         send_ldap_error( op, rs, LDAP_OTHER, "invalid sync cookie" );  
                         return rs->sr_err;  
                 }  
                 /* If just Refreshing and nothing has changed, shortcut it */                  /* If just Refreshing and nothing has changed, shortcut it */
                 if ( bvmatch( srs->sr_state.ctxcsn, &ctxcsn )) {                  if ( bvmatch( srs->sr_state.ctxcsn, &ctxcsn )) {
                         nochange = 1;                          nochange = 1;
Line 1840  shortcut: Line 1821  shortcut:
          */           */
         if ( sop ) {          if ( sop ) {
                 sop->s_filterstr= op->ors_filterstr;                  sop->s_filterstr= op->ors_filterstr;
   
                 /* insert record of psearch now */  
                 ldap_pvt_thread_mutex_lock( &si->si_ops_mutex );  
                 sop->s_next = si->si_ops;  
                 si->si_ops = sop;  
                 ldap_pvt_thread_mutex_unlock( &si->si_ops_mutex );  
         }          }
   
         fand = op->o_tmpalloc( sizeof(Filter), op->o_tmpmemctx );          fand = op->o_tmpalloc( sizeof(Filter), op->o_tmpmemctx );

Removed from v.1.54  
changed lines
  Added in v.1.56


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