Упрощение фильтра LDAP

Упрощение фильтра LDAP

Мне нужно создать фильтр LDAP с очень длинным условием ИЛИ, и мне интересно, есть ли лучший способ сделать это.

В настоящее время я использую следующую строку запроса:

(|(userid=user1)(userid=user2)(userid=user3)....) 

В этой строке запроса может быть до 200 или около того пользователей. Пользователи, о которых идет речь, не входят ни в одну определенную группу LDAP и не имеют никаких других общих атрибутов; они случайным образом распределены по всему каталогу LDAP. Единственный способ идентифицировать интересующих меня пользователей — это использовать их идентификатор пользователя. У меня также нет контроля над сервером LDAP, и я не могу создать группу пользователей (это также не имело бы особого смысла в данном контексте).

Создание этой строки запроса — утомительный процесс, который может привести к ошибкам, и мне интересно, нет ли лучшего способа сделать это.

Дополнительная информация: полный каталог LDAP очень большой, десятки тысяч пользователей. Пользователи, о которых идет речь, были выбраны для прохождения учебного курса, и компьютеры в классе позволят войти в систему только выбранным пользователям. Список пользователей (и, следовательно, мой фильтр) меняется каждые несколько недель.

Базовой реализацией будет openldap на RedHat 7.

решение1

#!/usr/bin/env perl
use 5.14.0;
use warnings;
use Net::LDAP::Util qw(escape_filter_value);

# users as arguments or via standard input
chomp(@ARGV = readline *STDIN) unless @ARGV;

print '(|';

for my $user (@ARGV) {
    print '(userid=' . escape_filter_value($user) . ')';
}

say ')';

И потом что-то вроде

$ sudo yum -y install perl-LDAP
... yum flails wildly here ...
$ perl whatyoucalledtheabovecode foo bar zot
(|(userid=foo)(userid=bar)(userid=zot))
$ 

Связанный контент