4

これは StackOverFlow に関する私の最初の質問です。何か間違ったことをした場合はお知らせください。

ユーザーがメンバーであるリスト グループを識別するために LDAP 検索を実行する perl スクリプトを作成しています。この件に関する perldocs を読み、この Web サイトでいくつかの例を見つけましたが、スクリプトを適切に実行することができませんでした。

これが私のコードです:

#!/usr/bin/perl

use strict;
use warnings;
use Net::LDAP;

my $ldap;
my $ldapuser = "MVS\\user";
my $ldappass = "passw0rd";
my $searchbase = "DC=dom,DC=site,DC=labs,DC=domain,DC=net";
my $attrs = "sAMAccountName, sn, givenname, memberOf";
my $filter="(samAccountName=user)";
my $result;

# ensure the ldap connection is made
print "Connecting to LDAP...\n";
$_ = $ldap = Net::LDAP->new('dc1.mvs.cso.labs.rim.net')     or die "$@";

# ensure the bind is successful
print 'Binding....';
$_ = $ldap->bind ("$ldapuser", password=>$ldappass, version=>3);
print $_->error_text();


$result = $ldap->search(base=>"$searchbase", filter=>"$filter", attrs=>[$attrs]);

my $max;
my $i;
my $entry;
my $first;
my $last;
my $login;
my @memberOf;

$max = $result->count;
print "Count: $max\n";

for ($i=0;$i<$max;$i++) {
$entry = $result->entry($i);
$last = $entry->get_value('sn');
$login = $entry->get_value('sAMAccountName');
@memberOf = $entry->get_value('memberOf');

print "$first $last\n";
print "$login\n";
print "@memberOf\n";

}
$ldap->unbind;
$ldap->disconnect;

このコードを実行したときの結果は次のとおりです。

Connecting to LDAP...

Binding....Operation completed without error
Count: 1
Use of uninitialized value $first in concatenation (.) or string at ./ldap_test.cgi line 43, <DATA> line 604.
Use of uninitialized value $last in concatenation (.) or string at ./ldap_test.cgi line 43, <DATA> line 604.
Use of uninitialized value $login in concatenation (.) or string at ./ldap_test.cgi line 44, <DATA> line 604.

私が言えることから、実行時に $entry に値が返されないように思えます。

$entry = $result->entry($i);

しかし、私は間違っている可能性があります。どんな助けでも大歓迎です。

ありがとう、

4

1 に答える 1

4

問題は、検索の属性部分にあります。文字列を指定すると、配列参照が期待されます。

違う:

my $attrs = "sAMAccountName, sn, givenname, memberOf";
$result = $ldap->search(base=>"$searchbase", filter=>"$filter", attrs=>[$attrs]);

良い:

my $attrs = ["sAMAccountName", "sn", "givenname", "memberOf"];
$result = $ldap->search(base=>"$searchbase", filter=>"$filter", attrs=>$attrs);
于 2012-10-30T15:18:20.990 に答える