0
私は1つのOUだけを使用するとうまく動作するこのスクリプトを持っています。しかし、$ ldapbaseを配列に入れて複数のOUを定義するとすぐに、ldap_get_entriesとldap_modifyの動作が停止します。私は理由を知っていますが、それに応じてコードを修正する方法がわかりません。LDAPアクティブディレクトリを複数変更するOUを検索
OUを定義する代わりに、またはsamaccountname = $ usernameのOUを取得する代わりに、フォレストルート全体をセッショニングする方法がありますか。
<?php
$username=$_GET['username'];
if(isset($_POST['printpin'])) {
$printpin=$_POST['printpin'];
$domadlogin = '[email protected]';
$domadpw = 'pass';
$ldapServer = "dc.dom.co.uk";
$ldapBase[] = "OU=Users1,DC=dom,DC=co,DC=uk";
$ldapBase[] = "OU=Users2,DC=dom,DC=co,DC=uk";
$ldapBase[] = "OU=Users3,DC=dom,DC=co,DC=uk";
$ds = ldap_connect($ldapServer);
if (!$ds) {die('Cannot Connect to LDAP server');}
$ldapBind = ldap_bind($ds,$domadlogin,$domadpw);
if (!$ldapBind) {die('Cannot Bind to LDAP server');}
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
foreach($ldapBase as $dn){
$sr = ldap_search($ds, $dn, "(samaccountname=$username)");
}
$ent= ldap_get_entries($ds,$sr);
$dn=$ent[0]["dn"];
$newinfo['primaryTelexNumber']= $printpin;
$save = ldap_modify($ds, $dn, $newinfo);
if (!$save) {die('Cannot save to LDAP server');}
?>
<p>Your new PIN number has now been set.</p>
<p>Username: <?php echo $username; ?><br />PIN:<?php echo $printpin; ?></p>
<?php
}
else {
?>
<p>Username: <?php echo $username; ?></p>
<form action="pin.php?username=<?php echo $username; ?>" method="POST">
PIN: <input type="text" name="printpin" title="printpin"/>
<input type="hidden" name="username" value="<?php echo $username; ?>"/>
<input type="submit" value="Save">
</form>
<?php
}
?>
ご迷惑をおかけして申し訳ございません。
ldap_modify()[function.ldap-modify]を取得しようとした後に感謝します。変更:ldap_modifyの正しいOUを選択するか、それらを使用しようとしていますか。すべてそれぞれのために。私は、ユーザーが所属するOUを使用してレコードを変更したいだけです。 – Codded
ユーザーエントリを変更する権利がないようです。あなたが正しいエントリーを変更していることを確認してください($ dnを印刷してください)。別のツール(例:Apache Directory Studio)を使用してエントリを変更することもできます。できない場合は、LDAP構成を修正する必要があります。 – Furgas