Я использую perl-ldap для поиска и изменения каталогов LDAP.
Все работает нормально, за исключением случаев, когда я пытаюсь найти группу по ее атрибуту "uniqueMember", значение которого равно dn (например,cn=exuser,ou=people,dc=example,dc=com
).
Кажется, что это делает строку фильтра для поиска по члену группы
uniqueMember=cn=exuser,ou=people,dc=example,dc=com
Но это не работает.
Ни один из них не "экранирует"равно в строке, так что результирующая строка при выводе выглядит так, что ее знаки равенства экранированы.И у объекта Net :: LDAP :: Filter нет отличной документации, поэтому я не уверен, как его создать, кроме простой передачи строк фильтра, которые я использовал в первую очередь (что тоже не работает).
Есть предложения?
Я должен добавить, что я уверен, что проблема в том, что поиск не возвращает результаты - результирующий объект поиска имеет 0 счетчиков.
Я могуне показывает точный код, но это что-то вроде этого (были изменены только литералы):
my $filter = "uniqueMember=cn=exuser,ou=people,dc=example,dc=com";
my $result = $ldap->search( base => 'ou=groups,dc=example,dc=com',
filter => $filter);
while(my $entry = $result->pop_entry)
{ ....
....
}
Соединение и привязка к серверу LDAP были выполнены в подпрограмме, которая работает.Я уверен в названиях организационных подразделений, а также в формате значений uniqueMember
.Для строки $filter
я пытался экранировать знаки равенства один раз (\=
) и дважды (\\\\=
).Я попытался использовать Net::LDAP::Filter->new($filter)
- хотя я понимаю, что он принимает строку фильтра, подобную той, что в коде, поэтому это не очень полезно.
Как правильно отформатировать эту строку фильтра