ユーザーが LDAP パスワードを管理できるようにするための単純な Web ページを作成しています。ユーザーが 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 のインストールを管理していませんし、管理についても何も知りません。最初にバインドしたユーザーが、誰のパスワードでも変更できるように設定されていないという問題はありますか?
その場合、システム管理者に何をするように伝える必要がありますか?
そうでない場合、何が問題ですか?