매우 긴 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))
$