我创建了一个php脚本(使用XAMPP服务器和php_ldap.dll库)来更改AD用户密码(我正在使用管理员帐户进行身份验证):
$server = "ldaps://xx.xx.xx.xx";
$dn = "dc=domainname,dc=com";
$port = 636;
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
$con = ldap_connect($server, $port);
ldap_set_option($con, LDAP_OPT_REFERRALS, 0);
ldap_set_option($con, LDAP_OPT_PROTOCOL_VERSION, 3);
$bind = ldap_bind($con, 'CN=Admin,CN=Users,DC=DOMIAN,DC=COM', 'password');
$user_search = ldap_search($con,$dn,'(sAMAccountName='.$user.')');
$user_get = ldap_get_entries($con, $user_search);
$user_entry = ldap_first_entry($con, $user_search);
$user_dn = ldap_get_dn($con, $user_entry);
$user = 'validuser';
$oldPassword = 'oldpass';
$newPassword = 'newpass';
$encoded_newPassword = "{SHA}" . base64_encode( pack( "H*", sha1( $newPassword ) ) );
/* Change the password */
$entry = array();
$entry["userPassword"] = "$encoded_newPassword";
if (ldap_modify($con,$user_dn,$entry) === false){
$error = ldap_error($con);
$errno = ldap_errno($con);
echo "$errno - $error";
} else {
echo "yes";
}
另外,我在C:\ OpenLDAP \ sysconf中创建了一个ldap.conf:
TLS_REQCERT never
但是ldap_modify / ldap_mod_replace函数返回 TRUE (“yes”)消息。密码更改测试使用我自己的用户帐户,但仍然使用相同的密码。
我怀疑是 userPassword 属性,因为当我从用户那里获得ldap_get_entries时,我看不到这个属性,但是如果我拥有管理员帐户的“所有权限”,为什么不能看密码attr?我需要更多特权吗?或者我在LDAP / Apache中需要什么样的配置?
提前致谢