From 1f2bcef775069be6b71e52791c1cf453196474c3 Mon Sep 17 00:00:00 2001 From: pauget Date: Sat, 27 Nov 2004 21:57:05 +0100 Subject: [PATCH] Choix du login pour les clubs. Changement de shell pour les clubs. Correction petit bug dans la recherche (c'est beaucoup plus rapide pour les recherches de type truc=*). darcs-hash:20041127205705-41617-8c5a36f7bc9f5e35a40b09394169f4c1a8b4f422.gz --- gestion/ldap_crans.py | 51 ++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 0c3df6b3..8e7e8bf4 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -527,7 +527,7 @@ class crans_ldap : ## Recherche avec chacun des filtres r={} # contiendra les réponses par filtre for i in filtres : - if (filtre_tout and filtre!='(&' ) or filtre_cond[i] : + if (filtre_tout and filtre[i]!='(&' ) or filtre_cond[i] : # Filtre valide #filtre[i] += ')' filtre[i] += '(objectClass=%s))' % i @@ -969,6 +969,16 @@ class base_proprietaire(base_classes_crans) : self._data={ 'objectClass' : [ self.objectClass ] } self._init_data={} self._modifiable = 'w' + + def chsh(self,new=None) : + """ Retourne ou change le shell de l'adhérent """ + if new == None : + try : return decode(self._data.get('loginShell',[''])[0]) + except : return '' + else : + new = preattr(new)[1] + self._set('loginShell',[new]) + return new def alias(self,new=None) : """ @@ -1516,17 +1526,7 @@ class adherent(base_proprietaire) : self._data['gecos'] = [ preattr(strip_accents(self.Nom()))[1] + ',,,' ] return decode(login) - - def chsh(self,new=None) : - """ Retourne ou change le shell de l'adhérent """ - if new == None : - try : return decode(self._data.get('loginShell',[''])[0]) - except : return '' - else : - new = preattr(new)[1] - self._set('loginShell',[new]) - return new - + def cannonical_alias(self,new=None) : """ Retourne ou défini l'alias canonique""" if new == None : @@ -1590,7 +1590,7 @@ class club(base_proprietaire) : def carteEtudiant(self,pd=None) : return [ ann_scol ] - + def responsable(self,adher=None) : """ Responsable du club, adher doit être une instance de la classe adhérent """ if adher==None : @@ -1627,30 +1627,31 @@ class club(base_proprietaire) : annu = annuaires.locaux_clubs() return decode(annu.get(self.chbre(),'')) - def compte(self,create=None) : - """ Créé un compte au club sur zamok - Si create = 1 créé le compte - """ - if create==None : + def compte(self,login=None) : + """ Créé un compte au club sur zamok""" + if login==None : return self._data.get('uid',[''])[0] - # Génération du login : club- - login = 'club-' - for l in strip_accents(self.Nom().lower()) : - if l in string.letters : login += l + # Génération du login : club- + login = login.lower() + if not sre.match('^club-', login) : + login = 'club-' + login + for l in login : + if l not in string.letters + '-': + raise ValueError('Caractère %s interdit dans le login.' % l) login = preattr(login)[1] if 'posixAccount' in self._data['objectClass'] : if login != self._data['uid'] : # A déja un compte - raise ValueError(u"Le club déjà un compte. Login : %s" % self._data['uid'][0]) + raise ValueError(u"Le club à déjà un compte. Login : %s" % self._data['uid'][0]) else : return login if mailexist(login) : raise ValueError(u"Login existant ou correspondant à un alias mail.",1) - home = '/home/' + login.replace('-','/') + home = '/home/' + login.replace('-','/',1) if os.path.exists(home) : raise ValueError(u'Création du compte impossible : home existant',1) @@ -1673,7 +1674,7 @@ class club(base_proprietaire) : self._locks.append(self.lock('uidNumber',str(uidNumber))) except : # Quelqu'un nous a piqué l'uid que l'on venait de choisir ! - return self.compte(1) + return self.compte(login) self._data['uidNumber']= [ str(uidNumber) ] self._data['gidNumber']=[ str(config.club_gid) ]