Diff for /libraries/libldap/sasl.c between versions 1.64.2.8 and 1.73

version 1.64.2.8, 2010/04/13 20:22:59 version 1.73, 2009/01/21 23:40:21
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/libraries/libldap/sasl.c,v 1.64.2.7 2009/10/31 00:11:22 quanah Exp $ */  /* $OpenLDAP: pkg/ldap/libraries/libldap/sasl.c,v 1.72 2008/10/09 09:33:49 hyc Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1998-2010 The OpenLDAP Foundation.   * Copyright 1998-2009 The OpenLDAP Foundation.
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 503  sb_sasl_generic_setup( Sockbuf_IO_Desc * Line 503  sb_sasl_generic_setup( Sockbuf_IO_Desc *
         p->ops = i->ops;          p->ops = i->ops;
         p->ops_private = i->ops_private;          p->ops_private = i->ops_private;
         p->sbiod = sbiod;          p->sbiod = sbiod;
         p->flags = 0;  
         ber_pvt_sb_buf_init( &p->sec_buf_in );          ber_pvt_sb_buf_init( &p->sec_buf_in );
         ber_pvt_sb_buf_init( &p->buf_in );          ber_pvt_sb_buf_init( &p->buf_in );
         ber_pvt_sb_buf_init( &p->buf_out );          ber_pvt_sb_buf_init( &p->buf_out );
Line 679  sb_sasl_generic_write( Sockbuf_IO_Desc * Line 678  sb_sasl_generic_write( Sockbuf_IO_Desc *
 {  {
         struct sb_sasl_generic_data     *p;          struct sb_sasl_generic_data     *p;
         int                             ret;          int                             ret;
         ber_len_t                       len2;  
   
         assert( sbiod != NULL );          assert( sbiod != NULL );
         assert( SOCKBUF_VALID( sbiod->sbiod_sb ) );          assert( SOCKBUF_VALID( sbiod->sbiod_sb ) );
   
         p = (struct sb_sasl_generic_data *)sbiod->sbiod_pvt;          p = (struct sb_sasl_generic_data *)sbiod->sbiod_pvt;
   
         /* Is there anything left in the buffer? */          /* Are there anything left in the buffer? */
         if ( p->buf_out.buf_ptr != p->buf_out.buf_end ) {          if ( p->buf_out.buf_ptr != p->buf_out.buf_end ) {
                 ret = ber_pvt_sb_do_write( sbiod, &p->buf_out );                  ret = ber_pvt_sb_do_write( sbiod, &p->buf_out );
                 if ( ret < 0 ) return ret;                  if ( ret < 0 ) return ret;
Line 698  sb_sasl_generic_write( Sockbuf_IO_Desc * Line 696  sb_sasl_generic_write( Sockbuf_IO_Desc *
                 }                  }
         }          }
   
         len2 = p->max_send - 100;       /* For safety margin */  
         len2 = len > len2 ? len2 : len;  
   
         /* If we're just retrying a partial write, tell the  
          * caller it's done. Let them call again if there's  
          * still more left to write.  
          */  
         if ( p->flags & LDAP_PVT_SASL_PARTIAL_WRITE ) {  
                 p->flags ^= LDAP_PVT_SASL_PARTIAL_WRITE;  
                 return len2;  
         }  
   
         /* now encode the next packet. */          /* now encode the next packet. */
         p->ops->reset_buf( p, &p->buf_out );          p->ops->reset_buf( p, &p->buf_out );
   
         ret = p->ops->encode( p, buf, len2, &p->buf_out );          if ( len > p->max_send - 100 ) {
                   len = p->max_send - 100;        /* For safety margin */
           }
   
           ret = p->ops->encode( p, buf, len, &p->buf_out );
   
         if ( ret != 0 ) {          if ( ret != 0 ) {
                 ber_log_printf( LDAP_DEBUG_ANY, sbiod->sbiod_sb->sb_debug,                  ber_log_printf( LDAP_DEBUG_ANY, sbiod->sbiod_sb->sb_debug,
Line 724  sb_sasl_generic_write( Sockbuf_IO_Desc * Line 714  sb_sasl_generic_write( Sockbuf_IO_Desc *
   
         ret = ber_pvt_sb_do_write( sbiod, &p->buf_out );          ret = ber_pvt_sb_do_write( sbiod, &p->buf_out );
   
         if ( ret < 0 ) {  
                 /* error? */  
                 int err = sock_errno();  
                 /* caller can retry this */  
                 if ( err == EAGAIN || err == EWOULDBLOCK || err == EINTR )  
                         p->flags |= LDAP_PVT_SASL_PARTIAL_WRITE;  
                 return ret;  
         } else if ( p->buf_out.buf_ptr != p->buf_out.buf_end ) {  
                 /* partial write? pretend nothing got written */  
                 len2 = 0;  
                 p->flags |= LDAP_PVT_SASL_PARTIAL_WRITE;  
         }  
   
         /* return number of bytes encoded, not written, to ensure          /* return number of bytes encoded, not written, to ensure
          * no byte is encoded twice (even if only sent once).           * no byte is encoded twice (even if only sent once).
          */           */
         return len2;          return len;
 }  }
   
 static int  static int

Removed from v.1.64.2.8  
changed lines
  Added in v.1.73


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