Simplificando o filtro LDAP

Simplificando o filtro LDAP

Preciso criar um filtro LDAP com uma condição OR muito longa e estou pensando se pode haver uma maneira melhor de fazer isso.

Atualmente, a string de consulta que estou usando é

(|(userid=user1)(userid=user2)(userid=user3)....) 

Pode haver até 200 usuários nesta string de consulta. Os usuários em questão não pertencem a nenhum grupo LDAP específico, nem possuem quaisquer outros atributos em comum; eles são distribuídos aleatoriamente pelo diretório LDAP. Minha única maneira de identificar os usuários nos quais estou interessado é pelo ID de usuário. Também não tenho controle sobre o servidor LDAP e não consigo criar um grupo de usuários (também não faria muito sentido neste contexto).

Construir essa string de consulta é tedioso e sujeito a erros, e estou me perguntando se pode haver uma maneira melhor de fazer isso.

Mais informações básicas: o diretório LDAP completo é muito grande, dezenas de milhares de usuários. Os usuários em questão foram selecionados para participar de um curso de treinamento e os computadores da sala de aula permitirão apenas o login dos selecionados. A lista de usuários (e, portanto, meu filtro) muda a cada poucas semanas.

A implementação subjacente será openldap no RedHat 7.

Responder1

#!/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 ')';

E então algo como

$ sudo yum -y install perl-LDAP
... yum flails wildly here ...
$ perl whatyoucalledtheabovecode foo bar zot
(|(userid=foo)(userid=bar)(userid=zot))
$ 

informação relacionada