Vereinfachung des LDAP-Filters

Vereinfachung des LDAP-Filters

Ich muss einen LDAP-Filter mit einer sehr langen ODER-Bedingung erstellen und frage mich, ob es hierfür einen besseren Weg gibt.

Derzeit verwende ich folgende Abfragezeichenfolge:

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

Diese Abfragezeichenfolge kann bis zu 200 Benutzer enthalten. Die betreffenden Benutzer gehören keiner bestimmten LDAP-Gruppe an und haben auch keine anderen gemeinsamen Attribute. Sie sind zufällig im gesamten LDAP-Verzeichnis verteilt. Die Benutzer, die mich interessieren, kann ich nur anhand ihrer Benutzer-ID identifizieren. Außerdem habe ich keine Kontrolle über den LDAP-Server und kann keine Benutzergruppe erstellen (das würde in diesem Zusammenhang auch nicht viel Sinn ergeben).

Das Erstellen dieser Abfragezeichenfolge ist mühsam und fehleranfällig, und ich frage mich, ob es hierfür vielleicht einen besseren Weg gibt.

Weitere Hintergrundinformationen: Das gesamte LDAP-Verzeichnis ist sehr groß und umfasst Zehntausende von Benutzern. Die betreffenden Benutzer wurden für die Teilnahme an einem Schulungskurs ausgewählt, und die Computer im Klassenzimmer erlauben nur den ausgewählten Benutzern die Anmeldung. Die Liste der Benutzer (und damit mein Filter) ändert sich alle paar Wochen.

Die zugrunde liegende Implementierung wird OpenLDAP auf RedHat 7 sein.

Antwort1

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

Und dann so etwas wie

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

verwandte Informationen