Sharma, Ramakant 2. (Nokia - IN/Bangalore) wrote: > Hi Howard, > > Please provide your valuable comments. > > Can we start implementation with the proposed design?
Yes this sounds fine to me. I'm guessing no one else on the list has any comments at this point. > > BR, > Ramakant Sharma > > -----Original Message----- > From: Sharma, Ramakant 2. (Nokia - IN/Bangalore) > Sent: Wednesday, October 10, 2018 2:21 PM > To: 'h...@symas.com' <h...@symas.com>; 'openldap-devel@openldap.org' > <openldap-devel@openldap.org> > Cc: Singam, Sudhir (Nokia - IN/Bangalore) <sudhir.sin...@nokia.com> > Subject: RE: Regarding the feature to introduce new LDAP option to set source > bind IP address > > Hi Howard, > >>> Not sure I understand the value of a list of multiple addresses here. > > [Ramakant]: Yes you are right that there is no use case for multiple IPv4 or > multiple IPv6 address setting for an LDAP client. The list can have only one > IPv4 and one IPv6. LDAP client will chose either IPv4 or IPv6 address for > binding, based on the target address type. > >>> Seems like these should be char* arrays, especially since we already have >>> str2charray(). > [Ramakant]: Modified as per comment and now only one variable will hold both > IPv4 and IPv6. > >>> What specific LDAP API error code will be returned in each instance? > [Ramakant]: We are planning to re-use " LDAP_CONNECT_ERROR ". > > Please find the update content here after above comments. > > " > *Requirement:* > > User shall be able to set IPv4/IPv6 socket bind address to be able to route > the LDAP traffic via desired network interface. Based on the target IP > address type, matching IP address will be picked for explicit binding*//**at > client side*. > > *Work items:* > 1. *LDAP option to set the IPv4/IPv6 socket bind addresses.* > /Format: space separated list of IP addresses/ > > New configuration option LDAP_OPT_SOCKET_BIND_ADDRESSES (0x5013) will be > introduced (in ldap.h) to be used via ldap_set_option. > > For example, > > char* p = "10.24.56.34 2001:0db8:85a3:0000:0000:8a2e:0370:7334"; > ldap_set_option(NULL, LDAP_OPT_SOCKET_BIND_ADDRESSES, p); > > Bind addresses can also be provided in ldap.conf file via the option > "SOCKET_BIND_ADDRESSES" > > Valid examples: > > SOCKET_BIND_ADDRESSES 10.24.56.45 2001:0db8:85a3:0000:0000:8a2e:0370:7334 > SOCKET_BIND_ADDRESSES 10.24.56.45 > SOCKET_BIND_ADDRESSES 2001:0db8:85a3:0000:0000:8a2e:0370:7334 > SOCKET_BIND_ADDRESSES 2001:0db8:85a3:0000:0000:8a2e:0370:7334 10.24.56.45 > > Invalid examples: > SOCKET_BIND_ADDRESSES 2001:0db8:85a3:0000:0000:8a2e:0370:7334 > 2001:0db8:85a3:0000:0000:8a2e:0370:7335 > SOCKET_BIND_ADDRESSES 10.24.56.45 10.24.56.47 > > Note : > Option set to ldap handle will override the global option. > Setting the option multiple times will override the previous values > but does not append. > > 2. *Parsing & validations* > > Space separated IP addresses will be parsed & validated. > Basic syntax validation will be done for IPv4 or IPv6 addresses, if any > error, setting of the option will fail and LDAP client will use the default > IP address or previously successfully validated IP addresses provided by set > option. > If multiple IPv4 or multiple IPv6 address is set, validation will fail. > > "ldapoptions" structure in ldap-int.h will be modified to add new variable > to hold given IPv4 and IPv6 address. > char** ldo_local_IP_addresses > > Any new function /ldap_options_parseBindAddress() will be introduced in > options.c to parse, validate and store the IP address to " > ldo_local_IP_addresses" variable. This function will be similar to > ldap_url_parseHosts. > If parseBindAddress() fails to parse & validate the addresses successfully > then previously set IP address will not be overwritten. If there were no > previous address then default kernel address will be used during connection. > > 3. *Using Bind IP addresses during connection* > > File:os-ip.c > Function: ldap_connect_to_host > - After the connection socket is created (ldap_int_socket) and before it is > connected (ldap_pvt_connect). > Check if the target address family type, *I*f it is AF_INET, IPv4 bind > - If the list is empty means there were no addresses provided from user, > then default kernel provided address will be used for binding the interface. > - If the list is not empty and not able to bind to provided IPv4 address, > connection will fail> > - if the list is not empty and it just contains IPV6 address then default > kernel provided IPv4 address will be used for binding the interface. > If it is AF_INET6, IPv6 bind address will be used from the list. > - If the list is not empty and not able to bind to provided IPv6 addresses, > connection will fail. > - if the list is not empty and it just contains IPV4 address then default > kernel provided IPv6 address will be used for binding the interface. > - If the list is empty then LDAP client will continue to use the kernel > provided IPv6 address. > > " > BR, > Ramakant Sharma > Technical Lead > Nokia Networks, Bangalore > > -----Original Message----- > From: Howard Chu <h...@symas.com> > Sent: Thursday, September 06, 2018 9:18 PM > To: Singam, Sudhir (Nokia - IN/Bangalore) <sudhir.sin...@nokia.com>; > 'openldap-devel@openldap.org' <openldap-devel@openldap.org> > Cc: Sharma, Ramakant 2. (Nokia - IN/Bangalore) <ramakant.2.sha...@nokia.com> > Subject: Re: Regarding the feature to introduce new LDAP option to set source > bind IP address > > Singam, Sudhir (Nokia - IN/Bangalore) wrote: >> Hi Howard, >> >> Any comments ?? > >> >> Hi, >> >> Can we go ahead and implement this ?? >> >> *Regards,* >> *Sudhir Singam* >> >> *DELIVERING BEST-IN-CLASS PLATFORM is our vision* >> >> >> _____________________________________________ >> *From:* Singam, Sudhir (Nokia - IN/Bangalore) >> *Sent:* Wednesday, August 08, 2018 8:48 AM >> *To:* _openldap-devel@openldap.org_ >> <mailto:openldap-devel@openldap.org> >> *Cc:* Sharma, Ramakant 2. (Nokia - IN/Bangalore) >> <_ramakant.2.sharma@nokia.com_ <mailto:ramakant.2.sha...@nokia.com>> >> *Subject:* Regarding the feature to introduce new LDAP option to set >> source bind IP address >> >> >> Hi, >> >> NOKIA has taken up this small feature for contribution. Previously patch was >> submitted via ITS#8847 but got rejected to take different approach. >> Now I have raised ITS#8893. We want to conclude on the approach before >> taking for implementation. Please kindly let us know if following approach >> is OK and if any comments. >> >> *Requirement:* >> >> User shall be able to set multiple IPv4/IPv6 socket bind addresses, to >> be able to route the LDAP traffic via desired network interface. Based on >> the target IP address type, first matching and valid source IP address will >> be picked for explicit binding*//**at client side*. > > Not sure I understand the value of a list of multiple addresses here. >> >> *Work items:* >> >> >> 1. *LDAP option to set the IPv4/IPv6 socket bind addresses.* >> >> /Format: space separated list of IP addresses/ >> >> New configuration option LDAP_OPT_SOCKET_BIND_ADDRESSES (0x5013) will be >> introduced (in ldap.h) to be used via ldap_set_option. >> >> For example, >> >> char* p = "10.24.56.34 2001:0db8:85a3:0000:0000:8a2e:0370:7334"; >> ldap_set_option(NULL, LDAP_OPT_SOCKET_BIND_ADDRESSES, p); >> >> Bind addresses can also be provided in ldap.conf file via the option >> "SOCKET_BIND_ADDRESSES", for example, >> >> SOCKET_BIND_ADDRESSES 10.24.56.45 10.24.56.46 >> 2001:0db8:85a3:0000:0000:8a2e:0370:7334 >> >> Note : >> Option set to ldap handle will override the global option. >> Setting the option multiple times will override the previous values >> but does not append. >> >> >> 2. *Parsing & validations* >> >> >> Space separated IP addresses will be parsed & validated. IPv4 and IPv6 >> addresses are stored separately for easy of access during connection. >> Basic syntax validation will be done for IPv4 or IPv6 addresses, if any >> error, setting of the option will fail and LDAP client will use the default >> IP address. >> >> "ldapoptions" structure in ldap-int.h will be modified to add new >> members "char *ldo_local_IPV4_addresses" -> to hold client local IPv4 >> bind addresses "char *ldo_local_IPV6_addresses" -> to hold client >> local IPv6 bind addresses > > Seems like these should be char* arrays, especially since we already have > str2charray(). > >> Any new function /ldap_options_parseBindAddress/ () will be introduced >> in options.c to parse, validate and store the IP addresses to respective >> variables. This function will be similar to ldap_url_parseHosts. >> >> Memory for ldo_local_IPV4_addresses & ldo_local_IPV6_addresses is >> dynamically allocated in the form of array for easy access. If any >> validation failure, no new memory will be allocated and existing values will >> be retained. >> >> >> 3. *Using Bind IP addresses during connection* >> >> >> File:os-ip.c >> Function: ldap_connect_to_host >> - After the connection socket is created (ldap_int_socket) and before it is >> connected (ldap_pvt_connect). >> Check if the target address family type, *I*f it is AF_INET, IPv4 bind >> address list will be used. >> - If the list is empty and LDAP option was set successfully earlier (IPv6 >> was set), binding will fail and error is returned. >> - If the list is not empty and not able to bind to any of the provided IPv4 >> addresses, connection will fail> - If the list is empty and LDAP option >> setting failed earlier (during syntax validation), LDAP client will continue >> to use the kernel provided IPv4 address. >> If it is AF_INET6, IPv6 bind address list will be used. >> - If the list is empty and LDAP option was set successfully earlier (IPv4 >> was set), binding will fail and error is returned. >> - If the list is not empty and not able to bind to any of the provided IPv6 >> addresses, connection will fail. >> - If the list is empty and LDAP option setting failed earlier (during syntax >> validation), LDAP client will continue to use the kernel provided IPv6 >> address. > > What specific LDAP API error code will be returned in each instance? > >> >> >> >> >> *Regards,* >> *Sudhir Singam* >> >> *DELIVERING BEST-IN-CLASS PLATFORM is our vision* >> >> >> > > > -- > -- Howard Chu > CTO, Symas Corp. http://www.symas.com > Director, Highland Sun http://highlandsun.com/hyc/ > Chief Architect, OpenLDAP http://www.openldap.org/project/ > -- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/