🔎Filter-Labor
Ein LDAP-Filter ist ein Ausdruck in Präfixschreibweise: erst der Operator, dann die Teilfilter, alles in Klammern. Der Server wertet ihn für jeden Eintrag im Suchbereich aus – mit drei möglichen Ergebnissen.
🧪Ausprobieren
Scope (-s)
$ ldapsearch -x -LLL -b "dc=example,dc=org" -s sub "(&(objectClass=inetOrgPerson)(|(ou=Vertrieb)(mail=*@example.org)))" dnKandidaten
5 TrefferNur TRUE kommt in das Ergebnis. Klick zeigt die Auswertung im Baum.
Filterbaum für cn=Schulz\, Frank
UND: FALSE schlägt alles, sonst Undefined vor TRUE · ODER: TRUE schlägt alles, sonst Undefined vor FALSE · NICHT(Undefined) = Undefined (RFC 4511 §4.5.1.7)
& UNDTRUEalle Teilfilter sind TRUE
(objectClass=inetOrgPerson)TRUEWert „inetOrgPerson“ ist gleich nach objectIdentifierMatch
| ODERTRUEmindestens ein Teilfilter ist TRUE
(ou=Vertrieb)TRUEWert „Vertrieb“ ist gleich nach caseIgnoreMatch
(mail=*@example.org)FALSEkein Wert passt zum Muster (caseIgnoreIA5SubstringsMatch)
📇 Index-Empfehlung für diesen Filter
Ohne passenden Index muss slapd jeden Kandidaten laden und prüfen. objectClass hat immer einen eq-Index (slapd-mdb(5)).
olcDbIndex: objectClass eq
olcDbIndex: ou eq
olcDbIndex: mail sub🧯 Werte für Filter escapen (RFC 4515 §3)
Im Filter werden nur * ( ) \ und NUL escaped – immer als \ + zwei Hex-Ziffern. Das Komma bleibt, anders als im DN.
(cn=Schulz, Frank \28extern\29 \2a)📚 Quellen: RFC 4515 – LDAP: String Representation of Search Filters · RFC 4511 – LDAP: The Protocol · RFC 4526 – LDAP Absolute True and False Filters · slapd-mdb(5)
📘Die Bausteine
| Form | Bedeutung | Hinweis |
|---|---|---|
| (attr=wert) | Gleichheit | EQUALITY-Regel, z. B. caseIgnoreMatch |
| (attr=*) | vorhanden | Attribut hat mindestens einen Wert |
| (attr=an*g*e) | Teilstring | SUBSTR-Regel: Anfang, Mitte(n), Ende |
| (attr>=wert) | größer/gleich | ORDERING-Regel nötig, sonst Undefined |
| (attr<=wert) | kleiner/gleich | ORDERING-Regel nötig, sonst Undefined |
| (attr~=wert) | ungefähr | Regel legt der Server fest (RFC 4511); hier wie Gleichheit ausgewertet |
| (attr:regel:=wert) | erweitert | Matching-Regel frei wählen, :dn: prüft auch DN-Teile |
| (&(…)(…)) | UND | alle Teilfilter |
| (|(…)(…)) | ODER | mindestens einer |
| (!(…)) | NICHT | genau ein Teilfilter |
📚 Quellen: RFC 4515 – LDAP: String Representation of Search Filters