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
This commit is contained in:
pauget 2004-11-27 21:57:05 +01:00
parent 08d91ae155
commit 1f2bcef775

View file

@ -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-<nom du club avec uniquement les 26 lettres de l'alphabet>
login = 'club-'
for l in strip_accents(self.Nom().lower()) :
if l in string.letters : login += l
# Génération du login : club-<login fourni>
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) ]