我有一个问题,其中 ldap_sasl_bind_s 不起作用,但 ldap_simple_bind_s 有效。
奇怪的是,ldap_sasl_bind_s 即使在密码错误的情况下也能工作,并让用户感觉他输入了正确的密码。
问题的 PFA 代码片段,如果我的方法有任何问题,请建议我。
{
int rc, aReturnVal = 0;
NSString *aUserDN = [NSString stringWithFormat:@"uid=%s,cn=users,dc=example,dc=com", username];
char* userDN = (char*)[aUserDN UTF8String];
rc = ldap_simple_bind_s (
ld,
userDN,
password
);
// TODO: ldap_simple_bind_s is a deprecated method and should not be used for long. ldap_sasl_bind_s is the right method, but is not working for now.
// Find the reason and get this code up and running.
// struct berval *servcred;
// struct berval cred;
// cred.bv_val = password; // my password
// cred.bv_len = strlen(password);
// rc = ldap_sasl_bind_s (
// ld,
// userDN,
// "DIGEST-MD5",
// &cred,
// NULL,
// NULL,
// &servcred
// );
if ( rc != LDAP_SUCCESS ) {
fprintf( stderr, "ldap_sasl_bind: %s\n", ldap_err2string( rc ) );
} else {
aReturnVal = 1;
}
return aReturnVal;
}
我已经使用以下代码 SNIP 初始化了 LDAP:
rc = ldap_initialize(&ld, HOSTNAME);
version = LDAP_VERSION3;
ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version );
ldap_set_option( ld, LDAP_OPT_REFERRALS, 0 );
我需要能够使用正确的用户名登录,当用户尝试输入错误的用户名时,ldap 应该这样说。
我参考了以下链接及其相关链接来得出这个结论: