如何在 LDAP 搜索过滤器中使用包含逗号的 DN 作为属性值



试图根据值为 DN 的属性搜索我们的目录。但是,我们的用户 RDN 的形式是 CN=Surname, GivenName ,这要求在完整的 DN 中引用逗号。但是给定像manager这样的属性,其值是另一个用户的 DN,我无法搜索具有特定经理的所有用户。我尝试了(manager=CN=Surname, GivenName,CN=users,DC=mydomain,DC=com),但得到语法错误"搜索过滤器错误"。我尝试了各种引用 DN 的选项,但所有选项要么给了我语法错误,要么无法匹配任何对象。我做错了什么?

(请注意,如果我直接查找用户对象,我可以搜索简单的(CN=Surname, GivenName),不需要引用,但我正在搜索具有特定管理器的用户。包含逗号的属性值仅在是可分辨名称的一部分时才成为问题。

问题是在公用名中引用逗号不是为了过滤器解析器的好处,而是为了 DN 解析器的好处; 过滤器传递给该属性的值必须字面上包含反斜杠字符。不幸的是,反斜杠在LDAP过滤器中也(不同(特殊,因此语法错误。

解决方案很简单,但不像将反斜杠加倍那么明显;LDAP 过滤器中的反斜杠的工作方式与 URI 中的%反斜杠类似,因此您必须使用文字反斜杠后跟 2 位十六进制代码点作为反斜杠:

(manager=CN=Surname5c, Givenname,OU=org,DC=mydomain,DC=com)

事实证明,在 https://docs.oracle.com/cd/E19424-01/820-4811/gdxpo/index.html#6ng8i269q 的最底部有一个这个特定用例的示例。