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() |
#!/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 |