Understanding the String Representation of LDAP Filters (RFC 4515)

Share This Article

LDAP works effectively because it can filter queries efficiently, and that’s where RFC 4515 comes in. This standard defines how to structure LDAP search filters. In this article, we’ll break down RFC 4515, making it easier to understand and apply, so you can confidently optimize and manage LDAP searches.

Why a String Representation for LDAP Filters Is Necessary

The development of a standardized string representation for LDAP filters was not arbitrary. Its creation addresses critical practical needs, including:

  • Human Readability: The string format makes LDAP filters easier to understand, manually create, and share amongst administrators, developers, and teams.
  • Embedding in LDAP URLs (RFC 4516): This format is critical for representing filters in LDAP URLs, simplifying usage in various applications.
  • Configuration Files: Filters in their string form are widely used within application and server configuration files, enhancing compatibility.
  • Command-Line Tools: Enables precise filter specification in CLI-based LDAP utilities like ldapsearch, empowering real-time query refinement. 
  • Debugging and Logging: Having a textual format for filters streamlines the process of troubleshooting and analyzing LDAP operations.

Core Components of the RFC 4515 String Format

The RFC 4515 standard formalizes filter syntax, defining how filters are expressed and their logical operations structured. Let’s break it down:

1. Basic Filters

The overarching structure follows (attributeOperatorValue). Common operators include:

  • = (Equality): Check if an attribute matches a given value. Example:  (cn=John Doe)
  • != (Inequality/NONE match): Negates equality. Example:  (!(cn=John Doe))
    • Note: While some LDAP implementations may support the != operator for inequality, it is not a standard operator defined in RFC 4515. The standard primarily uses the = operator for equality, and negation for inequality is typically achieved using the ! (NOT) operator, as shown in the example. Consult your specific LDAP server documentation for its supported operators.
  • >=, <=, >, < (Comparison): For attributes with ordered values like dates. Example:  (hireDate>=20220101)

2. Boolean Operators

RFC 4515 defines Boolean operators in prefix notation with parentheses to group conditions:

  • & (AND): (&(objectClass=person)(sn=Doe))
  • | (OR): (|(department=IT)(department=Engineering))
  • ! (NOT): (!(location=Remote))

3. Substring Filters

Substring matching is expressed via the * wildcard, capable of great flexibility:

  • Initial Match: (cn=John*)
  • Final Match: (cn=*Doe)
  • Any Match: (cn=hn D)

4. Presence Filter

The syntax (attribute=*) checks for the existence of an attribute, without specifying its value:

  • Example:  (telephoneNumber=*)

5. Extensible Match Filters

This advanced structure allows for precise matching using a complex syntax:

  • Structure: (attribute[:dn][:matchingRule]:=value)
  • Example with Matching Rule OID: (memberOf:1.2.840.113556.1.4.1941:=cn=Group1,dc=example,dc=com)

Notes:

  • [:dn] enables matching against Distinguished Name (DN) components.
  • [:matchingRule] specifies the matching logic using Object Identifier (OID).

Key Specifications from RFC 4515

1. UTF-8 Encoding

All LDAP filter strings must be encoded in UTF-8, which ensures compatibility with internationalized fields. This allows directories to store and search attributes in non-English languages seamlessly.

2. Escaping Special Characters

Certain characters have special meanings in filters. To ensure correct parsing, they must be escaped via \ followed by their two-digit hexadecimal ASCII value:

CharacterEscaped Representation
*\2a
(\28
)\29
\\5c
  • Example (escaping a literal wildcard): (description=Project\2a)

3. Binary Data Handling

Binary attributes are encoded as backslash-hexadecimal sequences, representing each byte of binary data in two hexadecimal digits.

  • Example: (photo=\ff\d8\xff\xe0)

4. Internationalization

The UTF-8 encoding rule allows LDAP filters to cater to directory entries containing special characters. For instance:

  • Search in German: (straße=Haupt*)

Examples of RFC 4515-Compliant Filters

Here are a few practical examples illustrating how the syntax works:

  1. Simple Equality Match: (cn=John Doe)
  2. AND Combination: (&(objectClass=employee)(department=HR))
  3. OR with Nested NOT: (|([email protected])(!(title=Intern)))
  4. Presence Match: (hasPhotograph=*)
  5. Escaped Characters: (description=Budget\20Overview\2a)
  6. Extensible Match: (memberOf:1.2.840.113556.1.4.1941:=cn=Managers,ou=Groups,dc=example,dc=com)

Relationship to Previous Standards (RFC 2254)

RFC 4515 supersedes RFC 2254, clarifying ambiguities and ensuring better universal compatibility. The most notable updates include:

  • Explicit requirement for UTF-8 encoding.
  • Detailed guidelines for escaping special characters, reducing confusion in multi-national implementations.

Continue Learning with our Newsletter