I tumbled into the following ITS#4707 thread: Patch: option to bind client socket to an address https://www.openldap.org/lists/openldap-bugs/200610/threads.html#00047
Wasn't this patch integrated into OpenLDAP 2.3.X? I couldn't see it in the 2.4.44 code base.
Daniel
-----Original Message----- From: Howard Chu [mailto:hyc@symas.com] Sent: Monday, May 22, 2017 8:57 AM To: Daniel Le daniel.le@exfo.com; 'openldap-devel@openldap.org' openldap-devel@openldap.org Subject: Re: ITS#8654 - Option for LDAP client to bind to a local address
Daniel Le wrote:
Hello,
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 easier.
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.
Regards, Daniel