目前有一个小的perl脚本,给定的username
使用Net :: LDAP从ActiveDirectory中获取他的电子邮件地址。
搜索部分如下:
my $user = "myuser";
my $mesg = $ldap->search(
base => "dc=some,dc=example,dc=com",
filter => '(&(sAMAccountName=' . $user . ')(mail=*))', #?!?
);
for my $entry ($mesg->entries) {
my $val = $entry->get_value('mail');
say "==$val==";
}
工作正常。
如何修改上述语句以获取给定用户myuser
的所有可用信息?我希望获得一个perl-ish数据结构,例如下一个:
my $alldata = search(... all info for the given $user ... );
say Dumper $alldata; #hashref with all stored informations for the $user
这可能很简单 - 但我是一个完整的AD& LDAP-dumb person ...
编辑:当我转出$msg->entries
(什么是LADP :: Entry对象)得到了什么,但我不确定它是否包含所有内容或仅包含存储数据的一部分。
答案 0 :(得分:2)
我做过类似的事情,我用它来查询LDAP:
my $ldapResponse = $ldap->search(base => $base, filter => $filter, attrs => $attrs);
然后解析它:
if ($ldapResponse && $ldapResponse->count()) {
$ldapResponse->code && die $ldapResponse->error;
my %domainNames = %{$ldapResponse->as_struct};
foreach my $domainName (keys %domainNames) {
my %ldapResponse;
my %dnHash = %{$domainNames{$domainName}};
foreach my $attr (sort(keys %dnHash)) {
# Note that the value for each key of %dnHash is an array,
# so join it together into a string.
my $value = join(" ", @{$dnHash{$attr}});
$ldapResponse{$attr} = $value;
}
// Dump/use %ldapResponse
}
}
我从未尝试在您的代码中使用ldap->entries
,但上述内容适用于我!
我明确指定了一个(长)属性列表($attr
),但也许这可能是您的示例所示,并且您可以通过将该arg跳过{{1来获取所有LDAP字段}}