Mittels python lassen sich Benutzer aus einem LDAP-Verzeichnis (bzw. ActiveDirectory) einfach auslesen und formatiert ausgeben:
#!/usr/bin/python # import ldap module import sys, ldap # Define the name to search searchstring="*" # connection settings ldap_url = "ldap://localhost" binddn = "CN=LDAP User,OU=User Accounts,DC=example,DC=org" pw = "secret" # Search settings basedn = "OU=User Accounts,DC=ad,DC=example,DC=net" searchFilter = "(&(cn={searchstring}))".format (searchstring=searchstring) searchAttribute = ['cn', 'sAMAccountName', 'displayName', 'mail'] searchScope = ldap.SCOPE_SUBTREE # bind to the server l = ldap.initialize(ldap_url) try: 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) # query LDAP try: resultId = l.search(basedn, searchScope, searchFilter, searchAttribute) result_type, result_data = l.result(resultId) for ldap_dn,ldapuser in result_data: print ldap_dn #print ('username={ldap_sAMAccountName},) print ('username={ldap_sAMAccountName}\ndisplayName={ldap_displayName}\nmail={ldap_mail}\n\n').format (ldap_sAMAccountName = ldapuser['sAMAccountName'][0], ldap_displayName = ldapuser['displayName'][0], ldap_mail = ldapuser['mail'][0],) except ldap.LDAPError, e: print e # close connection l.unbind_s() |
Die Parameter unter „connection settings“ sind:
searchstring | Der Name nach dem gesucht wird |
ldap_url | Die Adresse vom LDAP-Server |
binddn | Die DN vom Benutzer, welcher sich am LDAP-Server anmeldet (i.dR. ein „read-only“ user) |
pw | Passwort für den oben genannten Benutzer |
basedn | Fange ab hier mit der Suche an; das kann der root Pfad sein, besser ist es aber aber einen Pfad mit den aktiven Accounts einzuschränken, damit deaktivierte Benutzer nicht drin sind |
searchFilter | Das LDAP-Suchmuster; anstelle von „givenName“ kann beispielsweise auch „cn“ oder „displayName“ sein |
searchScope | Hier wird definiert ob nur im aktuellen LDAP-Zweig oder rekursiv gesucht wird |