如何使用Perl从LDAP检索所有组

时间:2011-12-20 08:33:44

标签: perl active-directory ldap

我有一个绑定到LDAP服务器并检索所有用户的Perl脚本。到目前为止,它运作良好,但我想过滤搜索,以收集所有组。一旦我拥有所有组,用户就可以选择其中一个组,我将仅向他显示属于该组的用户。我该怎么办这些疑问?我试过这个:

my $mesg = $ldap->search(
    base => $base,
    filter => '(objectclass=user)',
    attrs => ['memberOf']
);

但是后来有些组重复了,我将不得不手动过滤结果(我想避免这种情况)。那么第二个查询呢?

2 个答案:

答案 0 :(得分:6)

cn获取所有群组的过滤器是" (objectclass=group)"您只能在一个organizationalUnit(范围=>'一个')或所有子组织(范围=>' sub')

中检索群组
$mesg = $ldap->search(  filter=>"(&(objectclass=group)(cn=the group choosen by the user)", 
                        base=>"ou=Monou,dc=societe,dc=fr"
                        scope=>"sub"
                        attrs=> ['cn', 'member']);
@entries = $mesg->entries;
foreach $entry (@entries)
{
    $entry->dump;
    @member = $entry->get_value("member");  # returns all members 
}

如需更多帮助,请参阅An Introduction to perl-ldap


被修改

所以你要找的过滤器是:

(&(objectClass=user)(memberof=CN=Mongroupe,OU=MonOU,DC=societe,DC=fr))

答案 1 :(得分:3)

使用objectclass = *获取所有内容。

my $msg = $ldap->search(base => $dn,
            scope => 'one',
            filter => "(objectclass=*)");
$msg->all_entries;