在标题中带*的OU上进行LDAP查询。怎么样?

时间:2010-04-15 10:15:37

标签: ldap

我遇到困难我相信当我正在搜索时,我的OU中会出现*字符。 OU组称为 WorldWide Offices

我有一个循环查询,它返回给定组中的所有用户。所以我输入了一个组名,这让我回到了一个小组。然后我循环通过group.members。

这些成员将是用户或其他组。因此,如果它不是用户,我会再次循环检查它是否是一个组。该组的成员始终是DistinguishedName,这就是我必须搜索的所有内容。

我的当前用户的DistinguishedName为 CN = Smith \,John a。,OU = Laptop,OU = Users,OU = London DC,OU = UK,OU = Worldwide Offices ,DC = OurDomain,DC = LOCAL。

我正在做一个DirectorySearcher,我的过滤器是

Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=*Worldwide Offices*,DC=OurDomain,DC=LOCAL))

正如您所看到的,我认为我们的OU在其标题中具有*的事实是它找不到用户的原因。任何其他没有*的OU似乎都有效。这就是为什么我认为*是问题。

除了重命名OU之外,有没有人知道如何解决*问题?

2 个答案:

答案 0 :(得分:2)

Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=\2aWorldwide Offices\2a,DC=OurDomain,DC=LOCAL))

必须使用*转义\2a - 请参阅MSDN "Search Filter Syntax"

  

如果出现以下任何特殊情况   字符必须出现在搜索中   过滤为文字,它们必须是   取而代之的是列出的逃生   序列

* => \2a
( => \28
) => \29
\ => \5c
NUL => \00
/ => \2f

简单地使用\转义它也应该有效:

Searcher.Filter = "(&(&(objectClass=user)(!(objectClass=computers)))(distinguishedName=CN=Smith\, John a.,OU=Laptop,OU=Users,OU=London DC,OU=UK,OU=\*Worldwide Offices\*,DC=OurDomain,DC=LOCAL))

答案 1 :(得分:2)

只有属性类型为某种字符串类型时,外卡才有效。 (八位字符串,unicode字符串)。如果您使用* agains属性,如givenName,displayName,那么外卡将被尊重。但是可分辨名称是“可分辨名称”类型,因此子字符串匹配不会被服务器打开。

如果对objectcategory,dn,distinguishedname使用*,则可以看到通配符不起作用。

你的逻辑需要改变。