Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
openldap2.24984
0017-retain-non-blocking-status-on-socket.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0017-retain-non-blocking-status-on-socket.patch of Package openldap2.24984
Patch is authored by Ales Novak <alnovak@suse.com> on 2017-04-07. diff -rupN openldap-2.4.41/doc/man/man3/lber-sockbuf.3 openldap-2.4.41-patched/doc/man/man3/lber-sockbuf.3 --- openldap-2.4.41/doc/man/man3/lber-sockbuf.3 2017-04-19 11:32:49.848929439 +0200 +++ openldap-2.4.41-patched/doc/man/man3/lber-sockbuf.3 2017-04-19 14:14:14.135372384 +0200 @@ -103,6 +103,12 @@ the should be NULL to disable and non-NULL to enable the non-blocking state. The return value will be 1 for success, \-1 otherwise. .TP +.B LBER_SB_OPT_GET_NONBLOCK +Return non-blocking state of the file descriptor associated to +the +.BR Sockbuf . +The return value will be 1 if the socket is non-blocking, -1 otherwise. +.TP .B LBER_SB_OPT_DRAIN Flush (read and discard) all available input on the .BR Sockbuf . diff -rupN openldap-2.4.41/include/lber.h openldap-2.4.41-patched/include/lber.h --- openldap-2.4.41/include/lber.h 2017-04-19 11:32:49.832929370 +0200 +++ openldap-2.4.41-patched/include/lber.h 2017-04-19 14:14:34.919452048 +0200 @@ -135,6 +135,7 @@ typedef struct lber_memory_fns { #define LBER_SB_OPT_SET_FD 2 #define LBER_SB_OPT_HAS_IO 3 #define LBER_SB_OPT_SET_NONBLOCK 4 +#define LBER_SB_OPT_GET_NONBLOCK 5 #define LBER_SB_OPT_GET_SSL 7 #define LBER_SB_OPT_DATA_READY 8 #define LBER_SB_OPT_SET_READAHEAD 9 diff -rupN openldap-2.4.41/libraries/liblber/sockbuf.c openldap-2.4.41-patched/libraries/liblber/sockbuf.c --- openldap-2.4.41/libraries/liblber/sockbuf.c 2017-04-19 11:32:49.840929404 +0200 +++ openldap-2.4.41-patched/libraries/liblber/sockbuf.c 2017-04-19 14:12:30.978977411 +0200 @@ -117,6 +117,10 @@ ber_sockbuf_ctrl( Sockbuf *sb, int opt, ? -1 : 1; break; + case LBER_SB_OPT_GET_NONBLOCK: + ret = ber_pvt_socket_get_nonblock( sb->sb_fd); + break; + case LBER_SB_OPT_DRAIN: { /* Drain the data source to enable possible errors (e.g. * TLS) to be propagated to the upper layers @@ -354,6 +358,17 @@ ber_pvt_socket_set_nonblock( ber_socket_ #endif } +int +ber_pvt_socket_get_nonblock( ber_socket_t sd ) +{ +#ifdef HAVE_FCNTL + int flags = fcntl( sd, F_GETFL); + return (flags & O_NONBLOCK)?1:0; +#elif defined( FIONBIO ) + return -1; +#endif +} + int ber_int_sb_init( Sockbuf *sb ) { diff -rupN openldap-2.4.41/libraries/libldap/tls2.c openldap-2.4.41-patched/libraries/libldap/tls2.c --- openldap-2.4.41/libraries/libldap/tls2.c 2017-04-19 11:32:49.840929404 +0200 +++ openldap-2.4.41-patched/libraries/libldap/tls2.c 2017-04-19 14:13:45.583262990 +0200 @@ -818,6 +818,7 @@ ldap_int_tls_start ( LDAP *ld, LDAPConn #ifdef LDAP_USE_NON_BLOCKING_TLS struct timeval start_time_tv, tv, tv0; ber_socket_t sd = AC_SOCKET_ERROR; + int was_nonblocking; #endif /* LDAP_USE_NON_BLOCKING_TLS */ if ( !conn ) @@ -838,6 +839,7 @@ ldap_int_tls_start ( LDAP *ld, LDAPConn (void) tls_init( tls_imp ); #ifdef LDAP_USE_NON_BLOCKING_TLS + was_nonblocking = ber_sockbuf_ctrl( ld->ld_sb, LBER_SB_OPT_GET_NONBLOCK, NULL ); /* * Use non-blocking io during SSL Handshake when a timeout is configured */ @@ -924,7 +926,7 @@ ldap_int_tls_start ( LDAP *ld, LDAPConn } } } - if ( ld->ld_options.ldo_tm_net.tv_sec >= 0 ) { + if ( ld->ld_options.ldo_tm_net.tv_sec >= 0 && ! was_nonblocking ) { ber_sockbuf_ctrl( ld->ld_sb, LBER_SB_OPT_SET_NONBLOCK, NULL ); } #endif /* LDAP_USE_NON_BLOCKING_TLS */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor