Как сделать сложный запрос с помощью Perl Net :: LDAP? - PullRequest
5 голосов
/ 28 октября 2008

У меня проблемы с выполнением сложного запроса к LDAP-серверу нашей компании. Я использую следующий Perl-скрипт:

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

die "Can't connect to LDAP-Server: $@\n" 
    unless $ldap = Net::LDAP->new( 'xLDAPx' );


foreach my $filter ( 'ou=Personal', 'ou=BAR', 'ou=Personal,ou=BAR', 'ou=Personal,ou=FOO,o=FOO,dc=foo,dc=com' )
{ 
    $mesg = $ldap->search( base => "o=FOO,dc=foo,dc=com", filter => $filter );
    print Dumper($mesg), "\n\n";
}

Пока первые два фильтра работают (как при возвращении ожидаемых значений), последний и сложный не работают. Возвращает пустой массив. Что меня действительно удивляет, так это то, что точно такая же строка запроса работает, когда я использую ее с таким инструментом, как браузер Softerra LDAP.

Я также пытался выполнить тот же запрос, используя PHP ldap_search & co, но безрезультатно.

Может кто-нибудь пролить свет на это?

Спасибо за чтение

Holli

Edit: Это структура сервера:

Server
    ou=FOO
        ou=...
        ou=Personal
            uid=something

Мне нужен список идентификаторов.

Ответы [ 3 ]

5 голосов
/ 28 октября 2008

Я думаю, вы хотите, чтобы это было больше похоже на (&(ou=Personal)(ou=FOO)(o=FOO)(dc=foo)(dc=com)). Но вы не совсем понимаете, что именно вы хотите, поэтому я не могу сделать фильтр для вас.

Отредактировано, чтобы добавить: я предполагаю, что это то, что вы хотите сделать: (|(ou=Personal)(ou=FOO))

4 голосов
/ 28 октября 2008

Причина в том, что вы предоставляете не синтаксически правильные строки фильтра, а части DN. Я не могу себе представить, что это работает в Ldap Browser - я попробовал себя безуспешно.

Первые две являются правильными строками фильтра. Они фильтруют один атрибут объекта «({attribute} = {value})». Первый ("ou = Personal") возвращает любое подразделение с именем "Personal" в вашей поисковой базе.

Если вы объясните более подробно, что вы пытаетесь найти, я, вероятно, скажу вам, какое выражение фильтра вам нужно.

2 голосов
/ 28 октября 2008

Написать фильтр, соответствующий RFC 2254 а потом посмотри что получится. Вам не нужен сложный запрос, вам нужен один атрибут для каждой записи в одной ветви. Посмотрите на аргумент attrs для метода поиска.

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