Форум проекта Pro-LDAP.ru
Общие вопросы по LDAP => Общий раздел => Тема начата: marawu от 23 Октябрь 2017, 08:12:18
-
Добрый день, не могу понять как написать фильтр, который будет искать пользователей, которые не состоят ни в каких группах заданных по маске. Пробовал так:
ldapsearch -o ldif-wrap=no -LLL -xZZWD "uid=user.name,ou=People,dc=example,dc=com" -b ou=People,dc=example,dc=com '(!(memberof=cn=*.dept,ou=Groups,dc=example,dc=com))'
Но я так понял memberof не понимает маски. Думал сделать небольшой скрипт на bash, но не могу придумать логику :( Единственное, что смог придумать это так:
Получаем список групп
Получаем список пользователей
Через цикл прогоняем пользователя по каждой группе
Если нет ни в одной, то вывести его имя
Но возможно есть способ проще?
-
Здравствуйте!
Добрый день, не могу понять как написать фильтр, который будет искать пользователей, которые не состоят ни в каких группах заданных по маске.
Интересно, где такое может понадобиться?
ldapsearch -o ldif-wrap=no -LLL -xZZWD "uid=user.name,ou=People,dc=example,dc=com" -b ou=People,dc=example,dc=com '(!(memberof=cn=*.dept,ou=Groups,dc=example,dc=com))'
Но я так понял memberof не понимает маски.
У memberOf синтаксис DN, атрибуты с таким синтаксисом поддерживают только правило соответствия EQUALITY, то есть полное совпадение. Совпадение по шаблону (SUBSTR) для них не предусмотрено.
Думал сделать небольшой скрипт на bash, но не могу придумать логику :( Единственное, что смог придумать это так:
Получаем список групп
Получаем список пользователей
Через цикл прогоняем пользователя по каждой группе
Если нет ни в одной, то вывести его имя
Но возможно есть способ проще?
Нормальная логика, нагрузка на каталог минимальна (1 или 2 запроса), но скрипт будет довольно сложный (на bash). Если он будет выполнятся не часто, то можно побольше нагрузить каталог:
1. Получить DN пользователей, организовать по ним цикл.
2. Для текущего пользователя сделать запрос:
ldapsearch -o ldif-wrap=no -LLL -xZZWD "uid=user.name,ou=People,dc=example,dc=com" -b ou=Groups,dc=example,dc=com '(&(cn=*.dept)(member=uid=current.user,ou=People,dc=example,dc=com))' dn
3. Если групп на найдено, запоминаем пользователя, если найдены -- пропускаем.
Егор
-
Интересно, где такое может понадобиться?
Делаю перенос, и есть полсотни учетных записей, которые неизвестного происхождения от которых хотелось бы избавиться. Все актуальные записи состоят в группах отделов.