0

解雇/別居、または休職する人々に対する私たちのポリシーには、記録保持とセキュリティのために、ADアカウントへのいくつかの変更が含まれます. これらの変更の 1 つは、アカウント (ログイン名、表示名、および dn) の名前を、元の名前にヘルプ デスク チケット番号が追加された値に変更することです。

ldap_rename() を使用して Active Directory の「名前」属性を変更し、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);
 }
?>

そうそう、これを実現するために私は何をしなければならないのですか?

4

1 に答える 1

0

受信している「実装固有」のエラー メッセージは、特定の AD 制限を満たしていないため、sAMAccountName が無効であることを意味します。sAMAccountName 属性は 20 文字を超えることはできず、次のいずれも含めることはできません: " [ ] : ; | = + * ? < > / \ ,. チケット番号が追加されたユーザー名の例を見ると役立つ場合があります。

于 2015-02-11T00:20:58.903 に答える