[lc_ldap] correction de la création de compte

This commit is contained in:
Antoine Durand-Gasselin 2010-10-17 18:55:40 +02:00
parent 514915b1be
commit 27ed937c5f
2 changed files with 26 additions and 26 deletions

View file

@ -46,12 +46,12 @@ def ip_of_mid(mid):
def strip_accents(a): def strip_accents(a):
""" Supression des accents de la chaîne fournie""" """ Supression des accents de la chaîne fournie"""
res = normalize('NFKD', a).encode('ASCII', 'ignore') res = normalize('NFKD', a).encode('ASCII', 'ignore')
return res return unicode(res)
def strip_spaces(a): def strip_spaces(a):
""" Suppression des espaces et des apostrophes""" """ Suppression des espaces et des apostrophes"""
res = a.copy() res = a.copy()
res.replace(' ', '_').replace("'", '') res.replace(u' ', u'_').replace(u"'", u'')
return res return res
def mailexist(mail): def mailexist(mail):

View file

@ -31,7 +31,7 @@
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from __future__ import with_statement 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 ldap.modlist import addModlist, modifyModlist
from Levenshtein import jaro from Levenshtein import jaro
sys.path.append('/usr/scripts/gestion') sys.path.append('/usr/scripts/gestion')
@ -582,35 +582,35 @@ class adherent(proprio):
if u'posixAccount' in self.attrs['objectClass']: if u'posixAccount' in self.attrs['objectClass']:
return self.attrs['uid'][0] return self.attrs['uid'][0]
elif login: elif login:
nom = strip_accents(self.attrs['nom'][0]).lower() fn = crans_utils.strip_accents(self.attrs['prenom'][0].capitalize())
login = strip_accents(login).lower() ln = crans_utils.strip_accents(self.attrs['nom'][0].capitalize())
if jaro(nom, login) < 0.75: login = crans_utils.strip_accents(login).lower()
raise ValueError("L'uid est trop différent du nom (%s -> %s)" % (uid, self.attrs['nom'][0])) if jaro(ln.lower(), login) < 0.75 and jaro(fn.lower() + ' ' + ln.lower(), login) < 0.75:
if not re.match('[a-z][-a-z]{1,15}'): raise ValueError("Le login est trop différent du nom (%s -> %s)" %
raise ValueError("Seules les lettres non accentuées et le - sont acceptés pour le login") (login, self.attrs['nom'][0]))
if mailexist(login): if not re.match('^[a-z][-a-z]{1,15}$', login):
raise ValueError(u"Login existant ou correspondant à un alias mail.", 1) 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): 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): 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['homeDirectory'] = [home]
self._modifs['mail'] = [login] self._modifs['mail'] = [login]
self._modifs['uid' ] = [login] self._modifs['uid' ] = [login]
fn = strip_accents(self.attrs['prenom'].capitalize()) calias = crans_utils.strip_spaces(fn) + u'.' + crans_utils.strip_spaces(ln)
ln = strip_accents(self.attrs['nom'].capitalize())) if crans_utils.mailexist(calias):
calias = strip_spaces(fn) + '.' + strip_spaces(ln)
if mailexists(calias):
calias = login calias = login
self._modifs['canonicalAlias'] = [calias] self._modifs['canonicalAlias'] = [calias]
self._modifs['objectClass'] = ['adherent', 'cransAccount', 'posixAccount', 'shadowAccount'] self._modifs['objectClass'] = [u'adherent', u'cransAccount', u'posixAccount', u'shadowAccount']
self._modifs['cn'] = fn + ' ' + ln self._modifs['cn'] = [ fn + u' ' + ln ]
self._modifs['loginShell'] = [ shel] self._modifs['loginShell'] = [unicode(shell)]
self._modifs['userPassword'] = [hash_pass] self._modifs['userPassword'] = [unicode(hash_pass)]
if uidNumber: if uidNumber:
if self.conn.search('(uidNumber=%s)' % uidNumber): if self.conn.search('(uidNumber=%s)' % uidNumber):
@ -623,7 +623,7 @@ class adherent(proprio):
if not self.conn.search('(uidNumber=%s)' % uidNumber): if not self.conn.search('(uidNumber=%s)' % uidNumber):
break break
if not len(pool_uid): if not len(pool_uid):
raise ValueError(u"Plus d'uid disponibles !") raise ValueError("Plus d'uid disponibles !")
## try: ## try:
## self.lock('uidNumber', str(uidNumber)) ## 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 ! ## # Quelqu'un nous a piqué l'uid que l'on venait de choisir !
## return self.compte(login, uidNumber, hash_pass, shell) ## return self.compte(login, uidNumber, hash_pass, shell)
self._modifs['uidNumber'] = [str(uidNumber)] self._modifs['uidNumber'] = [unicode(uidNumber)]
self._modifs['gidNumber'] = [str(config.gid)] self._modifs['gidNumber'] = [unicode(config.gid)]
self._modifs['gecos'] = cn + ',,,' self._modifs['gecos'] = self._modifs['cn'][0] + u',,,'
self.save() self.save()