【发布时间】:2013-01-23 17:01:17
【问题描述】:
我们针对被解雇/分居或请假的人员的政策涉及对其 AD 帐户进行一些更改,以保持记录和安全。其中一项更改是将帐户(登录名、显示名和 dn)重命名为包含原始名称和附加服务台票号的值。
我已经能够使用 ldap_rename() 来更改活动目录的“名称”属性,从而更改 DN。我可以使用 ldap_modify() 或 ldap_mod_replace() 更改 displayName 属性。我似乎不能做的是使用其中任何一个更改 samAccountName 。下面是我正在使用的代码的核心。我得到的错误取决于我使用的函数,并在下面列出。
我知道将 PHP LDAP 与 Active Directory 结合使用存在一些细微差别,但我很难相信我已经能够完成包括更改密码在内的所有操作,而且我无法更改 samAccountName...帮助?
<?php
$connection=ldap_connect(domain.local,389);
ldap_set_option($connection,LDAP_OPT_PROTOCOL_VERSION,3);
ldap_set_option($connection,LDAP_OPT_REFERRALS,0);
ldap_start_tls($connection);
ldap_bind($connection,$username,$password);
$accountName=$_POST["accountName"];
$ticketNumber=$_POST["ticketNumber"];
$baseDn="dc=domain,dc=local";
$attribs=array("samaccountname","dn","name","displayname","description","info","memberof");
$search=ldap_search($connection,$baseDn,"(samaccountname=".$accountName.")",$attribs);
$result=ldap_get_entries($connection,$search);
// ldap_modify returns error 80: Internal (implementation specific) error.
foreach ($result as $account) {
$newValues=array("samaccountname"=>$account["samaccountname"][0]."-".$ticketNumber)
ldap_modify($connection,$account["dn"],$newValues);
}
// ldap_mod_replace returns error 80: Internal (implementation specific) error.)
foreach ($result as $account) {
$newValues=array("samaccountname"=>$account["samaccountname"][0]."-".$ticketNumber)
ldap_mod_replace($connection,$account["dn"],$newValues);
}
?>
所以是的,我应该做些什么来实现这一点?
【问题讨论】:
-
您的请求票号长度是多少?您的 samaccountname 有效吗?
-
您的代码容易受到 LDAP 注入攻击。
-
@user2004615 你能用LDAP S/W手动完成吗
-
@SparKot 抱歉,我刚刚回到这个话题。是的,我可以使用 Apache Directory Studio。
标签: php active-directory ldap