Я использую ldapsearch на Linux-сервере Debian 9 для запроса 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. Как получить правильный результат?
Причиной неожиданного выхода является NON-ASCII-чар в cn-именее.
Строка, начинающаяся с "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'; }
Seen in this question.
Ваша командная строка
ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" member
явно ограничивает запрашиваемые при поиске атрибуты до 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 или лучше используйте LDAP-модуль для вашего любимого скриптового языка.
.