From 3084eee3c24ade78aa70406a61fb62bd38befc73 Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Fri, 3 May 2013 09:20:14 +0200 Subject: [PATCH] Make ldap_init_fd() work with LDAP_PROTO_UDP ldap_init_fd() tried to handle UDP sockets but was missing certain key pieces to make it work. Fill in the address and set the UDP flag correctly. --- libraries/libldap/open.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c index 24d8a41..ba10939 100644 --- a/libraries/libldap/open.c +++ b/libraries/libldap/open.c @@ -268,6 +268,9 @@ ldap_init_fd( int rc; LDAP *ld; LDAPConn *conn; +#ifdef LDAP_CONNECTIONLESS + ber_socklen_t len; +#endif *ldp = NULL; rc = ldap_create( &ld ); @@ -308,6 +311,15 @@ ldap_init_fd( #ifdef LDAP_CONNECTIONLESS case LDAP_PROTO_UDP: + LDAP_IS_UDP(ld) = 1; + if( ld->ld_options.ldo_peer ) + ldap_memfree( ld->ld_options.ldo_peer ); + ld->ld_options.ldo_peer = ldap_memalloc( sizeof( struct sockaddr ) ); + len = sizeof( struct sockaddr ); + if( getpeername ( fd, ld->ld_options.ldo_peer, &len ) < 0) { + ldap_unbind_ext( ld, NULL, NULL ); + return( AC_SOCKET_ERROR ); + } #ifdef LDAP_DEBUG ber_sockbuf_add_io( conn->lconn_sb, &ber_sockbuf_io_debug, LBER_SBIOD_LEVEL_PROVIDER, (void *)"udp_" ); -- 1.8.1.4