La documentation complète du module est ici.
Se connecter au serveur LDAP
1: import ldap 2: serveur='ldap://directory.example.com:10389' 3: conn=ldap.initialize(serveur) 4: try: 5: conn.simple_bind_s('uid=admin,ou=system', 'secret1') 6: except ldap.INVALID_CREDENTIALS: 7: print "mauvais mot de passe" 8: ... 9: conn.unbind()
Créer une entrée de type organizationalUnit correspondant à votre laboratoire (ex : UMR1492), afin de travailler dans votre propre sous-arborescence.
1: import ldap.modlist 2: UMR = "1492" 3: OUdn = "ou=UMR%s,ou=fil_rouge_ldap_1,dc=example,dc=com"%UMR 4: entree={'ou':'UMR%s'%UMR, 5: 'objectClass':['top','organizationalUnit'] 6: } 7: try: 8: conn.add_s(OUdn, ldap.modlist.addModlist(entree)) 9: except ldap.ALREADY_EXISTS: 10: pass
En dessous de votre entrée « UMR1492 », créer une entrée de type organizationalUnit que vous nommerez « groups ».
1: entree={'ou':'groups', 2: 'objectClass':['top','organizationalUnit'] 3: } 4: try: 5: conn.add_s('ou=groups,'+OUdn, ldap.modlist.addModlist(entree)) 6: except ldap.ALREADY_EXISTS: 7: pass
En dessous de votre entrée « UMR1492 », créer une entrée de type organizationalUnit que vous nommerez « users ».
1: entree={'ou':'users', 2: 'objectClass':['top','organizationalUnit'] 3: } 4: try: 5: conn.add_s('ou=users,'+OUdn, ldap.modlist.addModlist(entree)) 6: except ldap.ALREADY_EXISTS: 7: pass
En dessous de votre entrée « UMR1492 / groups », vous allez créer 10 entrées de type posixGroup.
1: for i in range(1,11): 2: entree={'cn':'group_%s'%i, 3: 'objectClass':['top','posixGroup'], 4: 'gidNumber':str(i) 5: } 6: try: 7: conn.add_s('cn=group_%s,ou=groups,%s'%(i,OUdn), ldap.modlist.addModlist(entree)) 8: except ldap.ALREADY_EXISTS: 9: pass
Lister tous les groupes.
1: resultat=conn.search_s('ou=groups,'+OUdn, ldap.SCOPE_SUBTREE, '(objectClass=posixGroup)') 2: for dn,entry in resultat: 3: print entry['cn']
En dessous de votre entrée « UMR1492 / users », vous allez créer 50 entrées de type account comportant les attributs uid, mail et userPassword.
1: for i in range(1,51): 2: entree={'cn':'user_%s'%i, 3: 'objectClass':['top','inetOrgPerson','posixAccount'], 4: 'uid':'user%s'%i, 5: 'sn':'User %s'%i, 6: 'uidNumber':str(i), 7: 'gidNumber':'1', 8: 'homeDirectory':'/home/user%s'%i, 9: 'mail':'user.%s@example.com'%i, 10: 'userPassword':'' 11: } 12: try: 13: conn.add_s('cn=user_%s,ou=users,%s'%(i,OUdn), ldap.modlist.addModlist(entree)) 14: except ldap.ALREADY_EXISTS: 15: pass
Lister tous les utilisateurs.
1: resultat=conn.search_s('ou=users,'+OUdn, ldap.SCOPE_SUBTREE, '(objectClass=inetOrgPerson)') 2: for dn,entry in resultat: 3: print entry['uid']
Retirer les 25 derniers utilisateurs ajoutés.
1: for i in range(26,51): 2: try: 3: conn.delete_s('cn=user_%s,ou=users,%s'%(i,OUdn)) 4: except ldap.NO_SUCH_OBJECT: 5: pass
Ajouter des utilisateurs dans les groupes.
1: for i in range(1,51): 2: for j in [i%10+1,(i+1)%10+1]: 3: try: 4: conn.modify_s('cn=group_%s,ou=groups,%s'%(j,OUdn), 5: [(ldap.MOD_ADD,'memberUid','user%s'%i)]) 6: except ldap.TYPE_OR_VALUE_EXISTS: 7: pass
Lister tous les membres du groupe « groupe_10 ».
1: resultat=conn.search_s('cn=group_10,ou=groups,'+OUdn, ldap.SCOPE_SUBTREE, '(objectClass=posixGroup)') 2: for dn,entry in resultat: 3: print entry['memberUid']
Lister tous les groupes auquels appartient l'utilisateur « user13 ».
1: resultat=conn.search_s('ou=groups,'+OUdn, ldap.SCOPE_SUBTREE, '(memberUid=user13)') 2: for dn,entry in resultat: 3: print entry['cn']
Retirer des utilisateurs des groupes.
1: resultat=conn.search_s('ou=groups,'+OUdn, ldap.SCOPE_SUBTREE, '(objectClass=posixGroup)') 2: for dn,entry in resultat: 3: try: 4: conn.modify_s(dn, [(ldap.MOD_DELETE,'memberUid',None)] ) 5: except ldap.NO_SUCH_ATTRIBUTE: 6: pass