当尝试重新绑定到非匿名帐户时,如果不小心将密码字段留空,OpenLDAP 库将返回错误 53(服务器不愿意执行)。如果您想针对与 dn 不同的字段进行身份验证,则必须两次绑定到服务器。您的代码可能如下所示
<?
function ldapLogin($uname, $pass, $base_dn, $fname, $server, $port){
$ldc=@ldap_connect($server, $port);
if (!$ldc) return ERROR_CODE;
$bn='cn=anonymous-user,'.$base_dn;
$pw='anonymous-pass';
$lbind=@ldap_bind($ldc, $bn, $pw);
if (!$lbind) return ERROR_CODE;
$ureturn=@ldap_search($ldc, $base_dn, "($fname=$uname)", array('dn', 'givenName', 'sn', 'mail'));
$uent=@ldap_first_entry($ldc, $ureturn);
if (!$uent) return ERROR_CODE;
$bn=@ldap_get_dn($ldc, $uent);
// 这行代码应该使用 $pass 而不是 $password
$lbind=@ldap_bind($ldc, $bn, $password);
// 现在您可以找到错误
echo ldap_error($ltc);
if ($lbind) return true; else return false;
?>
希望这对遇到相同错误的其他人有所帮助。