PHP LDAP更改Active Directory samAccountName?

时间:2013-01-23 17:01:17

标签: php active-directory ldap

我们针对被终止/分居或休假的人的政策涉及对其AD帐户进行少量更改,以保持记录和安全。其中一项更改是将帐户(登录名,显示名称和dn)重命名为包含附加了帮助台票号的原始名称的值。

我已经能够使用ldap_rename()来更改活动目录“name”属性,从而更改DN。我可以使用ldap_modify()或ldap_mod_replace()更改displayName属性。我似乎无法做的是使用其中任何一个更改samAccountName。下面是我正在使用的代码的核心。我得到的错误取决于我使用的功能,并在下面列出。

我知道在Active Directory中使用PHP LDAP有一些细微差别,但我发现很难相信我已经能够完成所有工作,包括更改密码,我无法更改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);
 }
?>

所以是的,我应该做些什么才能实现这一目标?

1 个答案:

答案 0 :(得分:0)

&#34;具体实施&#34;您收到的错误消息表示您的sAMAccountName无效,因为它不符合特定的AD限制。 sAMAccountName属性不能超过20个字符,并且不能包含以下任何内容:" [ ] : ; | = + * ? < > / \ ,。查看附加了票号的示例用户名可能会有所帮助。