Плохой поисковый фильтр в LDAP при попытке получить пользовательские данные

Я только что приступил к работе с LDAP, поэтому дайте мне знать, если я делаю это совершенно неправильно.

Я работаю с Symfony 1.4, используя плагин bhLDAPAuthPlugin.

Я проверяю логин пользователя с помощью LDAP. Однако в таблице LDAP есть больше данных, которые я хотел бы запросить, используя имя пользователя. Поэтому я пишу эту функцию поиска для фильтрации результатов по имени пользователя:

function user_values($username) {
if (!$username) {
    die ("Username is not there man!");
}

if (!$this->_conn) {
    die ("No Connection.");
}
if (!$this->_base_dn) {
    die ("No Base.");
}
$filter="samaccountname=".$username;

$attributes_ad = array("name");
$result = ldap_search($this->_conn, $this->_base_dn, $filter, $attributes_ad) 
or die ("Error in search query");
$entries = ldap_get_entries($this->_conn, $result);
    return($entries);
}

Я получаю сообщение об ошибке:

Предупреждение: ldap_search(): поиск: неверный поисковый фильтр в /... Ошибка в поисковом запросе

когда я запускаю запрос.

Первые три «если» нужны только для того, чтобы убедиться, что я получаю правильные параметры для поиска. Условие не выполняется при фактическом поиске.

Какие-либо предложения?

ОБНОВЛЕНИЕ

Переменная имени пользователя jtesting

Я вытащил $username из функции до того, как он попал в параметр поиска. Это на самом деле (jtesting). Я собираюсь убрать скобки и посмотреть, решит ли это проблему.


person Carey Estes    schedule 23.07.2012    source источник
comment
Каково значение $username? Пожалуйста, покажите фактическое значение, которое вы передаете...   -  person DaveRandom    schedule 24.07.2012
comment
Я добавил это к вопросу.   -  person Carey Estes    schedule 24.07.2012
comment
Хм... ну, это не должно приводить к плохому фильтру - попробуйте изменить строку, в которой вы назначаете фильтр, на $filter = '(samaccountname='.trim($username).')';   -  person DaveRandom    schedule 24.07.2012
comment
Ознакомьтесь с моим ответом здесь: " title="php ldap добавить функцию для экранирования специальных символов ldap в синтаксисе dn"> stackoverflow.com/questions/8560874/   -  person DaveRandom    schedule 24.07.2012


Ответы (1)


Чтобы использовать круглые скобки в значении утверждения фильтра, круглые скобки должны быть экранированы. Фильтр поиска, в котором значение утверждения равно samAccountName=(jtesting), должен быть закодирован как samAccountName=\28jtesting\29. Все значение утверждения может быть заключено в круглые скобки, которые не экранируются, и в этом случае фильтр становится (samAccountName=\28jtesting\29).

Больше информации

person Terry Gardner    schedule 24.07.2012
comment
+1 Я думал, что это наиболее вероятный ответ. Полезная ссылка: stackoverflow.com/questions/8560874/ :-D - person DaveRandom; 24.07.2012
comment
Это была скобка. Как только они были удалены, поиск завершился успешно. - person Carey Estes; 24.07.2012