ldap_mod_replace()[function.ldap-mod-replace]:修改:服务器不愿意执行

Vic*_*son 6 php ldap active-directory windows-server-2008-r2

得到错误:

服务器不愿意执行

同时通过PHP更改AD中的unicodePwd.但是,我能够搜索,添加,删除和修改用户的任何属性.

使用管理员帐户绑定和管理员拥有更改任何用户密码的完全权限.

这是我正在使用的代码:

<?php
$dn = "CN=Vishal Makwana,OU=Address Book,DC=example,DC=com";
$ad = ldap_connect("ldap://example.com")
      or die("Couldn't connect to AD!");
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
$bd = ldap_bind($ad,"admin@example.com","admin1");

    if($bd) {
        echo "AD bind successfully";  
      }
    else {
        echo "Couldn't bind AD";;
    }

$user["unicodePwd"] = "asdf1234";

$result = ldap_mod_replace($ad, $dn, $user);
if ($result) echo "User modified!"; else
             echo "There was a problem!";

ldap_unbind($ad);
?>
Run Code Online (Sandbox Code Playgroud)

Dav*_*har 9

要通过LDAP在AD中设置密码,您需要做很多事情.

  • 您需要使用SSL连接(ldaps://)

  • 密码需要用引号括起来

  • (引用)密码需要以16位unicode(UTF-16LE)编码

假设您尝试设置的密码是普通的ascii字符,则可以通过在ascii字符串的每个字节后添加\ 000字节来完成unicode转换,如此代码示例所示.

所以你的例子看起来像:

$newpassword = "asdf1234";
$newpassword = "\"" . $newpassword . "\"";
$len = strlen($newpassword);
for ($i = 0; $i < $len; $i++) $newpass .= "{$newpassword{$i}}\000";
$user["unicodePwd"] = $newpass;
Run Code Online (Sandbox Code Playgroud)