Simplificando el filtro LDAP

Simplificando el filtro LDAP

Necesito crear un filtro LDAP con una condición OR muy larga y me pregunto si puede haber una mejor manera de hacerlo.

Actualmente, la cadena de consulta que estoy usando es

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

Puede haber hasta 200 usuarios aproximadamente en esta cadena de consulta. Los usuarios en cuestión no están en ningún grupo LDAP en particular ni tienen otros atributos en común; se distribuyen aleatoriamente por todo el directorio LDAP. Mi única forma de identificar a los usuarios que me interesan es mediante su ID de usuario. Tampoco tengo control sobre el servidor LDAP y no puedo crear un grupo de usuarios (tampoco tendría mucho sentido en este contexto).

Crear esta cadena de consulta es tedioso y propenso a errores, y me pregunto si podría haber una mejor manera de hacerlo.

Más información general: el directorio LDAP completo es muy grande, decenas de miles de usuarios. Los usuarios en cuestión han sido seleccionados para tomar una clase de capacitación y las computadoras del aula solo permitirán que los seleccionados inicien sesión. La lista de usuarios (y por tanto mi filtro) cambia cada pocas semanas.

La implementación subyacente será openldap en RedHat 7.

Respuesta1

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

Y luego algo como

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

información relacionada