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

时间:2018-03-08 16:17:44

标签: syntax ldap ldap-query

尝试根据值为DN的属性搜索我们的目录。但是,我们的用户RDN格式为0,要求在完整DN中引用逗号。但是给定CN=Surname, GivenName之类的属性,其值是另一个用户的DN,我无法搜索具有特定管理员的所有用户。我尝试了manager,但语法错误“Bad search filter”。我尝试了各种引用DN的选项,但所有这些都给了我一个语法错误或无法匹配任何对象。我做错了什么?

(请注意,如果我直接查找用户对象,我可以只搜索(manager=CN=Surname\, GivenName,CN=users,DC=mydomain,DC=com),不需要引用,但我正在搜索具有特定管理员的用户。包含逗号的属性值仅变为当杰出名称的一部分时出现问题。)

1 个答案:

答案 0 :(得分:3)

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

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

%

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