2012-09-24 144 views
1

我试过使用LDAP匹配规则,但我无法检索搜索条目usind LDAP匹配规则过滤器。ldap嵌套组成员过滤器

我这是如何发送过滤器: 过滤(&(objectclass=*)(memberof:1.2.840.113556.1.4.1941:=)(cn=gasaxena))

我甩LDAP服务器上接收,以及在PCAP的过滤器,这是它的样子: 过滤:(&(&(objectclass=*)(memberof:1.2.840.113556.1.4.1941:=[NULL]))(cn=gasaxena))

人指出,如果我错过了什么?服务器是AD

回答

0

此组件不正确:(&(objectclass=*)(memberof:1.2.840.113556.1.4.1941:=)(cn=gasaxena))

也许你的意思是:

(&(objectclass=*)(memberOf:1.2.840.113556.1.4.1941:=cn=gasaxena,<superior-portion-of-distinguished-name-here>))

+0

谢谢特里。但我对LDAP很陌生,不太了解这个过滤器的概念。您能否帮我解释两种语法,以及两者在服务器解释方面有何不同? –

+0

也许这个链接将帮助:[广告搜索过滤器语法](http://msdn.microsoft.com/en-us/library/windows/desktop/aa746475(v = vs.85).aspx) –

+0

嗨, 我尝试通过更改过滤器,但仍然无法检索任何搜索条目。我也抛弃了过滤器: filter(&(objectclass = *)(memberof:1.2.840.113556.1.4.1941:= cn = gasaxena)) 关于我可能缺少的任何指针?是否有任何我们需要打开AD服务器以使此搜索查询工作的旋钮? –

2

要了解活动目录的过滤器,只要看看到Search Filter Syntax

要查找所有组认为“USER1”是的成员:

在你的搜索,设置基本的组容器DN;例如根DN(DC = DOM,DC = FR)

设置的范围,以子树

使用以下滤波器:(member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)

与LDIFDE.EXE(本地命令行AD搜索上windows):

ldifde -f t.txt -d "DC=dom,DC=fr" -r "(member:1.2.840.113556.1.4.1941:=CN=jblanc,OU=MonOu,DC=dom,DC=fr)" 

查找jpblanc所属的所有组。

+0

嗨, 我被困在这里,可以使用一些专家的帮助。 我的用户是“SPR”,它位于dc = aaaldap,dc = com 现在我想发送的过滤器是 过滤器:(&(objectclass = *)(memberof:1.2.840.113556.1.4.1941: = cn = gasaxena,dc = aaaldap,dc = com)) –

+0

阅读我的答案,尝试与成员,而不是成员 – JPBlanc

+0

Thannks JPBlanc。我以某种方式设法错过了我的过滤器中的成员和memberOf之间的区别。谢谢你的帮助。我纠正了这一点,现在它正在工作。但是,我在基于嵌套用户的多个搜索条目结束时观察ldapsearchresref消息。那么,假设对于嵌套组过滤器,ldapsearchresref将最后一条消息指示搜索条目结尾 –

3

您应该执行针对类似组搜索:

(member:1.2.840.113556.1.4.1941:=CN=John Smith,DC=MyDomain,DC=NET) 

没有的memberOf用户。

-Jim

+0

感谢JIM, 在您的帮助下,我能够检索多个与多个嵌套组对应的搜索条目哪个用户是其中的一部分。但是,在搜索结束后,我还将“ldapsearchresref”视为此嵌套过滤器搜索的一部分。这是预期的吗?它会是一个有效的假设ldapsearchresref作为我的搜索结果的结束标志吗? –

0

使用的memberOf时,您必须使用组的完全可分辨名称:在我的情况CN = MyGroup的,OU =用户,OU = =组:1.2.840.113556.1.4.1941 ,OU =安全,DC =域,DC = com的是整个专有名称

(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com)) 

您可以通过运行下面的代码,并把这个过滤器(&(对象类=组得到您的专有名称组))(name = MyGroup))

Imports System.DirectoryServices 

    Module Module1 

     Sub Main() 
      Dim run As Boolean = True 
      Dim Filter As String 
      While run 
       Console.WriteLine("Enter Filter:") 
       Filter = Console.ReadLine() 
       If Filter = "exit" Then 
        run = False 
       Else 
        checkFilter(Filter) 
       End If 
      End While 
     End Sub 

     Function checkFilter(Filter As String) As Boolean 
      Dim search As New DirectorySearcher("LDAP://dc=Domain,dc=com") 
      Try 
       search.Filter = Filter 
       search.PropertiesToLoad.Add("name") 
       search.PropertiesToLoad.Add("distinguishedName") 
       search.SearchScope = SearchScope.Subtree 
       Dim results As SearchResultCollection = search.FindAll() 
       If results Is Nothing Then 
        Console.WriteLine("Nothing") 
        Return False 
       Else 
        If results.Count() = 0 Then 
         Console.WriteLine("non found") 
        End If 
        Dim result As SearchResult 
        For Each result In results 
         Console.WriteLine(result.Properties("name")(0).ToString()) 
         Console.WriteLine(result.Properties("distinguishedName")(0).ToString()) 
         'For Each prop In result.Properties("members") 
         ' Console.WriteLine(prop.ToString()) 
         'Next 
        Next 
        Console.WriteLine(String.Format("{0} Users Found", results.Count())) 
       End If 
      Catch ex As Exception 
       Console.WriteLine(ex.Message) 
      End Try 
      Return True 
     End Function 
    End Module