From c9d13b42630eb6eea33eb4e6a107d6e78a4ec75f Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Tue, 7 Nov 2006 05:06:21 +0000 Subject: [PATCH] ITS#4606 fix from HEAD - use sock_err* macros instead of errno --- include/ac/socket.h | 3 +++ libraries/liblber/io.c | 30 +++++++++++++------------- libraries/liblber/sockbuf.c | 42 +++++++------------------------------ libraries/libldap/cyrus.c | 10 ++++----- libraries/libldap/os-ip.c | 11 ++++------ libraries/libldap/request.c | 2 +- libraries/libldap/result.c | 10 ++++----- libraries/libldap/tls.c | 8 +++---- 8 files changed, 45 insertions(+), 71 deletions(-) diff --git a/include/ac/socket.h b/include/ac/socket.h index 5aac4fe448..8522f76f90 100644 --- a/include/ac/socket.h +++ b/include/ac/socket.h @@ -80,6 +80,7 @@ #undef sock_errstr #define sock_errno() errno #define sock_errstr(e) STRERROR(e) +#define sock_errset(e) errno = (e) #ifdef HAVE_WINSOCK # define tcp_read( s, buf, len ) recv( s, buf, len, 0 ) @@ -100,8 +101,10 @@ #undef sock_errno #undef sock_errstr +#undef sock_errset #define sock_errno() WSAGetLastError() #define sock_errstr(e) ber_pvt_wsa_err2string(e) +#define sock_errset(e) WSASetLastError(e) LBER_F( char * ) ber_pvt_wsa_err2string LDAP_P((int)); diff --git a/libraries/liblber/io.c b/libraries/liblber/io.c index 934d488b7d..8bbbeb2090 100644 --- a/libraries/liblber/io.c +++ b/libraries/liblber/io.c @@ -500,7 +500,7 @@ ber_get_next( char buf[sizeof(ber->ber_len)-1]; ber_len_t tlen = 0; - errno = 0; + sock_errset(0); sblen=ber_int_sb_read( sb, ber->ber_rwptr, ((char *)&ber->ber_len + LENSIZE*2 - 1)-ber->ber_rwptr); if (sblen<=0) return LBER_DEFAULT; @@ -520,16 +520,16 @@ ber_get_next( break; /* Is the tag too big? */ if (i == sizeof(ber_tag_t)-1) { - errno = ERANGE; + sock_errset(ERANGE); return LBER_DEFAULT; } } /* Did we run out of bytes? */ if ((char *)p == ber->ber_rwptr) { #if defined( EWOULDBLOCK ) - errno = EWOULDBLOCK; + sock_errset(EWOULDBLOCK); #elif defined( EAGAIN ) - errno = EAGAIN; + sock_errset(EAGAIN); #endif return LBER_DEFAULT; } @@ -540,9 +540,9 @@ ber_get_next( if ( ber->ber_ptr == ber->ber_rwptr ) { #if defined( EWOULDBLOCK ) - errno = EWOULDBLOCK; + sock_errset(EWOULDBLOCK); #elif defined( EAGAIN ) - errno = EAGAIN; + sock_errset(EAGAIN); #endif return LBER_DEFAULT; } @@ -553,15 +553,15 @@ ber_get_next( unsigned char *p = (unsigned char *)ber->ber_ptr; int llen = *p++ & 0x7f; if (llen > (int)sizeof(ber_len_t)) { - errno = ERANGE; + sock_errset(ERANGE); return LBER_DEFAULT; } /* Not enough bytes? */ if (ber->ber_rwptr - (char *)p < llen) { #if defined( EWOULDBLOCK ) - errno = EWOULDBLOCK; + sock_errset(EWOULDBLOCK); #elif defined( EAGAIN ) - errno = EAGAIN; + sock_errset(EAGAIN); #endif return LBER_DEFAULT; } @@ -592,7 +592,7 @@ ber_get_next( /* make sure length is reasonable */ if ( ber->ber_len == 0 ) { - errno = ERANGE; + sock_errset(ERANGE); return LBER_DEFAULT; } @@ -600,7 +600,7 @@ ber_get_next( ber_log_printf( LDAP_DEBUG_CONNS, ber->ber_debug, "ber_get_next: sockbuf_max_incoming exceeded " "(%ld > %ld)\n", ber->ber_len, sb->sb_max_incoming ); - errno = ERANGE; + sock_errset(ERANGE); return LBER_DEFAULT; } @@ -611,7 +611,7 @@ ber_get_next( * already read. */ if ( ber->ber_len < sblen + l ) { - errno = ERANGE; + sock_errset(ERANGE); return LBER_DEFAULT; } ber->ber_buf = (char *) ber_memalloc_x( ber->ber_len + 1, ber->ber_memctx ); @@ -643,16 +643,16 @@ ber_get_next( to_go = ber->ber_end - ber->ber_rwptr; assert( to_go > 0 ); - errno = 0; + sock_errset(0); res = ber_int_sb_read( sb, ber->ber_rwptr, to_go ); if (res<=0) return LBER_DEFAULT; ber->ber_rwptr+=res; if (ressbiod_sb->sb_fd, buf, len, 0 ); - -#ifdef HAVE_WINSOCK - if ( rc < 0 ) { - int err; - - err = WSAGetLastError(); - errno = err; - } -#endif - - return rc; - } + return recv( sbiod->sbiod_sb->sb_fd, buf, len, 0 ); #elif defined( HAVE_NCSA ) /* @@ -520,18 +505,7 @@ sb_stream_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len ) /* * 32-bit Windows Socket API (under Windows NT or Windows 95) */ - { - int rc = send( sbiod->sbiod_sb->sb_fd, buf, len, 0 ); - -#ifdef HAVE_WINSOCK - if ( rc < 0 ) { - int err; - err = WSAGetLastError(); - errno = err; - } -#endif - return rc; - } + return send( sbiod->sbiod_sb->sb_fd, buf, len, 0 ); #elif defined(HAVE_NCSA) return netwrite( sbiod->sbiod_sb->sb_fd, buf, len ); @@ -820,11 +794,11 @@ sb_debug_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len ) ret = LBER_SBIOD_READ_NEXT( sbiod, buf, len ); if (sbiod->sbiod_sb->sb_debug & LDAP_DEBUG_PACKETS) { - int err = errno; + int err = sock_errno(); if ( ret < 0 ) { ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug, "%sread: want=%ld error=%s\n", (char *)sbiod->sbiod_pvt, - (long)len, AC_STRERROR_R( errno, ebuf, sizeof ebuf ) ); + (long)len, AC_STRERROR_R( err, ebuf, sizeof ebuf ) ); } else { ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug, "%sread: want=%ld, got=%ld\n", (char *)sbiod->sbiod_pvt, @@ -832,7 +806,7 @@ sb_debug_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len ) ber_log_bprint( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug, (const char *)buf, ret ); } - errno = err; + sock_errset(err); } return ret; } @@ -845,12 +819,12 @@ sb_debug_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len ) ret = LBER_SBIOD_WRITE_NEXT( sbiod, buf, len ); if (sbiod->sbiod_sb->sb_debug & LDAP_DEBUG_PACKETS) { - int err = errno; + int err = sock_errno(); if ( ret < 0 ) { ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug, "%swrite: want=%ld error=%s\n", (char *)sbiod->sbiod_pvt, (long)len, - AC_STRERROR_R( errno, ebuf, sizeof ebuf ) ); + AC_STRERROR_R( err, ebuf, sizeof ebuf ) ); } else { ber_log_printf( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug, "%swrite: want=%ld, written=%ld\n", @@ -858,7 +832,7 @@ sb_debug_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len ) ber_log_bprint( LDAP_DEBUG_PACKETS, sbiod->sbiod_sb->sb_debug, (const char *)buf, ret ); } - errno = err; + sock_errset(err); } return ret; diff --git a/libraries/libldap/cyrus.c b/libraries/libldap/cyrus.c index 38d98c60b8..5905a4c93b 100644 --- a/libraries/libldap/cyrus.c +++ b/libraries/libldap/cyrus.c @@ -161,7 +161,7 @@ sb_sasl_setup( Sockbuf_IO_Desc *sbiod, void *arg ) ber_pvt_sb_buf_init( &p->buf_out ); if ( ber_pvt_sb_grow_buffer( &p->sec_buf_in, SASL_MIN_BUFF_SIZE ) < 0 ) { LBER_FREE( p ); - errno = ENOMEM; + sock_errset(ENOMEM); return -1; } sasl_getprop( p->sasl_context, SASL_MAXOUTBUF, @@ -288,7 +288,7 @@ sb_sasl_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) if ( ( p->sec_buf_in.buf_size < (ber_len_t) ret ) && ber_pvt_sb_grow_buffer( &p->sec_buf_in, ret ) < 0 ) { - errno = ENOMEM; + sock_errset(ENOMEM); return -1; } p->sec_buf_in.buf_end = ret; @@ -327,7 +327,7 @@ sb_sasl_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_log_printf( LDAP_DEBUG_ANY, sbiod->sbiod_sb->sb_debug, "sb_sasl_read: failed to decode packet: %s\n", sasl_errstring( ret, NULL, NULL ) ); - errno = EIO; + sock_errset(EIO); return -1; } @@ -356,7 +356,7 @@ sb_sasl_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) /* Still have something left?? */ if ( p->buf_out.buf_ptr != p->buf_out.buf_end ) { - errno = EAGAIN; + sock_errset(EAGAIN); return -1; } } @@ -383,7 +383,7 @@ sb_sasl_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_log_printf( LDAP_DEBUG_ANY, sbiod->sbiod_sb->sb_debug, "sb_sasl_write: failed to encode packet: %s\n", sasl_errstring( ret, NULL, NULL ) ); - errno = EIO; + sock_errset(EIO); return -1; } p->buf_out.buf_end = p->buf_out.buf_size; diff --git a/libraries/libldap/os-ip.c b/libraries/libldap/os-ip.c index fdcea293f8..002300722e 100644 --- a/libraries/libldap/os-ip.c +++ b/libraries/libldap/os-ip.c @@ -63,7 +63,7 @@ do { \ static void ldap_pvt_set_errno(int err) { - errno = err; + sock_errset(err); } int @@ -219,7 +219,7 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s, struct sockaddr *sin, socklen_t addrlen, int async) { - int rc; + int rc, err; struct timeval tv = { 0 }, *opt_tv = NULL; @@ -252,11 +252,8 @@ ldap_pvt_connect(LDAP *ld, ber_socket_t s, return ( 0 ); } -#ifdef HAVE_WINSOCK - ldap_pvt_set_errno( WSAGetLastError() ); -#endif - - if ( errno != EINPROGRESS && errno != EWOULDBLOCK ) { + err = sock_errno(); + if ( err != EINPROGRESS && err != EWOULDBLOCK ) { return ( -1 ); } diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c index 55f43b8028..cd69a8d51f 100644 --- a/libraries/libldap/request.c +++ b/libraries/libldap/request.c @@ -149,7 +149,7 @@ ldap_int_flush_request( LDAPConn *lc = lr->lr_conn; if ( ber_flush( lc->lconn_sb, lr->lr_ber, 0 ) != 0 ) { - if ( errno == EAGAIN ) { + if ( sock_errno() == EAGAIN ) { /* need to continue write later */ lr->lr_status = LDAP_REQST_WRITING; ldap_mark_select_write( ld, lc->lconn_sb ); diff --git a/libraries/libldap/result.c b/libraries/libldap/result.c index 2c0ede80c4..4db51b83e3 100644 --- a/libraries/libldap/result.c +++ b/libraries/libldap/result.c @@ -301,13 +301,13 @@ wait4msg( if ( rc == -1 ) { Debug( LDAP_DEBUG_TRACE, "ldap_int_select returned -1: errno %d\n", - errno, 0, 0 ); + sock_errno(), 0, 0 ); } #endif if ( rc == 0 || ( rc == -1 && ( !LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_RESTART) - || errno != EINTR ))) + || sock_errno() != EINTR ))) { ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN : LDAP_TIMEOUT); @@ -445,7 +445,7 @@ retry: assert( LBER_VALID (ber) ); /* get the next message */ - errno = 0; + sock_errset(0); #ifdef LDAP_CONNECTIONLESS if ( LDAP_IS_UDP(ld) ) { struct sockaddr from; @@ -469,10 +469,10 @@ nextresp3: "ber_get_next failed.\n", 0, 0, 0 ); #endif #ifdef EWOULDBLOCK - if (errno==EWOULDBLOCK) return LDAP_MSG_X_KEEP_LOOKING; + if ( sock_errno() == EWOULDBLOCK ) return LDAP_MSG_X_KEEP_LOOKING; #endif #ifdef EAGAIN - if (errno == EAGAIN) return LDAP_MSG_X_KEEP_LOOKING; + if ( sock_errno() == EAGAIN ) return LDAP_MSG_X_KEEP_LOOKING; #endif ld->ld_errno = LDAP_SERVER_DOWN; return -1; diff --git a/libraries/libldap/tls.c b/libraries/libldap/tls.c index 2d26d7b18d..f0e3a8555f 100644 --- a/libraries/libldap/tls.c +++ b/libraries/libldap/tls.c @@ -590,7 +590,7 @@ sb_tls_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) err = SSL_get_error( p->ssl, ret ); if (err == SSL_ERROR_WANT_READ ) { sbiod->sbiod_sb->sb_trans_needs_read = 1; - errno = EWOULDBLOCK; + sock_errset(EWOULDBLOCK); } else sbiod->sbiod_sb->sb_trans_needs_read = 0; @@ -616,7 +616,7 @@ sb_tls_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) err = SSL_get_error( p->ssl, ret ); if (err == SSL_ERROR_WANT_WRITE ) { sbiod->sbiod_sb->sb_trans_needs_write = 1; - errno = EWOULDBLOCK; + sock_errset(EWOULDBLOCK); } else { sbiod->sbiod_sb->sb_trans_needs_write = 0; @@ -672,7 +672,7 @@ sb_tls_bio_read( BIO *b, char *buf, int len ) BIO_clear_retry_flags( b ); if ( ret < 0 ) { - int err = errno; + int err = sock_errno(); if ( err == EAGAIN || err == EWOULDBLOCK ) { BIO_set_retry_read( b ); } @@ -699,7 +699,7 @@ sb_tls_bio_write( BIO *b, const char *buf, int len ) BIO_clear_retry_flags( b ); if ( ret < 0 ) { - int err = errno; + int err = sock_errno(); if ( err == EAGAIN || err == EWOULDBLOCK ) { BIO_set_retry_write( b ); } -- 2.39.5