2011-12-20 32 views
7

我有一个Perl脚本,它绑定到LDAP服务器并检索所有用户。到目前为止,它工作良好,但我想筛选该搜索以收集所有组。一旦我拥有了所有的群组,用户就可以选择其中一个群组,并且只会向他展示该群组成员的用户。我怎样才能做这些查询?我尝试了这一个:如何使用Perl检索LDAP中的所有组

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

但是,然后一些组重复,我将不得不手动过滤结果(我想避免这一点)。那么第二个查询呢?

回答

6

cnThe过滤器来获取所有组是 “(objectclass=group)” 你可以retreive组只在一个组织单位(范围=> '一个'),或在所有下级单位(范围=> '子')

$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)) 
+0

第一个查询工作正常(我检索了所有组),但我找不到从给定组中选择用户的方式,没有成员属性。我尝试了* objectclass = user *和* memberOf = group选择的查询*,但它不起作用:( – raz3r 2011-12-20 11:36:40

+1

Gor给定组,成员属性包含成员的区分名称 – JPBlanc 2011-12-20 12:00:57

+0

知道了!检索给定组的所有成员,唯一的问题是,现在我只有用户的CN时,我想要所有的属性。是否有一种方法来过滤objectclass = user? – raz3r 2011-12-20 13:44:18

3

使用objectclass = *获取全部。

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

不错!那我的第二个问题呢?我如何从选定的组中选择所有用户? – raz3r 2011-12-20 09:54:18

+0

嗯..这个搜索不返回群组,正在回应别的东西,但我不明白它。你确定范围和过滤器是正确的吗? – raz3r 2011-12-20 10:04:31

+0

这里的过滤器正在返回每个类的对象。你会想要一个更具体的过滤器。例如,'&(objectCategory = Group)(groupType:1.2.840.113556.1.4.803:= 2147483648)'不仅可以获得组,而且它只会在AD中获得安全组,而不是分发列表。 – Mik 2016-11-16 01:25:23

相关问题