我正在构建一个简单的网页,以允许用户管理他们的LDAP密码。我已经成功构建了一个脚本,允许用户更改他们的LDAP密码,但是,我被困在一个会重置密码的脚本上。
以下是我用来重置密码的代码:
// connect to the ldap server
$connection = ldap_connect($server) or die('Cannot connect to LDAP server');
// bind to the ldap server
if(!ldap_bind($connection, $bindDn, $bindPassword)) {
echo 'Cannot bind to LDAP server<br>';
}
// get the user dn
$userSearch = ldap_search($connection, $baseDn,"(|(uid=$username))");
$userEntry = ldap_first_entry($connection, $userSearch);
$userDn = ldap_get_dn($connection, $userEntry);
// make up a fake password
$chars = 'qwrtyipsdfgghjklzxcvbnmQWRTYPSDFGHJKLZXCVBNM1234567890!@#$%^&*-=_+",.?';
$passwordLength = 12;
$password = '';
// create the fake password
for($i = 0; $i < $passwordLength; $i++) {
$password .= $chars[rand(0, strlen($chars))];
}
// now change the password
$encodedPassword = '{SHA}'.base64_encode(pack('H*', sha1($password)));
if(@ldap_mod_replace($connection, $userDn, array('userPassword' => $encodedPassword)) === false) {
echo ldap_error($connection);
}
// mail the user their new password
运行此代码的结果是
Insufficient access
这是ldap_mod_replace命令的结果。
此代码与我用来更改用户密码的代码之间的唯一区别是我以用户的密码绑定。
显然,对于忘记密码的用户,我不能这样做。
我不管理LDAP安装,也不了解管理它。我最初绑定的用户的问题是不是设置为只更改任何人的密码?
如果是这种情况,我需要告诉我的系统管理员做什么?
如果没有,问题是什么?