Автор Тема: Помогите написать фильтр  (Прочитано 4280 раз)

marawu

  • Пользователь
  • **
  • Сообщений: 76
  • !
    • Просмотр профиля
Помогите написать фильтр
« : 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, но не могу придумать логику :( Единственное, что смог придумать это так:


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


Но возможно есть способ проще?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: Помогите написать фильтр
« Ответ #1 : 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. Если групп на найдено, запоминаем пользователя, если найдены -- пропускаем.

Егор

marawu

  • Пользователь
  • **
  • Сообщений: 76
  • !
    • Просмотр профиля
Re: Помогите написать фильтр
« Ответ #2 : 24 Октябрь 2017, 07:51:15 »
Интересно, где такое может понадобиться?

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