Python LDAP搜索

Jac*_*ero 4 python search ldap

我一直在阅读如何使用Python搜索LDAP服务器,但我已经被困了几个小时,我不知道为什么.这是我第一次尝试使用这种API.

以下是我如何打开连接并尝试搜索:

aims_server = '#####.com'
base_dn = 'cn=EMPLOYEES,cn=portal,cn=Groups,dc=Company,dc=com'
username = 'cn=admin,cn=users,dc=Company,dc=com'
password='#####'
directory=ldap.open(aims_server)
directory.simple_bind_s(username, password)

#retrieve the current members from group
old = {'uniquemember':attr['uniquemember']}
Run Code Online (Sandbox Code Playgroud)

然后我故意破坏代码,以便我可以使用调试器并使用以下方法进行搜索:

>>> searchFilter = "cn=*"
>>> directory.search_s(base_dn,ldap.SCOPE_SUBTREE,searchFilter, retrieveAttributes)
Run Code Online (Sandbox Code Playgroud)

结果:

[('cn=EMPLOYEES,cn=portal,cn=groups,dc=Company,dc=com', {'displayname': ['Employees'], 'description': ['Members of this group are employees. '], 'objectclass': ['top', 'groupOfUniqueNames', 'orclGroup'], 'orclisvisible': ['true'], 'owner': ['cn=portal_admin ,cn=users,dc=Company,dc=com', 'cn=portal,cn=users, dc=Company,dc=com'], 'uniquemember': ['cn=alan,cn=users,dc=Company,dc=com', 'cn=alan_r,cn=users,dc=Company,dc=com', ....
Run Code Online (Sandbox Code Playgroud)

如果我有一个过滤器"cn=*",它将带回上面的字典,但如果我实际上放了任何东西,searchFilter它将不会带回任何结果.

有人有任何见解吗?我想知道我是否在目录中搜索得不够深入?

编辑

我似乎最好的办法是将设置更改为:

searchFilter = "cn=*"
retrieveAttributes = ["uniquemember"]
Run Code Online (Sandbox Code Playgroud)

然后:

(cn, attr) = searcher.pop()
Run Code Online (Sandbox Code Playgroud)

返回:

{'uniquemember': ['cn=alan_t,cn=users,dc=company,dc=com','cn=alan_r,cn=users,dc=company....
Run Code Online (Sandbox Code Playgroud)

似乎它试图搜索一个太高的水平,我将如何进入另一个级别来搜索独特的成员?

我只是想搜索他们的名字!

Jac*_*ero 9

我终于做到了,它只花了我超过5个小时.

每当我搞乱配置时,我都会学到更多东西,但我基本上必须尝试每种组合才能让它发挥作用.

事实证明,我可能对base_dn过于具体,所以我将其更改为更高级别

base_dn = 'cn=users,dc=company,dc=com'
Run Code Online (Sandbox Code Playgroud)

然后我意识到我不能搜索比任何低uniquemember,所以必须是我返回属性

retrieveAttributes = ["uniquemember"]
Run Code Online (Sandbox Code Playgroud)

这样,过滤器就可以工作了

searchFilter = "cn=aaron*"
Run Code Online (Sandbox Code Playgroud)

然后它将返回:

[('cn=Aaron_A@company.com,cn=Users,dc=company,dc=com', {})]
Run Code Online (Sandbox Code Playgroud)

虽然它最后确实包含一个空对象,但这仍然给了我正在寻找的结果.

我希望当他们不熟悉LDAP时,这可以帮助别人