Hi Team,
We are working on migration of nsldap C sdk to OpenLDAP C sdk for our application client code.
We are using OpenLDAP 2.6.7.
As part of this migration, we are facing one issue related to LDAP Referrals when LDAP_OPT_REFERRALS=ON (which means SDK will handle Referrals internally)
While testing our application which makes use of OpenLDAP sdk , we see a difference in the referral handling when LDAP_OPT_REFERRALS=ON when compared with NSLDAP C SDK with user bind We are testing with Oracle Unified Directory, referrals is enabled at server.
*With OpenLDAP C SDK:* When our application follows the bind(synchronous) request for the users which is present in another server (where chase should happen) ldap_bind_s → - Which internally calls ldap_sasl_bind_s → ldap_sasl_bind + ldap_result
able to succeed the bind (LDAP_SUCCESS).
And When our application follows the bind(asynchronous) request for the users which is present in another server (where chase should happen) ldap_simple_bind -> - which internally calls ldap_sasl_bind
failed to bind and returned (LDAP_REFERRAL) instead.
On further analysis of OpenLDAP code *result.c* (line# 728) we observed, there is exclusion for bind request *tag != LDAP_RES_BIND*, which is preventing to chase the referral internally.
* /* Do we need to check for referrals? */ if ( tag != LDAP_RES_BIND && ( LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_REFERRALS) || lr->lr_parent != NULL )) { char **refs = NULL; ber_len_t len; /* Check if V3 referral */ if ( ber_peek_tag( &tmpber, &len ) == LDAP_TAG_REFERRAL ) { ... /* Chase the referral */ refer_cnt = ldap_chase_v3referrals( ld, lr, refs, ... );*
However, we don't see such exclusion with NSLDAP C SDK specifically for bind requests. We would like to understand the limitation for asynchronous bind when handling referral internally. Are there any known issues/limitations with this use case when OpenLDAP C SDK handles referrals? Is there any way (like any flag/option) to make automatic referrals work with asynchronous bind calls ldap_simple_bind?
Please note that, the ldap_search succeeds with when LDAP_OPT_REFERRALS=ON, no issue observed.