【问题标题】:Python LDAP SearchPython LDAP 搜索
【发布时间】:2011-11-17 16:43:15
【问题描述】:

我一直在阅读有关如何使用 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']}

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

>>> searchFilter = "cn=*"
>>> directory.search_s(base_dn,ldap.SCOPE_SUBTREE,searchFilter, retrieveAttributes)

结果:

[('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', ....

如果我有"cn=*" 的过滤器,它会带回上面的字典,但如果我实际上在searchFilter 中放入任何内容,它不会带回任何结果。

有人有什么见解吗?我想知道我是否在目录中搜索的不够深入?

编辑

我能想到的最好办法是将设置更改为:

searchFilter = "cn=*"
retrieveAttributes = ["uniquemember"]

然后:

(cn, attr) = searcher.pop()

返回:

{'uniquemember': ['cn=alan_t,cn=users,dc=company,dc=com','cn=alan_r,cn=users,dc=company....

似乎搜索的级别太高了,我要如何下一个级别来搜索唯一成员?

我只想搜索他们的名字!

【问题讨论】:

    标签: python search ldap


    【解决方案1】:

    我终于做到了,只用了 5 个多小时。

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

    原来我可能对 base_dn 过于具体,所以我将其更改为更高的级别

    base_dn = 'cn=users,dc=company,dc=com'
    

    然后我意识到我无法搜索低于 uniquemember 的任何内容,所以这必须是我要返回的属性

    retrieveAttributes = ["uniquemember"]
    

    这样,过滤器就起作用了

    searchFilter = "cn=aaron*"
    

    然后它会返回:

    [('cn=Aaron_A@company.com,cn=Users,dc=company,dc=com', {})]
    

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

    我希望这对刚接触 LDAP 的其他人有所帮助

    【讨论】:

      【解决方案2】:

      而不是...

      directory=ldap.open(aims_server)
      

      我用过...

      directory=ldap.initialize(aims_server)
      

      另外,如果你有...

      searchFilter = "cn=alan"
      retrieveAttributes = ['cn']
      results = directory.search_s( ... )
      print results
      

      它仍然无法满足您的需求?

      【讨论】:

      • 由于搜索过滤器,这会返回一个空列表,但如果没有搜索过滤器,它会返回 [('cn=EMPLOYEES,cn=portal,cn=groups,dc=company,dc= com', {'cn': ['EMPLOYEES']})]。我真的不确定在这里做什么。
      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2015-09-02
      • 2014-10-18
      • 1970-01-01
      相关资源
      最近更新 更多