我正在构建一个简单的网页来允许用户管理他们的 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 安装,也不知道管理一个。我最初绑定的用户是否没有设置为仅更改任何人的密码?
如果是这种情况,我需要告诉我的系统管理员做什么?
如果不是,问题是什么?