perlでactive directoryに登録
perlスクリプトを使いactive directoryにユーザを登録したいと思っております。
perlもactive directoryも初めてで理解していませんが
仕事でどうしてもやらなくてはならないためどなたかわかる方教えて頂けますと助かります。
環境:
windows server 2008R2
active directory 2008
centos 6
やりたいことは、perlを使いactive directoryにユーザ登録をしたいのですが
どうやっても登録することができません。
必要なperlモジュールはインストールしてるつもりです。
以下がスクリプトとなります。
=================ここから==================
#!/usr/bin/perl
use strict;
use Net::LDAP;
my $ldap_host = 'xxx.xxx.xxx.xxx';
my $bind_dn = 'cn=admin,o=example,c=com';
my $bind_pw = 'password';
my $ldap = Net::LDAP->new( $ldap_host ) or die "$@ $!";
$ldap->bind( $bind_dn, password => $bind_pw ) or die "$@ $!";
$uid = "localuser";
$suffix = ",ou=People,dc=example,dc=com";
$dn = "uid=" . $uid . $suffix;
$addResult = $ldap->add( $dn,
attr => [
'cn' => $uid,
'sn' => $uid,
'mail' => $uid . '@example.com',
'uid' => $uid,
'objectClass' => [
'top',
'person',
'organizationalPerson'
],
]
);
if ( $addResult->code == 0 ) {
print "added $dn\n";
} else {
$ldap->unbind;
warn "failed to add entry: ", $addResult->error, "\n";
exit( $addResult->code );
}
=================ここまで===================
上記を実行すると以下のエラーコードが返ってきます。
comment:AcceptSecurityContext error,
このエラーについてとあるサイトをみると
「ユーザーは次回ログオン時にパスワード変更が必要」にチェックをいれていると
出力されてしまうとかかれていたのでチェックを外しているのですが結果は同じです。
上記のスクリプトは以下のサイトを参考にして作ったのですが
わからない部分があります。
http://d.hatena.ne.jp/askadna/20080326
http://www.knowd.co.jp/yamazaki/index.php?q=node/134
$ldap->addのメソッド?に$dnとattr~~というパラメータを与えているのですが
配列の階層が異なっていますがaddメソッドはこれを認識することはできるのでしょうか。
例えば、 $ldap->addを部分を消して
$addResult = ( $dn,
attr => [
'cn' => $uid,
~以下省略~
以下のようにprintで表示すると配列の階層はバラバラです。
これでaddは正常に階層をみて動作するのでしょうかということです。
print $addResult[0]・・・・uid=localuser,ou=People,dc=example,dc=com
print $addResult[1]・・・・attr
print $addResult[1]->[0]・・・・cn
print $addResult[1]->[1]・・・・localuser
print $addResult[1]->[2]・・・・sn
~~省略~~~
ちなみに、searchメソッドでldapの情報の取得はできています。
少し気になるのはActive directoryに必須項目があり
それをattrに格納させていないことが原因だったりするのでしょうか。
Active Directoryの必須項目というのがわかりませんが基本的に例えばSIDなどは
システム自動で入れてくれるとおもっていますが・・・
上記のスクリプトでADにバインドできていることがAD側のログで確認できております。
addでこけているみたいなのですが、どうかよろしくお願い致します。
お礼
ご回答、ありがとうございます。 「普通、UID.GID を一致させる」とのことで、安心しました。 一致させないと、思わぬ所で、問題が出るのでしょうか? というか、一致させなかった場合を考えるより、一致させる方向で考える方が建設的な考え方ですね。