Здравствуйте!
Добрый день, не могу понять как написать фильтр, который будет искать пользователей, которые не состоят ни в каких группах заданных по маске.
Интересно, где такое может понадобиться?
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. Если групп на найдено, запоминаем пользователя, если найдены -- пропускаем.
Егор