Table of Contents

Fil Rouge

Navigation rapide : Lundi / Mardi / Mercredi / Jeudi / Vendredi Mémos : Perl / Python / Ruby

LDAP for the beginners - Python

La documentation complète du module est ici.

1

Se connecter au serveur LDAP

python

 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()

2

Créer une entrée de type organizationalUnit correspondant à votre laboratoire (ex : UMR1492), afin de travailler dans votre propre sous-arborescence.

python

 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

3

En dessous de votre entrée « UMR1492 », créer une entrée de type organizationalUnit que vous nommerez « groups ».

python

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

4

En dessous de votre entrée « UMR1492 », créer une entrée de type organizationalUnit que vous nommerez « users ».

python

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

5

En dessous de votre entrée « UMR1492 / groups », vous allez créer 10 entrées de type posixGroup.

python

 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

6

Lister tous les groupes.

python

1: resultat=conn.search_s('ou=groups,'+OUdn, ldap.SCOPE_SUBTREE, '(objectClass=posixGroup)')
2: for dn,entry in resultat:
3:     print entry['cn']

7

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.

python

 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

8

Lister tous les utilisateurs.

python

1: resultat=conn.search_s('ou=users,'+OUdn, ldap.SCOPE_SUBTREE, '(objectClass=inetOrgPerson)')
2: for dn,entry in resultat:
3:     print entry['uid']

9

Retirer les 25 derniers utilisateurs ajoutés.

python

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

10

Ajouter des utilisateurs dans les groupes.

python

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

11

Lister tous les membres du groupe « groupe_10 ».

python

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']

12

Lister tous les groupes auquels appartient l'utilisateur « user13 ».

python

1: resultat=conn.search_s('ou=groups,'+OUdn, ldap.SCOPE_SUBTREE, '(memberUid=user13)')
2: for dn,entry in resultat:
3:     print entry['cn']

13

Retirer des utilisateurs des groupes.

python

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