Perl 使用条件在LDAP中搜索?

Perl 使用条件在LDAP中搜索?,perl,ldap,Perl,Ldap,当我这样做的时候 #!/usr/bin/perl -w use strict; use Net::LDAP; use Data::Dumper; my $dn="..."; my $password="xxx"; my $ldap = Net::LDAP->new('example.com') or die "$@"; my $mesg = $ldap->bind($dn, password => $password); if ($mesg->code) { die

当我这样做的时候

#!/usr/bin/perl -w

use strict;
use Net::LDAP;
use Data::Dumper;

my $dn="...";
my $password="xxx";

my $ldap = Net::LDAP->new('example.com') or die "$@";
my $mesg = $ldap->bind($dn, password => $password);
if ($mesg->code) { die "uuuu $mesg"; }

$mesg = $ldap->search(
    base => "dc=example,dc=com",
    filter => "(name=LIST)",
    );

print Dumper $mesg;
我明白了

在这里,我只想输出那些来自
成员
的对象中包含

objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=example,DC=com
有人知道怎么做吗

foreach my $entry (@{$mesg->{'entries'}})
{
    my $match = 0;
    my $name = $entry->{'asn'}->{'objectName'};

    foreach my $attr (@{$entry->{'asn'}->{'attributes'}})
    {
        if('member' eq $attr->{'type'})
        {
            foreach my $val (@{$attr->{'vals'}})
            {
                if($val =~ /^CN=.*,CN=.*,CN=.*,DC=example,DC=com$/)
                {
                    $match = 1;
                    last;
                }
            }
         }
    }

    if($match)
    {
        print $name;
    }
}
对于上面的示例数据,这将不返回匹配项,因为没有“成员”与您指定的搜索模式匹配。另外,我不确定是否要输出对象名(根据我的代码)或匹配字符串。如果不需要后者,
$match
,只需在最里面的块中打印即可。

使用LDAP客户端编写和测试查询。
(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=example,DC=com)
是一个有效的LDAP筛选器,您可以使用
&
操作符将其与另一个筛选器组合:
(&(filter1)(过滤器2))
foreach my $entry (@{$mesg->{'entries'}})
{
    my $match = 0;
    my $name = $entry->{'asn'}->{'objectName'};

    foreach my $attr (@{$entry->{'asn'}->{'attributes'}})
    {
        if('member' eq $attr->{'type'})
        {
            foreach my $val (@{$attr->{'vals'}})
            {
                if($val =~ /^CN=.*,CN=.*,CN=.*,DC=example,DC=com$/)
                {
                    $match = 1;
                    last;
                }
            }
         }
    }

    if($match)
    {
        print $name;
    }
}