diff --git a/attributs.py b/attributs.py index 56ab93a..e6e7f29 100644 --- a/attributs.py +++ b/attributs.py @@ -44,17 +44,17 @@ from midtools import Mid ### Les droits # en cas de typo, l'appel d'une variable plante, on préfèrera donc les utiliser en lieu et place # des chaînes de caractères -nounou = "Nounou" -cableur = "Cableur" -apprenti = "Apprenti" -tresorier = "Tresorier" -bureau = "Bureau" -imprimeur = "Imprimeur" -moderateur = "Moderateur" -multimachines = "Multimachines" -parent = "parent" -soi = "soi" -responsable = "responsable" +nounou = u"Nounou" +cableur = u"Cableur" +apprenti = u"Apprenti" +tresorier = u"Tresorier" +bureau = u"Bureau" +imprimeur = u"Imprimeur" +moderateur = u"Moderateur" +multimachines = u"Multimachines" +parent = u"parent" +soi = u"soi" +responsable = u"responsable" TOUS_DROITS = [nounou, apprenti, bureau, tresorier, imprimeur, moderateur, multimachines, cableur] DROITS_ELEVES = [nounou, bureau] @@ -285,9 +285,11 @@ class mail(Attr): if res: raise ValueError("Mail déjà existant", [r.dn for r in res]) - # XXX - to be implemented - #def parse_value(self, mail, ldif): - # pass + def parse_value(self, mail, ldif): + if not re.match('^[A-Za-z][-_.0-9A-Za-z]+@([A-Za-z0-9]{2}[A-Za-z0-9-_]*[.])+[a-z]{2,6}$', val): + raise ValueError("Adresse mail invalide (%s)" % val) + self.value = val + class canonicalAlias(mail): singlevalue = True @@ -298,7 +300,8 @@ class canonicalAlias(mail): def parse_value(self, val, ldif): val = u".".join([ a.capitalize() for a in val.split(u'.', 1) ]) - if not re.match('[A-Za-z][-_.0-9A-Za-z]+', val): + val = u"-".join([ a.capitalize() for a in val.split(u'-', 1) ]) + if not re.match('^[A-Za-z][-_.0-9A-Za-z]+@([A-Za-z0-9]{2}[A-Za-z0-9-_]*[.])+[a-z]{2,6}$', val): raise ValueError("Alias mail invalide (%s)" % val) self.value = val @@ -312,7 +315,7 @@ class mailAlias(mail): def parse_value(self, val, ldif): val = val.lower() - if not re.match('[a-z][-_.0-9a-z]+', val): + if not re.match('^[A-Za-z][-_.0-9A-Za-z]+@([A-Za-z0-9]{2}[A-Za-z0-9-_]*[.])+[a-z]{2,6}$', val): raise ValueError("Alias mail invalide (%r)" % val) self.value = val @@ -365,8 +368,8 @@ class droits(Attr): category = 'perso' def parse_value(self, val, ldif): - if val.lower() not in [i.lower() for i in TOUS_DROITS]: - raise ValueError("Ces droits n'existent pas (%r)" % val) +# if val.lower() not in [i.lower() for i in TOUS_DROITS]: +# raise ValueError("Ces droits n'existent pas (%r)" % val) self.value = val.capitalize() def is_modifiable(self, liste_droits): diff --git a/lc_ldap.py b/lc_ldap.py index 21c2fc4..7f35119 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -48,6 +48,7 @@ sys.path.append('/usr/scripts/gestion') import config, crans_utils from attributs import attrify, blacklist from ldap_locks import CransLock +import midtools uri = 'ldap://ldap.adm.crans.org/' base_dn = 'ou=data,dc=crans,dc=org' @@ -230,15 +231,11 @@ class lc_ldap(ldap.ldapobject.LDAPObject): elif realm in ["fil", "fil-v6", "gratuit", "personnel-ens"]: uldif['objectClass'] = [u'machineFixe'] assert isinstance(owner, adherent) or isinstance(owner, club) - # XXX - Vérifier les droits else: raise ValueError("Realm inconnu: %r" % realm) # On récupère la plage des mids - if realm == 'fil': - plage = xrange(256, 2047) - else: - plage = xrange( *(config.mid[realm])) + plage = xrange( *(config.mid[realm])) # On récupère le premier id libre dans la plages s'il n'est pas # déjà précisé dans le ldiff mid = uldif.setdefault('mid', [ unicode(self._find_id('mid', plage)) ]) @@ -673,6 +670,7 @@ class adherent(proprio): if u'posixAccount' in self.attrs['objectClass']: return self.attrs['uid'][0] + elif login: fn = crans_utils.strip_accents(unicode(self.attrs['prenom'][0]).capitalize()) ln = crans_utils.strip_accents(unicode(self.attrs['nom'][0]).capitalize())