#!/usr/bin/python # -*- coding: utf-8 -*- import sys,ldap,string,ldap.modlist as modlist,ldif,Conf class LdapUserManage: def __init__ (self): """ Initialise la connexion Établit une connexion avec le serveur LDAP en tant qu'administrateur Retour : référence vers la connexion """ l = ldap.initialize(LdapUrl) l.simple_bind_s("cn=admin,dc=basch,dc=ac-rennes,dc=fr","1&a.!") return l def getid (self): """ Recupère l'identifiant du premier groupe libre Récupère sur le serveur LDAP le plus petit gid libre (> 1000) Retour : valeur de l'identifiant """ id = l.search_s("cn=index,ou=mygroup,dc=basch,dc=ac-rennes,dc=fr",ldap.SCOPE_SUBTREE,"objectClass=posixGroup",[ "gidNumber" ]) id = id[0][1]["gidNumber"][0] return id def incid (self,curentid): """ Incrémente l'identifiant de groupe Incrémente l'identifiant du plus petit gid libre """ dn = "cn=index,ou=mygroup,dc=basch,dc=ac-rennes,dc=fr" ldif = modlist.modifyModList(old,new) l.modify_s(dn,ldif) def addUser (self): """Ajout d'un utilisateur Paramètre : chaine sous la forme 'username;nom;nom;prénom;class;password' Soit la chaine est passée en paramèetre du programme Soit lue sur l'entrée standard si $1 = '-' """ #Récupération de la chaine contenant les paramètres de l'utilisateur if len(sys.argv) == 1: print "Erreur, vous devez mettre au moins un paramètre" quit() if sys.argv[1] == '-': ParamUser = sys.stdin.read() else: ParamUser = sys.argv[1] ParamUser = ParamUser.strip('\r\n') id = getid() a_Param = {} #Define attribute from parameters a_Param["uid"],a_Param["sn"],a_Param["givenName"],a_Param["description"],a_Param["userPassword"] = [[x] for x in ParamUser.split(";")] #Build missing attributes a_Param["objectclass"] = ['inetOrgPerson','posixAccount','shadowAccount','sambaSamAccount'] a_Param["uidNumber"] = [id] a_Param["gidNumber"] = [id] a_Param["homeDirectory"] = ['/home/' + a_Param["uid"][0]] a_Param["loginShell"] = ['/bin/bash'] a_Param["cn"] = [a_Param["givenName"][0]+ " " + a_Param["sn"][0]] a_Param["sambaSID"] = ['S-1-5-21-4043153765-4081505042-1247131504-512'] dn = "cn=" + a_Param["cn"][0] +",ou=People,dc=basch,dc=ac-rennes,dc=fr" #Ajout à LDAP ldi = modlist.addModlist(a_Param) l.add_s(dn,ldi) c = l.search_s(dn,ldap.SCOPE_SUBTREE,"objectClass=*") if len(c) != 0: print "Utilisateur "+a_Param["cn"][0]+" ajouté !" self.incid(id) l.unbind_s() ~ fred@linux1:~$ ./script.py - Traceback (most recent call last): File "./script.py", line 5, in class LdapUserManage: File "./script.py", line 76, in LdapUserManage self.incid(id) NameError: name 'self' is not defined BACKTRACE