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