最近我遇到了同样的问题,发现了这篇文章。显然,密码修改被认为是管理密码重置,您必须为 AD 指定其他选项以应用其规则。
根据帖子,该控件必须在服务器上可用。它存在于 Windows Server 2008 R2 Service Pack 1 中,并且可以使用此修补程序安装在 2008 R2 中:http: //support.microsoft.com/ ?id=2386717
然后在对 php 代码发出修改命令之前配置选项:
$ctrl1 = array(
// LDAP_SERVER_POLICY_HINTS_OID for Windows 2012 and above
"oid" => "1.2.840.113556.1.4.2239",
"value" => sprintf("%c%c%c%c%c", 48, 3, 2, 1, 1));
$ctrl2 = array(
// LDAP_SERVER_POLICY_HINTS_DEPRECATED_OID for Windows 2008 R2 SP1 and above
"oid" => "1.2.840.113556.1.4.2066",
"value" => sprintf("%c%c%c%c%c", 48, 3, 2, 1, 1));
if (!ldap_set_option($ds, LDAP_OPT_SERVER_CONTROLS, array($ctrl1, $ctrl2))) {
error_log("ERROR: Failed to set server controls");
}
$result = ldap_mod_replace($ds, $dn, $entry);
非常感谢帖子作者 bmaupin(找不到他/她的名字)。我决定回答这个问题,因为我在寻找相同问题的解决方案时来到这里。