使用PHP脚本更改Active Directory用户密码

时间:2016-03-12 03:56:01

标签: php active-directory ldap

我正在尝试使用一个非常简单的 PHP 脚本来更改 Active Directory 域中的用户密码

以下是我在网上找到的一些脚本:

<?php
$uid = 'Mohammed Noureldin';
$newPassword = '5omeGoodP@ssword';
$bindDn = 'CN=Administrator,OU=UsersOU,DC=example,DC=local';
$bindPassword = 'An0therGoodP@ssword';
$baseDn = 'OU=UsersOU,DC=example,DC=local';
$protocolVersion = 3;

$ldap = ldap_connect('localhost');
if (!ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, $protocolVersion))
{
    exit('Failed to set protocol version to '.$protocolVersion);
}
// bind anonymously so that we can verify if the server really is running
ldap_bind($ldap);
if (ldap_errno($ldap) !== 0)
{
    exit('Could not connect to LDAP server');
}

// now bind with the correct username and password
ldap_bind($ldap, $bindDn, $bindPassword);
if (ldap_errno($ldap) !== 0)
{
    exit('ERROR: '.ldap_error($ldap));
}

$searchResults = ldap_search($ldap, $baseDn, 'cn='.$uid);
// no matching records
if ($searchResults === false)
{
    exit('No user found');
}

if (!is_resource($searchResults))
{
    exit('Error in search results.');
}
// create the unicode password
$len = strlen($newPassword);
$newPass = '"';
for ($i = 0; $i < $len; $i++)
{
    $newPass .= "{$newPassword{$i}}\000";
}
$newPass .= '"';

$entry = ldap_first_entry($ldap, $searchResults);
if (!is_resource($entry))
{
    exit('Couldn\'t get entry');
}
$userDn = ldap_get_dn($ldap, $entry);
if (!$userDn)
{
exit('Errrrrrrrrr1');

}
if (!ldap_modify($ldap, $userDn, array('unicodePwd' => $newPass)))
{
exit(ldap_errno($ldap)." ". ldap_error($ldap));

}
?>

此PHP页面的输出是错误消息:

  

53服务器不愿意执行

脚本根本不起作用(用户的密码 NOT 已更改)。

我知道AD将密码存储在unicodePwd字段中的主要原则(如果到目前为止仍然如此)。

我搜索了该错误消息,但我找不到任何功能性解决方案。

我还尝试过其他一些脚本,但是这个脚本是最好的,因为其他脚本在之前的一些步骤中给了我一些错误(例如绑定)。

我非常感谢解决问题的任何帮助,甚至另一个功能脚本可能是个好主意! 提前谢谢。

0 个答案:

没有答案