是否可以进行ldap查询并排除某些OU



使用python-ldap搜索活动目录。如何排除具有特定OU的特定用户?在组"GON"中搜索,并希望它只返回具有OU=Users而不是OU=Foo的常规用户。

filter = "(&(CN=GON)(!(OU=Foo)))"
attr = ["member"]
scope = ldap.SCOPE_SUBTREE
result = l.search_s(basdn, scope, filter, attr)

得到的结果:

[('CN=GON,OU=App,OU=Groups,DC=com', {'member': [b'CN=user1,OU=Users,DC=com', b'CN=user2me,OU=Foo,DC=com',]}), (None, ['ldap://skogen.com/CN=Sche,CN=Conf,DC=com']), (None, ['ldap://skogen.com/CN=Sche,CN=Conf,DC=com'])]

想要的结果:

[('CN=GON,OU=App,OU=Groups,DC=com', {'member': [b'CN=user1,OU=Users,DC=com']}), (None, ['ldap://skogen.com/CN=Sche,CN=Conf,DC=com']), (None, ['ldap://skogen.com/CN=Sche,CN=Conf,DC=com'])]

简短的回答是否定的。

查询筛选器只影响返回的对象,而不影响为该对象返回的属性值。因此(CN=GON)的滤波器意味着;我想找到一个CCD_ 5是CCD_;并且CCD_ 7值告诉它返回哪些属性。LDAP没有提供修改这些属性返回方式的方法。

您可以在搜索完成后对其进行筛选。循环遍历每个值并删除不需要的值。

查找一个特定OU中属于组成员的所有用户的另一种方法是查看memberOf属性。这将在Active Directory中工作,但我不确定OpenLDAP(我认为必须配置memberOf才能工作,但不确定——我从未真正使用过OpenLDAP(。

因此,在AD中,您可以进行如下查询:

basedn = "OU=Users,DC=com"
filter = "(&(objectClass=user)(objectCategory=person)(memberOf=CN=GON,OU=App,OU=Groups,DC=com))"
attr = ["distinguishedName"]
scope = ldap.SCOPE_SUBTREE
result = l.search_s(basdn, scope, filter, attr)

这在林中只有一个域的AD域中运行良好。但在多域林中,请注意memberOf

最新更新