LDAP APIS confused me, anyone can tell my what’s
wrong with my code?
I have call ldap_set_option() and set the LDAP_OPT_NETWORK_TIMEOUT
or the LDAP_OPT_TIMEOUT
opt,
before call the ldap_bind_s() or the non synchronize
APIS, but the authentication result still return after almost 70
seconds later, am I miss something (note: my server
is windows active directory, simple authentication.)?
struct
timeval tv_select_timeout;
tv_select_timeout.tv_sec
= 10;
tv_select_timeout.tv_usec
= 0;
int
t;
t=ldap_set_option(pLdapConnection,
LDAP_OPT_NETWORK_TIMEOUT, &tv_select_timeout);
#ifdef BIND_TIME_CONTROL
{
int
msgid, err;
LDAPMessage
*result = NULL;
char
*error_msg;
struct
timeval tv;
if
((msgid = ldap_simple_bind(pLdapConnection, pUserDN, pPassword)) == -1)
{
error_msg
= NULL;
ldap_get_option(pLdapConnection,
LDAP_OPT_ERROR_STRING, &error_msg);
if
(error_msg != NULL)
{
ldap_memfree(error_msg);
}
ldap_unbind_s(pLdapConnection);
return
AUTH_AGENT_ERR_LDAPSIMPLEBIND_FAIL;
}
ret
= ldap_result(pLdapConnection, msgid, LDAP_MSG_ALL, & tv_select_timeout,
&result);
if
(ret == -1)
{
ldap_unbind_s(pLdapConnection);
if
(result != NULL)
ldap_msgfree(result);
return
AUTH_AGENT_ERR_LDAPRESULT_FAIL;
}
else
if (ret == 0)
{
/*timeout
& result ==NULL */
ldap_unbind_s(pLdapConnection);
if
(result != NULL)
ldap_msgfree(result);
return
AUTH_AGENT_ERR_LDAPRESULT_TIMEOUT;
}
ret
= ldap_result2error(pLdapConnection, result, 1);
}
#else
{
ret
= ldap_bind_s(pLdapConnection, pUserDN, pPassword, LDAP_AUTH_SIMPLE);
}
#endif