显示字段值msds-memberOfTransitive和msds-memberTransitive时出错

时间:2014-12-05 11:40:19

标签: active-directory ldap

我们正在尝试从对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

我认为这是一种避免过度计算"传递"属性,但我没有找到任何东西。

我怎样才能进行此搜索(从搜索中删除这些属性)?

1 个答案:

答案 0 :(得分:3)

看起来msds-memberOfTransitivemsds-memberTransitiveSearch Flags的searchFlags:2048设置限制搜索到基本范围。

如果我们查看msds-memberOfTransitive,我们会看到设置searchFlags:fBASEONLY。看看Search Flags,我们看到:

(fBASEONLY,0x00000800):指定不限定为单个对象的搜索操作不返回该属性。读取操作否则会返回设置了此搜索标志的属性,但会失败,其中包含operations错误/ ERROR_DS_NON_BASE_SEARCH

msds-memberTransitive也是如此) 因此,只有在搜索范围为BASE时才会返回这些属性。

围绕这种情况的唯一方法是使用其中一个属性循环遍历每个结果,然后进行第二次搜索,该搜索将是条目的baseDN和BASE的范围。