LDAPフィルタの簡略化

LDAPフィルタの簡略化

非常に長い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))
$ 

関連情報