Zum Hauptinhalt springen

3. Definition des Zeichenfolgen-Suchfilters

Die Zeichenfolgendarstellung eines LDAP-Suchfilters ist eine Zeichenfolge von UTF-8 [RFC3629] codierten Unicode-Zeichen [Unicode], die durch die folgende Grammatik definiert ist, die der in [RFC4234] definierten ABNF-Notation folgt. Die verwendeten Produktionen, die hier nicht definiert sind, sind in Abschnitt 1.4 (Allgemeine ABNF-Produktionen) von [RFC4512] definiert, sofern nicht anders angegeben. Das Filterformat verwendet eine Präfix-Notation.

      filter         = LPAREN filtercomp RPAREN
filtercomp = and / or / not / item
and = AMPERSAND filterlist
or = VERTBAR filterlist
not = EXCLAMATION filter
filterlist = 1*filter
item = simple / present / substring / extensible
simple = attr filtertype assertionvalue
filtertype = equal / approx / greaterorequal / lessorequal
equal = EQUALS
approx = TILDE EQUALS
greaterorequal = RANGLE EQUALS
lessorequal = LANGLE EQUALS
extensible = ( attr [dnattrs]
[matchingrule] COLON EQUALS assertionvalue )
/ ( [dnattrs]
matchingrule COLON EQUALS assertionvalue )
present = attr EQUALS ASTERISK
substring = attr EQUALS [initial] any [final]
initial = assertionvalue
any = ASTERISK *(assertionvalue ASTERISK)
final = assertionvalue
attr = attributedescription
; The attributedescription rule is defined in
; Section 2.5 of [RFC4512].
dnattrs = COLON "dn"
matchingrule = COLON oid
assertionvalue = valueencoding
; The <valueencoding> rule is used to encode an <AssertionValue>
; from Section 4.1.6 of [RFC4511].
valueencoding = 0*(normal / escaped)
normal = UTF1SUBSET / UTFMB
escaped = ESC HEX HEX
UTF1SUBSET = %x01-27 / %x2B-5B / %x5D-7F
; UTF1SUBSET excludes 0x00 (NUL), LPAREN,
; RPAREN, ASTERISK, and ESC.
EXCLAMATION = %x21 ; exclamation mark ("!")
AMPERSAND = %x26 ; ampersand (or AND symbol) ("&")
ASTERISK = %x2A ; asterisk ("*")
COLON = %x3A ; colon (":")
VERTBAR = %x7C ; vertical bar (or pipe) ("|")
TILDE = %x7E ; tilde ("~")

Beachten Sie, dass, obwohl sowohl die <substring>- als auch die <present>-Produktionen in der obigen Grammatik das Konstrukt "attr=*" erzeugen können, dieses Konstrukt nur zur Bezeichnung eines Anwesenheitsfilters verwendet wird.

Die <valueencoding>-Regel stellt sicher, dass die gesamte Filterzeichenfolge eine gültige UTF-8-Zeichenfolge ist, und sieht vor, dass die Oktette, die die ASCII-Zeichen "*" (ASCII 0x2a), "(" (ASCII 0x28), ")" (ASCII 0x29), "" (ASCII 0x5c) und NUL (ASCII 0x00) darstellen, als Backslash "" (ASCII 0x5c) gefolgt von den zwei Hexadezimalziffern dargestellt werden, die den Wert des codierten Oktetts darstellen.

Dieser einfache Maskierungsmechanismus eliminiert Mehrdeutigkeiten bei der Filteranalyse und ermöglicht es, jeden Filter, der in LDAP dargestellt werden kann, als NUL-terminierte Zeichenfolge darzustellen. Andere Oktette, die Teil des <normal>-Satzes sind, können mit diesem Mechanismus maskiert werden, z. B. nicht druckbare ASCII-Zeichen.

Für AssertionValues, die UTF-8-Zeichendaten enthalten, wird jedes Oktett des zu maskierenden Zeichens durch einen Backslash und zwei Hex-Ziffern ersetzt, die ein einzelnes Oktett im Code des Zeichens bilden. Zum Beispiel würde der Filter, der prüft, ob das Attribut "cn" einen Wert mit dem Zeichen "" an einer beliebigen Stelle enthält, als "(cn=\2a*)" dargestellt.

Wie durch die <valueencoding>-Regel angegeben, MÜSSEN Implementierungen alle Oktette größer als 0x7F maskieren, die nicht Teil einer gültigen UTF-8-Codierungssequenz sind, wenn sie eine Zeichenfolgendarstellung eines Suchfilters generieren. Implementierungen SOLLTEN Eingabezeichenfolgen akzeptieren, die keine gültigen UTF-8-Zeichenfolgen sind. Dies ist notwendig, da RFC 2254 den Begriff "Zeichenfolgendarstellung" nicht klar definiert hat (und insbesondere nicht erwähnt hat, dass die Zeichenfolgendarstellung eines LDAP-Suchfilters eine Zeichenfolge von UTF-8-codierten Unicode-Zeichen ist).