I tumbled into the following ITS#4707 thread:
Patch: option to bind client socket to an address
Wasn't this patch integrated into OpenLDAP 2.3.X? I couldn't see it in the 2.4.44
From: Howard Chu [mailto:email@example.com]
Sent: Monday, May 22, 2017 8:57 AM
To: Daniel Le <daniel.le(a)exfo.com>; 'openldap-devel(a)openldap.org'
Subject: Re: ITS#8654 - Option for LDAP client to bind to a local address
Daniel Le wrote:
In reference to the enhancement request ITS#865, please comment on the following to add
support for binding a local IP address to client socket. This is just an outline of
changes for one local address. I am not sure whether a list of local addresses is
necessary. If it is, then a new function, similarly to ldap_url_parsehosts, may be written
to parse the list of local addresses and store them into a linked list. In my use case,
only one IPv4 or IPv6 local address is used for binding.
As I commented in the ITS, since there is no existing IETF spec for this option, and since
there is an existing implementation in Microsoft's API, we should copy the Microsoft
API behavior, to maintain source level compatibility and make app developers' lives
Since they support a list of IP addresses, so should we.
- Modify ldap.h and ldap_set_option to handle the new option LDAP_OPT_LOCAL_ADDRESS.
Should it be named LDAP_OPT_CLIENT_ADDRESS, LDAP_OPT_SOCKET_BIND_ADDRESS...?
- Modify struct ldapoptions in ldap-int.h to add element "char
*ldo_local_address" to hold client local address when
ldap_set_option(LDAP_OPT_LOCAL_ADDRESS...) is executed.
This can char pointer can point to an IPv4 address or IPv6 address.
- ldap_connect_to_host() in os-ip.c
After the connection socket is created (ldap_int_socket) and before it is connected
(ldap_pvt_connect), extract the local IP address.
If local address family (AF_INET/ AF_INET6) matches the one of the host, bind socket to
the local address.
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/