Search code examples
pythonldapbind

LDAP uid path not known


Here there my working python script:

#!/usr/bin/python

import ldap, sys

l = ldap.initialize('ldap://myldapserver:389')
username = "uid=%s,OU=folder1,OU=myCompany,O=MyCompanyGroup" % "myID"
password = "mypassword"
try:
  l.protocol_version = ldap.VERSION3
  l.simple_bind_s(username, password)
  valid = True
  print "OK"
  l.unbind()
except Exception, error:
  print error

Now I would like to bind the user, just only specifying "O=MyCompanyGroup", and searching for the uid on that subtree. For example I can filter based on "inetOrgPerson"

I tried

 username = "(&(objectClass=inetOrgPerson )(uid=%s)(O=MyCompanyGroup))" % "myID"

but I get Invalid credentials.

Thanks! Riccardo


Solution

  • Found the solution

    #!/usr/bin/python
    
    import ldap, sys
    
    l = ldap.initialize('ldap://myldapserver:389')
    search_filter = "(&(uid=myID)(objectClass=inetOrgPerson))"
    base_dn="O=MyCompanyGroup"
    password = "mypassword"
    try:
      l.protocol_version = ldap.VERSION3
      result = l.search_s(base_dn, ldap.SCOPE_SUBTREE, search_filter, None)
      user_dn = result[0][0]
      print user_dn
      l.simple_bind_s(user_dn, password)
      valid = True
      print "OK"
      l.unbind()
    except Exception, error:
      print error