From 27ed937c5fa777f1c8a4962f2b2346350f111b85 Mon Sep 17 00:00:00 2001 From: Antoine Durand-Gasselin Date: Sun, 17 Oct 2010 18:55:40 +0200 Subject: [PATCH] =?UTF-8?q?[lc=5Fldap]=20correction=20de=20la=20cr=C3=A9at?= =?UTF-8?q?ion=20de=20compte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crans_utils.py | 4 ++-- lc_ldap.py | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/crans_utils.py b/crans_utils.py index add9bca..c518ded 100644 --- a/crans_utils.py +++ b/crans_utils.py @@ -46,12 +46,12 @@ def ip_of_mid(mid): def strip_accents(a): """ Supression des accents de la chaîne fournie""" res = normalize('NFKD', a).encode('ASCII', 'ignore') - return res + return unicode(res) def strip_spaces(a): """ Suppression des espaces et des apostrophes""" res = a.copy() - res.replace(' ', '_').replace("'", '') + res.replace(u' ', u'_').replace(u"'", u'') return res def mailexist(mail): diff --git a/lc_ldap.py b/lc_ldap.py index 4363819..1f33e7a 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -31,7 +31,7 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from __future__ import with_statement -import os, sys, ldap, re, netaddr, datetime, copy, time +import os, sys, ldap, re, netaddr, datetime, copy, time, random from ldap.modlist import addModlist, modifyModlist from Levenshtein import jaro sys.path.append('/usr/scripts/gestion') @@ -582,35 +582,35 @@ class adherent(proprio): if u'posixAccount' in self.attrs['objectClass']: return self.attrs['uid'][0] elif login: - nom = strip_accents(self.attrs['nom'][0]).lower() - login = strip_accents(login).lower() - if jaro(nom, login) < 0.75: - raise ValueError("L'uid est trop différent du nom (%s -> %s)" % (uid, self.attrs['nom'][0])) - if not re.match('[a-z][-a-z]{1,15}'): - raise ValueError("Seules les lettres non accentuées et le - sont acceptés pour le login") - if mailexist(login): - raise ValueError(u"Login existant ou correspondant à un alias mail.", 1) + fn = crans_utils.strip_accents(self.attrs['prenom'][0].capitalize()) + ln = crans_utils.strip_accents(self.attrs['nom'][0].capitalize()) + login = crans_utils.strip_accents(login).lower() + if jaro(ln.lower(), login) < 0.75 and jaro(fn.lower() + ' ' + ln.lower(), login) < 0.75: + raise ValueError("Le login est trop différent du nom (%s -> %s)" % + (login, self.attrs['nom'][0])) + if not re.match('^[a-z][-a-z]{1,15}$', login): + raise ValueError("Le login a entre 2 et 16 lettres, il peut contenir (pas au début) des - ") + if crans_utils.mailexist(login): + raise ValueError("Login existant ou correspondant à un alias mail.") - home = '/home/' + login + home = u'/home/' + login if os.path.exists(home): - raise ValueError(u'Création du compte impossible : home existant', 1) + raise ValueError('Création du compte impossible : home existant') if os.path.exists("/var/mail/" + login): - raise ValueError(u'Création du compte impossible : /var/mail/%s existant' % login, 1) + raise ValueError('Création du compte impossible : /var/mail/%s existant' % login) self._modifs['homeDirectory'] = [home] self._modifs['mail'] = [login] self._modifs['uid' ] = [login] - fn = strip_accents(self.attrs['prenom'].capitalize()) - ln = strip_accents(self.attrs['nom'].capitalize())) - calias = strip_spaces(fn) + '.' + strip_spaces(ln) - if mailexists(calias): + calias = crans_utils.strip_spaces(fn) + u'.' + crans_utils.strip_spaces(ln) + if crans_utils.mailexist(calias): calias = login self._modifs['canonicalAlias'] = [calias] - self._modifs['objectClass'] = ['adherent', 'cransAccount', 'posixAccount', 'shadowAccount'] - self._modifs['cn'] = fn + ' ' + ln - self._modifs['loginShell'] = [ shel] - self._modifs['userPassword'] = [hash_pass] + self._modifs['objectClass'] = [u'adherent', u'cransAccount', u'posixAccount', u'shadowAccount'] + self._modifs['cn'] = [ fn + u' ' + ln ] + self._modifs['loginShell'] = [unicode(shell)] + self._modifs['userPassword'] = [unicode(hash_pass)] if uidNumber: if self.conn.search('(uidNumber=%s)' % uidNumber): @@ -623,7 +623,7 @@ class adherent(proprio): if not self.conn.search('(uidNumber=%s)' % uidNumber): break if not len(pool_uid): - raise ValueError(u"Plus d'uid disponibles !") + raise ValueError("Plus d'uid disponibles !") ## try: ## self.lock('uidNumber', str(uidNumber)) @@ -631,9 +631,9 @@ class adherent(proprio): ## # Quelqu'un nous a piqué l'uid que l'on venait de choisir ! ## return self.compte(login, uidNumber, hash_pass, shell) - self._modifs['uidNumber'] = [str(uidNumber)] - self._modifs['gidNumber'] = [str(config.gid)] - self._modifs['gecos'] = cn + ',,,' + self._modifs['uidNumber'] = [unicode(uidNumber)] + self._modifs['gidNumber'] = [unicode(config.gid)] + self._modifs['gecos'] = self._modifs['cn'][0] + u',,,' self.save()