简化 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))
$ 

相关内容