All pastes #566854 Raw Edit

Sp4rKy

public python v1 · immutable
·published 2007-06-14 17:32 UTC
rendered paste body
#!/usr/bin/python# -*- coding: utf-8 -*-import sys,ldap,string,ldap.modlist as modlist,ldif,Confglobal l,myConfclass LdapUserManage:    #Définition des fonctions    def __init__ (self):        """ Initialise la connexion        Établit une connexion avec le serveur LDAP en tant qu'administrateur        Retour : référence vers la connexion        """        global l,myConf        myConf = Conf.Conf()        l = ldap.initialize(myConf.LdapUrl())        l.simple_bind_s("cn=admin,dc=basch,dc=ac-rennes,dc=fr","1&a.!")                def __del__ (self):        l.unbind_s()            def getid (self,cn="index"):        """ 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        """        global l        id = l.search_s("cn="+cn+",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,cn='index'):        """ Incrémente l'identifiant de groupe        Incrémente l'identifiant du plus petit gid libre         """        global l        dn = "cn="+cn+",ou=mygroup,dc=basch,dc=ac-rennes,dc=fr"        ldif = [(ldap.MOD_REPLACE, 'gidNumber',str(int(curentid) + 1))]        #old = {'gidNumber':}        #new = {'gidNumber':str(int(curentid) +1)}        #ldif = modlist.modifyModlist(old,new)        #print old        l.modify_s(dn,ldif)            def addUser (self,type):        """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 = '-'        """        global l        #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()        id = self.getid()                    if sys.argv[1] == '-':            ParamU = sys.stdin.readlines()        else:            ParamU = [sys.argv[1]]                if len(sys.argv) == 3:            ParamU = ParamU[0:int(sys.argv[2])]        if type == 'Student':            for i in ParamU:                ParamUser = i.strip('\r\n')                #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(";")]                self.addOneStudent(*[[x] for x in ParamUser.split(";")]);                     id = str(int(id) + 1)                    self.incid(id)            elif type == 'Prof':            for i in ParamU:                ParamUser = i.strip('\r\n')                #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(";")]                self.addOneProf(*[[x] for x in ParamUser.split(";")]);                     id = str(int(id) + 1)            self.incid(id)             #Generic function to add something to ldap from a dn string and a dictionnary    def _add(self,dn,a_Param):        global l        #Ajout à LDAP        ldi = modlist.addModlist(a_Param)             l.add_s(dn,ldi)        ca = l.search_s(dn,ldap.SCOPE_SUBTREE,"objectClass=*")        if len(ca) != 0:            return 0        #Add one Student    def addOneStudent(self,uid,sn,givenname,description = None ,password = None):        self.addOnePeople(uid,sn,givenname,description,password,'Student')            #Add one Prof    def addOneProf(self,uid,sn,givenname,description = None,password = None):        self.addOnePeople(uid,sn,givenname,description,password,'Prof')                    #Add only one person                    def addOnePeople(self,uid,sn,givenname,description,password,ou):        id = self.getid()        global myConf                if password is None:            password = myConf.getDefaultPass()                    if description is None:            description = "NoClass"        else:            #Parsing the list of class separated by ',' and add the user to groups            for cl in description[0].split(","):            	if ou == 'Prof':                	cl = 'Prof_'+ cl                if not self.ClassExist(cl):                	self.addOneClass(cl)                self.addToAClass(uid,cl)                            a_Param = {}        a_Param["uid"],a_Param["sn"],a_Param["givenName"],a_Param["description"],a_Param["userPassword"] = uid,sn,givenname,description,password        #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 = "uid=" + a_Param["uid"][0] +",ou="+ou+",ou=People,dc=basch,dc=ac-rennes,dc=fr"        print dn        print a_Param        res = self._add(dn,a_Param)                    if res == 0:            print "Utilisateur "+a_Param["cn"][0]+" ajouté !"            self.incid(id)                   #Delete one user by uid    #Return ldap.result()    def delOneUser(self,uid):        global l,myConf        dn = "uid=" + uid + ",ou=Student,ou=People," + myConf.getBaseDn()        l.delete_s(dn)        return l.result()    #DElete a professor by uid    #Retrun ldap result    def delOneProf(self,uid):        global l,myConf        dn = "uid=" + uid + ",ou=Prof,ou=People," + myConf.getBaseDn()        l.delete_s(dn)        return l.result()            #Add a class    def addOneClass(self,name):        global l,myConf        #Get the fist gid available        id = self.getid('Gindex')        dn = "cn=" + name + ",ou=mygroup,"+ myConf.getBaseDn()        a_Param = {}        a_Param["cn"] = [name]        a_Param["objectClass"] = ['posixGroup']        a_Param["gidNumber"] = [id]        self._add(dn,a_Param)        self.incid(id,'Gindex')            #Add someone to a class    def addToAClass(self,uid,classname):        global l,myConf        dn = "cn=" + classname + ",ou=mygroup,"+ myConf.getBaseDn()        ldif = [(ldap.MOD_ADD,'memberUid',uid)]        res = l.modify_s(dn,ldif)               ca = l.search_s(dn,ldap.SCOPE_SUBTREE,"objectClass=*")        if ca != 0:            print "Utilisateur "+ str(uid) +" ajouté à la classe " + classname            #Does this class exist ?    def ClassExist(self,classname):        global l,myConf        dn = "ou=mygroup,"+ myConf.getBaseDn()        id = l.search_s(dn,ldap.SCOPE_SUBTREE,"cn="+classname, None)        if str(id) != "[]":            print "Classe existante :"+classname            return True        else:            print "Classe inexistante :"+classname            return False