Active Directory — ошибка обновления пароля AD с использованием переполнения стека.

Привет, я написал следующий скрипт для обновления пароля для конкретного пользователя

<?php

function create_ldap_connection() {

$ip = "192.168.168.1";
$ldaps_url = "192.168.168.1";

$port = 389;
$ldap_conn = ldap_connect($ldaps_url, $port) or die("Sorry! Could not connect to LDAP server ($ip)");

$password = "password";
$binddn = "CN=Administrator,CN=Users,DC=ad,DC=test,DC=com";
$result = ldap_bind( $ldap_conn, $binddn, $password ) or die("  Error: Couldn't bind to server using provided credentials!");

if($result) {

return $ldap_conn;
}
else {
die (" Error: Couldn't bind to server with supplied credentials!");
}
}

function get_user_dn($ldap_conn, $user_name) {

/* Write the below details as per your AD setting */
$basedn = "OU=ITS Users,DC=ad,DC=test,DC=com";

/* Search the user details in AD server */
$searchResults = ldap_search($ldap_conn, $basedn, $user_name);

if(!is_resource($searchResults)) die('Error in search results.');
/* Get the first entry from the searched result */
$entry = ldap_first_entry($ldap_conn, $searchResults);

$info = ldap_get_entries($ldap_conn, $searchResults);
echo $info["count"]." entries returned\n";

return ldap_get_dn($ldap_conn, $entry);
}

function pwd_encryption($newPassword) {

$newPassword = "\"" . $newPassword . "\"";
$len = strlen($newPassword);
$newPassw = "";

for ($i = 0; $i < $len; $i++) {

$newPassw .= "{$newPassword {$i}}\000";
}

$userdata["unicodePwd"] = $newPassw;
return $userdata;
}

$user_name = "(|(sn=archieg*)(SamAccountName=archieg*))";

$user_password = "password!1234";
$ldap_conn = create_ldap_connection();
$userDn = get_user_dn($ldap_conn, $user_name);
$userdata = pwd_encryption ($user_password);

print_r($userdata);

//$result = ldap_mod_replace($ldap_conn, $userDn , $userdata);  /* Check whether the password updated successfully or not. */
$result = ldap_modify($ldap_conn, $userDn , $userdata);

if($result) {

echo "Success attempting to modify password in AD";
}
else {

echo "Error: Please try again later!\n";
$e = ldap_error($ldap_conn);
$e_no = ldap_errno($ldap_conn);
echo $e . "\n";
echo $e_no . "\n";
}

?>

Однако, когда я запускаю это, я получаю следующую ошибку,

[root@web chpasswd]# php ad_change.php
PHP Warning:  Module 'intl' already loaded in Unknown on line 0
1 entries returned
Array
(
[unicodePwd] => "password!1234")
Error: Please try again later!
Server is unwilling to perform
53
[root@web chpasswd]#

Что я здесь не так делаю? Я играл с шифрованием, но это тоже не помогло. У меня есть Windows Server 2012 R2 Active Directory.

Большое спасибо

2

Решение

Выяснилось, что это не проблема с моим кодом. Мне пришлось настроить центр сертификации на моем сервере. Это то, что я сделал,

Убедитесь, что в вашей установке PHP включены оба расширения: ldap и openssl.

Процедура для Windows / Linux

Проверьте настройки файла ldap.conf.

Для Windows убедитесь, что файл C: \ openldap \ sysconf \ ldap.conf существует.

Для Linux убедитесь, что файл /etc/openldap/ldap.conf существует. Если это не так, создайте его.

Как для Linux, так и для Windows файл ldap.conf должен содержать следующую строку: ** —

TLS_REQCERT никогда

Если вы хотите, чтобы php проверил ssl-сертификат ldap-сервера с центром сертификации, выдавшим этот сертификат, вам нужно поместить корневой сертификат здесь:
Экспортируйте доверенный корневой сертификат. (Подробнее см. Шаг 1 в разделе Как проверить LDAP через SSL).

Используйте эту команду для преобразования DER в PEM:

openssl x509 -in RootCert.der -информировать DER -out RootCert.pem -outform PEM

В Windows вы можете скачать двоичные файлы openssl с этих двух сайтов:

http://gnuwin32.sourceforge.net/packages.html

http://www.ShininglightPro.com/

Теперь скопируйте файл rootcert.pem в папку certs:

Для Linux /etc/openldap/cert/rootcert.pem

Для Windows: C: \ openldap \ sysconf \ certs \ rootcert.pem

Как для Linux, так и для Windows файл ldap.conf должен содержать следующую строку:

(Linux) TLS_CACERT /etc/openldap/cert/rootcert.pem

(Windows) TLS_CACERT c: \ OpenLDAP \ sysconf \ certs \ rootcert.pem

Вы можете найти мой последний код на https://github.com/achintha85/AD_User_Password_Change_PHP

Надеюсь, это поможет кому-то в будущем.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector