2010-03-09 3 views
0

Я выполняю поисковый запрос LDAP в C так;Фильтр LDAP не рассматривается

ldap_search_ext_s(ld, BASEDN, SCOPE, FILTER, attrs, 0, NULL, NULL, NULL, LDAP_NO_LIMIT, &res); 

Мой поиск выполняет штраф за исключением случаев, когда я пытаюсь указать ФИЛЬТР; #define FILTER "uid=*", то есть когда я пытаюсь запустить поиск всех записей LDAP с помощью uid.

К сожалению, мой код просто возвращает первую запись для каждого найденного результата. Таким образом, мой код может найти 50 результатов, но вернет первую запись 50 раз.

Может ли кто-нибудь подозревать, что я могу делать неправильно здесь?

EDIT: Я пошагового мои результаты так:

for (msg = ldap_first_message(ld, res); msg != NULL; msg = ldap_next_message(ld, msg)) 

Любая помощь очень ценится. Рикки.

+0

Фильтр должен быть "(uid = *)" – pm100

+0

Я пробовал это, но результат тот же. – Ricky

ответ

1

Как вы оцениваете результаты? Ваш код должен быть что-то вроде:

LDAPMessage *entry; 

for (entry = ldap_first_entry(ld, res); entry != NULL; entry = ldap_next_entry(ld, entry) 
{ 
    /* Examine "entry" */ 
} 

В частности, убедитесь, что вы передаете entry к ldap_next_entry и не res.

+0

Привет, кафе, спасибо за ваш ответ. Я отредактировал свое оригинальное сообщение, чтобы продемонстрировать, как я перешагиваю свои результаты - это именно то, как вы рекомендовали, но результат тот же. – Ricky

+1

Я считаю, что вам нужно использовать 'ldap _ * _ entry()' вместо 'ldap _ * _ message()'. – caf

+0

Я заменил оба экземпляра 'ldap _ * _ message' на' ldap _ * _ entry', но я все равно получаю тот же результат. – Ricky

0

Вы проверили, что запрос работает так, как ожидается при использовании, например. инструмент поиска в командной строке (если у вас есть доступные утилиты OpenLDAP)?

ldapsearch -b BASEDN '(uid=*)' 
1

Извините, все. Один мой друг указал, что я должен пропустить msg командам ldap_first_entry и тому подобное. Это разрешило проблему и возвратило каждый результат по отдельности.

Благодарим за помощь. Рикки.

Смежные вопросы