Python - LDAP
Revision as of 11:55, 2 April 2009 by PeterHarding (talk | contribs)
Using the Python LDAP Module
Search
The searches are made by binding anonymously.
#!/usr/bin/env python # #--------------------------------------------------------------------------------------------------- import sys import ldap #--------------------------------------------------------------------------------------------------- LDAP_HOST = 'xxx' #--------------------------------------------------------------------------------------------------- l = ldap.initialize("ldap://%s:389" 5 LDAP_HOST) l.simple_bind_s("","") base_dn = "ou=xxx,dc=performiq,dc=com,dc=au" filter = "(&(objectclass=xxx)(uid=svt*))" rows = l.search_s(base_dn, ldap.SCOPE_SUBTREE, filter) print "Returned -> %d rows" % len(rows) for row in rows: print row col0 = row[0].split(', ')[0] uid = col0.split(',')[0].split('=')[1] type = col0.split(',')[1].split('=')[1] if row[1].has_key('groups'): group = row[1]['groups'][0].split(',')[0].split('=')[1] else: group = '' print "%s,%s,%s" % (uid, type, group) #---------------------------------------------------------------------------------------------------
Returned data looks like:
( 'uid=xxxx,ou=internal,ou=people,dc=xxxx,dc=com', { 'cn' : ['xxxx'], 'description' : ['xxxx'], 'objectClass' : ['xxxx'], 'sn' : ['xxxx'], 'groups' : ['cn=xxxx,ou=xxxx,dc=performiq,dc=com,dc=au'], 'uid' : ['xxxx'] } )
Modify
Adds, mods and deletes require binding as a user with appropriate rights.
#!/usr/bin/env python # #--------------------------------------------------------------------------------------------------- import sys import ldap #--------------------------------------------------------------------------------------------------- HOST = 'hx30' PORT = 6389 #--------------------------------------------------------------------------------------------------- idx = 0 l = ldap.initialize("ldap://%s:%d" % (HOST, PORT)) l.simple_bind_s("cn=xxx,dc=performiq,dc=com,dc=au","xxx") base_dn = "uid=svt_PLH%05d,ou=xxx,ou=xxx,dc=performiq,dc=com,dc=au" % idx print base_dn mod_attrs = [ (ldap.MOD_REPLACE, 'description', 'SVT User %05d' % idx), (ldap.MOD_DELETE, 'GivenName', 'Francis' ), (ldap.MOD_ADD, 'GivenName', 'Frank' ) ] rc = l.modify_s(base_dn, mod_attrs) print rc
Add
#!/usr/bin/env python # #--------------------------------------------------------------------------------------------------- import sys import ldap #--------------------------------------------------------------------------------------------------- def record(idx): add_record = [ ('objectclass', ['objectclass']), ('uid', ['svt_PLH%05d' % idx]), ('cn', ['SVT PLH%05d' % idx] ), ('sn', ['svt_PLH%05d' % idx] ), ('description', ['PLH test %05d' % idx]), ('userpassword', ['secret']), ('ou', ['ou']) ] return add_record #--------------------------------------------------------------------------------------------------- idx = 3 l = ldap.initialize("ldap://%s:%d" % (HOST, PORT)) l.simple_bind_s("cn=xxxx,dc=performiq,dc=com,dc=au","xxxx") base_dn = "uid=svt_xxx%05d,ou=xxx,ou=xxx,dc=performiq,dc=com,dc=au" % idx add_rec = record(idx) rc = l.add_s(base_dn, add_rec) print rc
Delete
#!/usr/bin/env python # #--------------------------------------------------------------------------------------------------- import sys import ldap #--------------------------------------------------------------------------------------------------- idx = 0 l = ldap.initialize("ldap://%s:%s" % (HOST,PORT)) l.simple_bind_s("cn=xxx,dc=performiq,dc=com,dc=au","XXXX") base_dn = "uid=svt_xxx%05d,ou=xxx,dc=performiq,dc=com,dc=au" % idx print base_dn rc = l.delete_s(base_dn) print rc