При поиске LDAP возвращается 1, если запись найдена.

И снова здравствуйте, Stackoverflow,

Есть ли способ, чтобы ldapsearch возвращал «1», если найдена одна запись, 0, если запись не найдена, или 2 (или больше), если в ldap найдено несколько записей. Я хотел бы иметь возможность проверить запись, и если возвращается 1, то предпринять какое-то предопределенное действие. Я знаю, что могу установить $ something = 0, затем выполнить ldapsearch >> $ something, а затем проверить, если $ something! = 0, но это не будет эффективным использованием памяти или времени процесса и может привести к неожиданному "веселью" в моем скрипте. . Это также потребовало бы дополнительных тестов, которые должны быть выполнены с чем-то $, что увеличит время пакетного задания.

ldapsearch -LLL -h ds389.some.org -p 389 -D "uid = someAdmin, o = some.org" -w SOMEpassWord -b "ou = People, o = some.org" - s sub '(& (RMailAliases = zzz) (! (RMid = d *)))'


person Evil Genius    schedule 08.09.2014    source источник
comment
Если это не упомянуто в документации, нет.   -  person user207421    schedule 09.09.2014
comment
спасибо за ваш вклад. Вы правы, что не существует документированного метода. Я отметил верный ответ, если вам интересно.   -  person Evil Genius    schedule 09.09.2014


Ответы (2)


echo `ldapsearch -LLL -h ds389.some.org -p 389 -D "uid=someAdmin,o=some.org" -w SOMEpassWord -b "ou=People,o=some.org" -s sub '(&(RMailAliases=zzz)(!(RMid=d*)))' dn | grep dn: | wc -l` должен делать то, что ты хочешь.

person heiglandreas    schedule 09.09.2014
comment
Спасибо, сэр. Нет ничего лучше, чем поискать общий ответ для всех записей с последующим его подсчетом! Спасибо - person Evil Genius; 09.09.2014
comment
Классный ответ, даже если верно, что LDAP не может вернуть 1, 0 или 2. - person jwilleke; 10.09.2014

Поразительно, но ldapsearch (начиная с 2.4.44) не возвращает ненулевой результат при несоответствии события. На странице руководства:

ДИАГНОСТИКА Статус выхода равен нулю, если ошибок не происходит. Ошибки приводят к ненулевому состоянию выхода и диагностическому сообщению, записанному в стандартную ошибку.

Учитывая возраст этого продукта, вряд ли это когда-либо изменится.

Разумное решение предлагает @heiglandreas, но могло бы быть лучше:

ldapsearch -LLL <ldap-connection-options <ldap-search-query> dn |
grep -q ^dn:

Атрибут dn выводится ldapsearch независимо, поэтому его указание минимизирует вывод, а опция -LLL подавляет избыточный вывод ldapsearch. Параметр -q команды POSIX grep гарантирует, что весь конвейер завершится с ненулевым значением, если совпадение не найдено.

Если вам нужен результат в виде текстовой строки, просто введите echo $? после указанного выше. В качестве альтернативы вы можете заменить grep на grep -c ^dn:, который будет выводить 1, если он найден, и 0, если не найден.

person Otheus    schedule 04.10.2019
comment
Чтобы сделать это более доступным для Google: это полезно для реализации проверки работоспособности Docker для контейнеров OpenLDAP. - person Raphael; 01.07.2021