python中的LDAP查询

w2l*_*ame 18 python ldap ldap-query

我想在ldap中执行以下查询

ldapsearch -h hostname -b dc=ernet,dc=in -x "(&(uid=w2lame)(objectClass=posixAccount))" gidnumber
ldapsearch -h hostname -b dc=ernet,dc=in -x "(&(gidNumber=1234)(objectClass=posixGroup))" cn
Run Code Online (Sandbox Code Playgroud)

并使用由此获得的变量.我怎样才能做到这一点?

Dan*_*Dan 39

虽然接受的答案确实显示了绑定到LDAP服务器的正确方法,但我觉得它没有全面回答这个问题.以下是我最终实现的用于获取用户的邮件和部门的内容.这有点融合了原始问题所需的属性.

l = ldap.initialize('ldap://ldap.myserver.com:389')
binddn = "cn=myUserName,ou=GenericID,dc=my,dc=company,dc=com"
pw = "myPassword"
basedn = "ou=UserUnits,dc=my,dc=company,dc=com"
searchFilter = "(&(gidNumber=123456)(objectClass=posixAccount))"
searchAttribute = ["mail","department"]
#this will scope the entire subtree under UserUnits
searchScope = ldap.SCOPE_SUBTREE
#Bind to the server
try:
    l.protocol_version = ldap.VERSION3
    l.simple_bind_s(binddn, pw) 
except ldap.INVALID_CREDENTIALS:
  print "Your username or password is incorrect."
  sys.exit(0)
except ldap.LDAPError, e:
  if type(e.message) == dict and e.message.has_key('desc'):
      print e.message['desc']
  else: 
      print e
  sys.exit(0)
try:    
    ldap_result_id = l.search(basedn, searchScope, searchFilter, searchAttribute)
    result_set = []
    while 1:
        result_type, result_data = l.result(ldap_result_id, 0)
        if (result_data == []):
            break
        else:
            ## if you are expecting multiple results you can append them
            ## otherwise you can just wait until the initial result and break out
            if result_type == ldap.RES_SEARCH_ENTRY:
                result_set.append(result_data)
    print result_set
except ldap.LDAPError, e:
    print e
l.unbind_s()
Run Code Online (Sandbox Code Playgroud)

  • 更好的用户`search_s()`以避免`while 1` (4认同)
  • 完成@Caumons 评论;避免使用 while 1 这样做:`res = l.search_s(basedn, searchScope, searchFilter, searchAttribute)` `print res` `l.unbind_s()` (3认同)

Cla*_*ris 10

你可能想要我们的"ldap"模块.代码看起来像:

    import ldap
    l = ldap.initialize('ldap://ldapserver')
    username = "uid=%s,ou=People,dc=mydotcom,dc=com" % username
    password = "my password"
    try:
      l.protocol_version = ldap.VERSION3
      l.simple_bind_s(username, password)
      valid = True
    except Exception, error:
      print error
Run Code Online (Sandbox Code Playgroud)

  • 我疯了,还是不回答这个问题?他正在询问如何运行查询,而你正在向他展示如何绑定. (30认同)
  • 在此工作之前你需要`apt-get install python-ldap`. (12认同)