Форум проекта Pro-LDAP.ru

Общие вопросы по LDAP => Общий раздел => Тема начата: marawu от 23 Октябрь 2017, 08:12:18

Название: Помогите написать фильтр
Отправлено: 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, но не могу придумать логику :( Единственное, что смог придумать это так:


Получаем список групп
Получаем список пользователей
Через цикл прогоняем пользователя по каждой группе
Если нет ни в одной, то вывести его имя


Но возможно есть способ проще?
Название: Re: Помогите написать фильтр
Отправлено: egor от 24 Октябрь 2017, 02:16:11
Здравствуйте!

Добрый день, не могу понять как написать фильтр, который будет искать пользователей, которые не состоят ни в каких группах заданных по маске.
Интересно, где такое может понадобиться?

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. Если групп на найдено, запоминаем пользователя, если найдены -- пропускаем.

Егор
Название: Re: Помогите написать фильтр
Отправлено: marawu от 24 Октябрь 2017, 07:51:15
Интересно, где такое может понадобиться?

Делаю перенос, и есть полсотни учетных записей, которые неизвестного происхождения от которых хотелось бы избавиться. Все актуальные записи состоят в группах отделов.