[chgpass] gest_crans_lc utilisait une fonction de chgpass
This commit is contained in:
parent
9e25812e62
commit
f9646ab6ca
2 changed files with 42 additions and 17 deletions
|
@ -6,6 +6,9 @@ Script de changement de mots de passe LDAP
|
||||||
|
|
||||||
* Change le mot de passe de l'utilisateur donné en
|
* Change le mot de passe de l'utilisateur donné en
|
||||||
argument.
|
argument.
|
||||||
|
|
||||||
|
Auteur : Pierre-Elliott Bécue <becue@crans.org>
|
||||||
|
Licence : GPLv3
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import gestion.config as config
|
import gestion.config as config
|
||||||
|
@ -24,23 +27,27 @@ encoding = "UTF-8"
|
||||||
ldap = lc_ldap.shortcuts.lc_ldap_admin()
|
ldap = lc_ldap.shortcuts.lc_ldap_admin()
|
||||||
current_user = os.getenv("SUDO_USER") or os.getenv("USER") or os.getenv("LOGNAME") or getpass.getuser()
|
current_user = os.getenv("SUDO_USER") or os.getenv("USER") or os.getenv("LOGNAME") or getpass.getuser()
|
||||||
|
|
||||||
def check_password(password, no_cracklib=False):
|
def check_password(password, no_cracklib=False, dialog=False):
|
||||||
"""
|
"""
|
||||||
Teste le mot de passe.
|
Teste le mot de passe.
|
||||||
* Tests custom + cracklib (sauf si no_cracklib)
|
* Tests custom + cracklib (sauf si no_cracklib)
|
||||||
"""
|
"""
|
||||||
|
problem = False
|
||||||
|
msg = ""
|
||||||
try:
|
try:
|
||||||
password.decode('ascii')
|
password.decode('ascii')
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
affich_tools.cprint(u'Le mot de passe ne doit contenir que des caractères ascii.', "rouge")
|
problem = True
|
||||||
return False
|
if not dialog:
|
||||||
|
affich_tools.cprint(u'Le mot de passe ne doit contenir que des caractères ascii.', "rouge")
|
||||||
|
else:
|
||||||
|
msg += affich_tools.coul(u'Le mot de passe ne doit contenir que des caractères ascii.\n', "rouge", dialog=dialog)
|
||||||
|
|
||||||
# Nounou mode
|
# Nounou mode
|
||||||
if no_cracklib:
|
if no_cracklib:
|
||||||
if len(password) >= config.password.root_min_len:
|
if len(password) >= config.password.root_min_len:
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
problem = False
|
|
||||||
upp = 0
|
upp = 0
|
||||||
low = 0
|
low = 0
|
||||||
oth = 0
|
oth = 0
|
||||||
|
@ -59,22 +66,37 @@ def check_password(password, no_cracklib=False):
|
||||||
|
|
||||||
# Recherche de manque de caractères
|
# Recherche de manque de caractères
|
||||||
if cif < config.password.min_cif:
|
if cif < config.password.min_cif:
|
||||||
affich_tools.cprint(u'Le mot de passe doit contenir plus de chiffres.', "rouge")
|
if not dialog:
|
||||||
|
affich_tools.cprint(u'Le mot de passe doit contenir plus de chiffres.', "rouge")
|
||||||
|
else:
|
||||||
|
msg += affich_tools.coul(u'Le mot de passe doit contenir plus de chiffres.\n', "rouge", dialog=dialog)
|
||||||
problem = True
|
problem = True
|
||||||
if upp < config.password.min_upp:
|
if upp < config.password.min_upp:
|
||||||
affich_tools.cprint(u'Le mot de passe doit contenir plus de majuscules.', "rouge")
|
if not dialog:
|
||||||
|
affich_tools.cprint(u'Le mot de passe doit contenir plus de majuscules.', "rouge")
|
||||||
|
else:
|
||||||
|
msg += affich_tools.coul(u'Le mot de passe doit contenir plus de majuscules.\n', "rouge", dialog=dialog)
|
||||||
problem = True
|
problem = True
|
||||||
if low < config.password.min_low:
|
if low < config.password.min_low:
|
||||||
affich_tools.cprint(u'Le mot de passe doit contenir plus de minuscules.', "rouge")
|
if not dialog:
|
||||||
|
affich_tools.cprint(u'Le mot de passe doit contenir plus de minuscules.', "rouge")
|
||||||
|
else:
|
||||||
|
msg += affich_tools.coul(u'Le mot de passe doit contenir plus de minuscules.\n', "rouge", dialog=dialog)
|
||||||
problem = True
|
problem = True
|
||||||
if oth < config.password.min_oth:
|
if oth < config.password.min_oth:
|
||||||
affich_tools.cprint(u'Le mot de passe doit contenir plus de caractères qui ne sont ni des chiffres, ni des majuscules, ni des minuscules.', "rouge")
|
if not dialog:
|
||||||
|
affich_tools.cprint(u'Le mot de passe doit contenir plus de caractères qui ne sont ni des chiffres, ni des majuscules, ni des minuscules.', "rouge")
|
||||||
|
else:
|
||||||
|
msg += affich_tools.coul(u'Le mot de passe doit contenir plus de caractères qui ne sont ni des chiffres, ni des majuscules, ni des minuscules.\n', "rouge", dialog=dialog)
|
||||||
problem = True
|
problem = True
|
||||||
|
|
||||||
# Scores sur la longueur
|
# Scores sur la longueur
|
||||||
longueur = config.password.upp_value*upp + config.password.low_value*low + config.password.cif_value*cif + config.password.oth_value*oth
|
longueur = config.password.upp_value*upp + config.password.low_value*low + config.password.cif_value*cif + config.password.oth_value*oth
|
||||||
if longueur < config.password.min_len:
|
if longueur < config.password.min_len:
|
||||||
affich_tools.cprint(u'Le mot de passe devrait être plus long, ou plus difficile.')
|
if not dialog:
|
||||||
|
affich_tools.cprint(u'Le mot de passe devrait être plus long, ou plus difficile.', "rouge")
|
||||||
|
else:
|
||||||
|
msg += affich_tools.coul(u'Le mot de passe devrait être plus long, ou plus difficile.\n', "rouge", dialog=dialog)
|
||||||
problem = True
|
problem = True
|
||||||
|
|
||||||
if not problem:
|
if not problem:
|
||||||
|
@ -82,14 +104,17 @@ def check_password(password, no_cracklib=False):
|
||||||
# Le mot vient-il du dico (à améliorer, on voudrait pouvoir préciser
|
# Le mot vient-il du dico (à améliorer, on voudrait pouvoir préciser
|
||||||
# la rigueur du test) ?
|
# la rigueur du test) ?
|
||||||
password = cracklib.VeryFascistCheck(password)
|
password = cracklib.VeryFascistCheck(password)
|
||||||
return True
|
return True, ""
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
affich_tools.cprint(str(e).decode(), "rouge")
|
if not dialog:
|
||||||
return False
|
affich_tools.cprint(str(e).decode(), "rouge")
|
||||||
|
else:
|
||||||
|
msg += affich_tools.coul(str(e).decode(), "rouge", dialog=dialog)
|
||||||
|
return False, msg
|
||||||
else:
|
else:
|
||||||
return False
|
return False, msg
|
||||||
|
|
||||||
return False
|
return False, msg
|
||||||
|
|
||||||
def change_password(arguments):
|
def change_password(arguments):
|
||||||
"""
|
"""
|
||||||
|
@ -139,7 +164,7 @@ CTRL+D ou CTRL+C provoquent un abandon.""" % (config.password.min_len, config.pa
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
mdp = getpass.getpass("Nouveau mot de passe: ")
|
mdp = getpass.getpass("Nouveau mot de passe: ")
|
||||||
if check_password(mdp, arguments.no_cracklib):
|
if check_password(mdp, arguments.no_cracklib)[0]:
|
||||||
mdp2 = getpass.getpass("Retaper le mot de passe: ")
|
mdp2 = getpass.getpass("Retaper le mot de passe: ")
|
||||||
if mdp != mdp2:
|
if mdp != mdp2:
|
||||||
affich_tools.cprint(u"Les deux mots de passe diffèrent.", "rouge")
|
affich_tools.cprint(u"Les deux mots de passe diffèrent.", "rouge")
|
||||||
|
|
|
@ -30,7 +30,7 @@ from OpenSSL import crypto, SSL
|
||||||
|
|
||||||
from gestion.cert_utils import createCertRequest
|
from gestion.cert_utils import createCertRequest
|
||||||
from gestion.affich_tools import get_screen_size, coul
|
from gestion.affich_tools import get_screen_size, coul
|
||||||
from gestion.chgpass import checkpass
|
from gestion.chgpass import check_password
|
||||||
import gestion.config as config
|
import gestion.config as config
|
||||||
import gestion.config.factures
|
import gestion.config.factures
|
||||||
|
|
||||||
|
@ -2344,7 +2344,7 @@ les valeurs valident sont :
|
||||||
def proprio_compte_password(self, proprio, cont, return_obj=False):
|
def proprio_compte_password(self, proprio, cont, return_obj=False):
|
||||||
"""Permet de changer le mot de passe d'un compte crans"""
|
"""Permet de changer le mot de passe d'un compte crans"""
|
||||||
def test_password(password, self_cont):
|
def test_password(password, self_cont):
|
||||||
(good, msg) = checkpass(password, dialog=True)
|
(good, msg) = check_password(password, dialog=True)
|
||||||
if not good:
|
if not good:
|
||||||
self.dialog.msgbox(
|
self.dialog.msgbox(
|
||||||
msg,
|
msg,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue