Simplificando o filtro LDAP

0

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 nessa string de consulta. Os usuários em questão não estão em nenhum grupo LDAP específico nem possuem outros atributos em comum; eles são distribuídos aleatoriamente por todo o diretório LDAP. Minha única maneira de identificar os usuários nos quais estou interessado é pelo ID de usuário deles. Eu também não tenho controle sobre o servidor LDAP e não posso criar um grupo de usuários (também não faria muito sentido neste contexto).

Criar essa string de consulta é entediante e propenso a erros, e estou pensando 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 uma aula de treinamento e os computadores da sala de aula só permitirão que os selecionados façam o logon. A lista de usuários (e, portanto, meu filtro) muda a cada poucas semanas.

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

    
por Kevin Keane 31.05.2017 / 09:07

1 resposta

2

#!/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))
$ 
    
por 31.05.2017 / 15:53

Tags