[Date Prev][Date Next] [Chronological] [Thread] [Top]

Fwd: Clarification regarding global ldapoptions structure in ldap




Hi All,

I recently upgraded to openldap 2.4.47, it's working with single threaded connection but with multi threaded getting problem due to global structure of ldapoptions in init.c

-------------------------
init.c
-------------------------
struct ldapoptions ldap_int_global_options =
        { LDAP_UNINITIALIZED, LDAP_DEBUG_NONE
                LDAP_LDO_NULLARG
                LDAP_LDO_CONNECTIONLESS_NULLARG
                LDAP_LDO_TLS_NULLARG
                LDAP_LDO_SASL_NULLARG
                LDAP_LDO_GSSAPI_NULLARG
                LDAP_LDO_MUTEX_NULLARG };

This global structure is accessed at multiple places (such as ldap_pvt_tls_init_def_ctx, alloc_handle, ldap_int_tls_connect, ldap_pvt_tls_destroy, ldap_ld_free)
in tls2.c using the macro lo = LDAP_INT_GLOBAL_OPT(); 

So in case of multi threaded application multiple ldap connection will be using this global structure, for example ldo_tls_ctx of lapoptions will be used. In one thread it can be creating a tls connection and in one it can be destroying the connection. As it's global so it is getting corrupted. 

Is openldap library thread safe completely ? Because this variable seems to be not for this tls context variable, is there any other way of using this context . As i can see a local variable ldo_tls_ctx exist in dap ld->ldc->ldap_options->ldo_tls_ctx structure, but it's just got assigned with the same address of global structure in  ldap_int_tls_connect.

So can someone share some thoughts on it ?

--
Regards,
Sachidananda Sahu