“objectclass不等于”不起作用

我正在使用LDAP Active Directory并尝试列出所有用户。 我有这个完美的过滤器:

(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))

不幸的是,我们还有一个计算机单元和其他设备出现在AD中,具有objectclass“user”,因此通过之前的过滤器,我获得了所有用户,计算机,设备,房间等。

这些计算机和设备也有一个objectclass“computer”,所以我需要使用objectclass!=“computer”扩展过滤器,以便仅列出真实用户。 到目前为止,我试过这些过滤器,他们都没有工作(没有数据返回!):

(&(objectclass=user)(!objectclass=computer)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(&(objectclass=user)(!(objectclass=computer))(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!(objectclass=computer))(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))
(!objectclass=computer)(&(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))

(真正的用户没有对象类“计算机”)。

我正在使用ldap_search()方法处理PHP ldap实现。

在这里找到“不等于”语法:http://technet.microsoft.com/en-us/library/aa996205%28EXCHG.65%29.aspx或在这里:http://msdn.microsoft.com/ EN-US /库/ aa746475%28V = vs.85%29.aspx

也许我可以尝试在DN中过滤用户(!CN = Computers),但首先我想过滤(!objectclass = computer),因为它对我来说更符合逻辑。

objectclass!=“computer”表达式的正确语法是什么?


与您提供的第一个链接相反, (!objectclass=computer)不是有效的过滤器表达式。 它应该是(!(objectclass=computer)) 。 请参阅RFC 2254:

filter :: =“(”filtercomp“)”

不是:: =“!” 过滤

所以你的过滤器应该是

(&(!(objectclass=computer))(objectclass=user)(|(memberOf=...)(memberOf=...)...)(|(userprincipalname=...)(displayname=...)))

如果您试图获得所有用户,您可以这样做:

(&
   (objectclass=user)
   (!(objectClass=computer))
)

它看起来像你试图获得特定组的成员和具有指定主体名称的用户(对吧?)。 如果是这样,你可以这样做:

(&
    (objectclass=user)
    (!(objectClass=computer))
    (|
        (userPrincipalName=username@domain.com)
        (displayName=John Doe)
    )
    (|
        (memberOf=CN=group1,CN=Groups,DC=domain,DC=com)
        (memberOf=CN=group2,CN=Groups,DC=domain,DC=com)
    )
)

这些工作在我的最后(您可能需要删除您的PHP代码中的空白)

链接地址: http://www.djcxy.com/p/60879.html

上一篇: "objectclass not equal to" is not working

下一篇: Why exactly malloc is used?