我们正在尝试从对Microsoft Active Directory 2012服务器发出的LDAP查询中返回所有用户信息。
首先,我们从模式中获取所有属性(包括msds-memberOfTransitive和msds-memberTransitive),然后我们创建一个请求所有属性的查询。
我们已将此问题缩小到使用以下参数执行LDAP搜索:
- 范围:下一级(如果容器内有元素)或子树
- 请求msds-memberOfTransitive或msds-memberTransitive属性
重现错误的示例查询:
ldapsearch -D "CN=Administrator,CN=Users,DC=my,DC=dom" -W -b "CN=Users,DC=my,DC=dom" -h 10.0.1.100 -p 389 msds-memberTransitive
避免错误的示例查询:
ldapsearch -D "CN=Administrator,CN=Users,DC=my,DC=dom" -W -b "CN=Administrator,CN=Users,DC=my,DC=dom" -h 10.0.1.100 -p 389 msds-memberTransitive -s one
我认为这是一种避免过度计算"传递"属性,但我没有找到任何东西。
我怎样才能进行此搜索(从搜索中删除这些属性)?
答案 0 :(得分:3)
看起来msds-memberOfTransitive和msds-memberTransitive有Search Flags的searchFlags:2048设置限制搜索到基本范围。
如果我们查看msds-memberOfTransitive,我们会看到设置searchFlags:fBASEONLY。看看Search Flags,我们看到:
(fBASEONLY,0x00000800):指定不限定为单个对象的搜索操作不返回该属性。读取操作否则会返回设置了此搜索标志的属性,但会失败,其中包含operations错误/ ERROR_DS_NON_BASE_SEARCH 。
(msds-memberTransitive也是如此) 因此,只有在搜索范围为BASE时才会返回这些属性。
围绕这种情况的唯一方法是使用其中一个属性循环遍历每个结果,然后进行第二次搜索,该搜索将是条目的baseDN和BASE的范围。