Как получить все группы из LDAP с помощью Perl - PullRequest
7 голосов
/ 20 декабря 2011

У меня есть Perl-скрипт, который связывается с сервером LDAP и извлекает всех пользователей. Пока это работает хорошо, но я хочу отфильтровать этот поиск, чтобы собрать все группы. Как только у меня будут все группы, пользователь сможет выбрать одну из этих групп, и я покажу ему только пользователей, которые являются членами этой группы. Как я могу сделать эти запросы? Я попробовал это:

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

Но затем некоторые группы повторяются, и мне придется вручную фильтровать результат (и я бы хотел этого избежать). А как насчет второго запроса?

Ответы [ 2 ]

6 голосов
/ 20 декабря 2011

cn. Фильтр для получения всех групп: «(objectclass=group)». Вы можете получить группы только в одном организационном блоке (область действия => «один») или во всех подорганизациях (область действия => '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 
}

Для получения дополнительной помощи см. Введение в perl-ldap


1010 * Отредактировано *

Итак, фильтр, который вы искали:

(&(objectClass=user)(memberof=CN=Mongroupe,OU=MonOU,DC=societe,DC=fr))
3 голосов
/ 20 декабря 2011

Используйте objectclass = *, чтобы получить все.

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