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