ldap_mod_replace () : Изменить: сервер не желает выполнять

Получение ошибки:

Сервер не желает выполнять

при изменении unicodePwd в AD через PHP. Однако я могу искать, добавлять, удалять и изменять любые атрибуты пользователей.

Использование учетной записи администратора для привязки и администрирования имеет полные права на изменение паролей для любых пользователей.

Вот код, который я использую:

    <?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); ?> 

    Related of "ldap_mod_replace () : Изменить: сервер не желает выполнять"

    Есть несколько вещей, которые вам нужно, чтобы точно установить пароль в AD через LDAP.

    • вам нужно использовать SSL-соединение (ldaps: //)

    • пароль должен быть заключен в кавычки

    • (цитируемый) пароль должен быть закодирован в 16-разрядном юникоде (UTF-16LE)

    Предполагая, что пароль, который вы пытаетесь установить, является обычным символом ascii, преобразование юникода может быть выполнено добавлением 1000 байтов после каждого байта строки ascii, как показано в этом примере кода .

    Таким образом, ваш пример будет выглядеть так:

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

    После долгого поиска и много времени, я наконец смог изменить пароль пользователя активного каталога из PHP-кода, используя библиотеку LDAP.

    Нам нужно соединение LDAP с активным сервером каталогов из кода PHP; и вам нужно изменить поле unicodePwd .

     ldap_connect(ldaps://IP, 636); ldap_connect(ldaps://IP, 389);