Я использую ldapsearch в окне Debian 9 Linux для запроса MS Active Directory. Я хочу запросить / найти всех пользователей в моей группе "mygroupname". Команда
ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" member
имеет следующий вывод:
dn: CN=mygroupname,OU=user,DC=mydc,DC=com
member: CN=Paula Normal,OU=whatever,OU=...,OU=...,OU=...,DC=mydc,DC=com
member:: Q049QmV0dGluYSBUw7Zs...................9nbmUsT1U9RGV1dHNjwdGEsREM9Y29t
member: CN=Peter Testman,OU=whatever2,OU=...,OU=...,OU=...,DC=mydc,DC=com
...
Я сравнил вывод с AD-GUI. Вторая запись должна быть другим допустимым пользователем, но результат неожиданный и нечитаемый. Информация о CN, OU, DC отсутствует. Я обнаружил, что странные записи действительны, но закодированы в base64.
В чем вина? Есть ли коррупция в AD? Моя команда запроса неверна? Почему некоторые записи закодированы в base64. Как получить правильный результат?
Причина неожиданного вывода - это НЕ-ASCII символ в cn-name. Строка, начинающаяся с "member ::", указывает значение в кодировке base64, которое может быть декодировано (например, echo "$value" | base64 -d -
)
Результаты поиска ldapsearch отображаются с использованием расширенной версии LDIF.
Синтаксис LDIF (см. RFC 2849) должен быть чистым для ASCII.
Быстрый обходной путь для получения читаемого вывода можно сделать с помощью оболочки, например
myldapsearch() { ldapsearch $* | perl -MMIME::Base64 -n -00 -e 's/\n +//g;s/(?<=:: )(\S+)/decode_base64($1)/eg;print'; }
Видел в этот вопрос.
Ваша командная строка
ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" member
явно ограничивает атрибуты, запрашиваемые при поиске, до член.
Просто попробуйте добавить нужные имена атрибутов в качестве дополнительных аргументов командной строки:
ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" cn ou o member
Смотрите также: ldapsearch (1)
Кроме того, вы должны узнать о синтаксисе LDIF (см. RFC 2849), который должен быть чистым для ASCII. Два двойных двоеточия после имени типа атрибута означают, что значение было закодировано по основанию, например из-за символа NON-ASCII в имени. Используйте приличный модуль LDIF для декодирования ldapsearch output или лучше используйте модуль LDAP для вашего любимого языка сценариев.