非常に長いOR条件を使用してLDAPフィルタを構築する必要がありますが、これを行うより良い方法があるかどうか疑問に思います。
現在私が使用しているクエリ文字列は次のとおりです。
(|(userid=user1)(userid=user2)(userid=user3)....)
このクエリ文字列には最大約200人のユーザーがあります。問題のユーザーは、特定の LDAP グループに属していないか、共通のその他の属性を持っておらず、LDAP ディレクトリ全体にランダムに配布されます。私が興味のあるユーザーを識別する唯一の方法は、ユーザーIDを使用することです。また、LDAPサーバーに対する制御権がなく、ユーザーグループを作成することもできません(この場合もあまり意味がありません)。
このクエリ文字列を書くのは面倒でエラーが発生しやすく、これを行うより良い方法があるかどうか疑問に思います。
追加の背景情報:LDAPディレクトリ全体は数万人のユーザーを含む非常に大きいです。トレーニングセッションでそのユーザーが選択されており、教室のコンピューターでは、選択したユーザーのみがログインできます。ユーザーリスト(および私のフィルタ)は数週間ごとに変更されます。
デフォルトの実装はRedHat 7のopenldapです。
答え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))
$