使用Net :: LDAP获取所有用户信息

时间:2014-12-05 16:36:21

标签: perl ldap

目前有一个小的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对象)得到了什么,但我不确定它是否包含所有内容或仅包含存储数据的一部分。

1 个答案:

答案 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字段}}