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

相關內容