From 98f5795e804f6870b5b179103be3af7e474dd0f9 Mon Sep 17 00:00:00 2001
From: Stef Walter <stefw@redhat.com>
Date: Fri, 3 May 2013 09:20:14 +0200
Subject: [PATCH] ITS#7583 Fix ldap_init_fd() for 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 24d8a41e0b..ba10939975 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_" );
-- 
GitLab