Искать в LDAP с условиями? - PullRequest
0 голосов
/ 10 декабря 2010

Когда я делаю

#!/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;

, я получаю

$VAR1 = bless( {
                 'parent' => bless( {
                        ...
                                    }, 'Net::LDAP' ),
                 'entries' => [
                                bless( {
                                         'changes' => [],
                                         'changetype' => 'modify',
                                         'asn' => {
                                                    'objectName' => 'CN=LIST,OU=test group,OU=M,OU=I,DC=example,DC=com',
                                                    'attributes' => [
                                                                      {
                                                                        'type' => 'objectClass',
                                                                        'vals' => [
                                                                                    'top',
                                                                                    'group'
                                                                                  ]
                                                                      },
                                                                      {
                                                                        'type' => 'cn',
                                                                        'vals' => [
                                                                                    'LIST'
                                                                                  ]
                                                                      },
                                                                      {
                                                                        'type' => 'member',
                                                                        'vals' => [
                                                                                    'CN=user1,OU=BaseUsers,DC=example,DC=com',
                                                                                    'CN=user2,OU=BaseUsers,DC=example,DC=com',
                                                                                  ]
                                                                      },
                                      ...

, где я хотел бы вывести только те из member, которые имеют в своем объекте

objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=example,DC=com

Кто-нибудь знает, как это сделать?

1 Ответ

1 голос
/ 10 декабря 2010
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, просто поместите отпечаток в самый внутренний блок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...