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

관련 정보