Commit 57da373a authored by Daniel STAN's avatar Daniel STAN

chgpass: utilise des args optionnels

et non un Namespace
parent ff4b0505
......@@ -125,11 +125,19 @@ def check_password(password, no_cracklib=False, dialog=False):
return False, msg
@lc_ldap.shortcuts.with_ldap_conn(retries=2, delay=5, constructor=lc_ldap.shortcuts.lc_ldap_admin)
def change_password(arguments, ldap):
def change_password(ldap, login=None, verbose=False, no_cracklib=False, **args):
"""
Change le mot de passe en fonction des arguments
"""
with ldap.search(u"(uid=%s)" % (arguments.user.decode(encoding),), mode="w")[0] as user:
if login is None:
login = current_user
if type(login) == str:
login = login.decode(encoding)
login = lc_ldap.crans_utils.escape(login)
query = ldap.search(u"(uid=%s)" % login, mode="w")
if not query:
affich_tools.cprint('Utilisateur introuvable', "rouge")
with query[0] as user:
# Test pour vérifier que l'utilisateur courant peut modifier le mdp de user
try:
user['userPassword'] = [lc_ldap.crans_utils.hash_password("test").decode('ascii')]
......@@ -145,7 +153,7 @@ def change_password(arguments, ldap):
Subject: Tentative de changement de mot de passe !
Tentative de changement du mot de passe de %s par %s.
""" % (From, To , sys.argv[1], current_user)
""" % (From, To , login.encode(encoding), current_user)
# Envoi mail
conn = smtplib.SMTP('localhost')
......@@ -154,26 +162,49 @@ def change_password(arguments, ldap):
sys.exit(1)
# On peut modifier le MDP
affich_tools.cprint("Changement du mot de passe de %s %s." % (user['prenom'][0], user['nom'][0]), "vert")
affich_tools.cprint("Changement du mot de passe de %s %s." %
(user['prenom'][0], user['nom'][0]),
"vert")
# Règles du jeu
if arguments.verbose:
# (J'ai perdu)
if verbose:
affich_tools.cprint(u"""Règles :
Longueur standard : %s, root : %s,
Minimums : chiffres : %s, minuscules : %s, majuscules : %s, autres : %s,
Scores de longueur : chiffres : %s, minuscules : %s, majuscules : %s, autres : %s,
Cracklib : %s.""" % (config.password.min_len, config.password.root_min_len, config.password.min_cif, config.password.min_low, config.password.min_upp, config.password.min_oth, config.password.cif_value, config.password.low_value, config.password.upp_value, config.password.oth_value, "Oui" * (not arguments.no_cracklib) + "Non" * (arguments.no_cracklib)), 'jaune')
Cracklib : %s.""" % (
config.password.min_len,
config.password.root_min_len,
config.password.min_cif,
config.password.min_low,
config.password.min_upp,
config.password.min_oth,
config.password.cif_value,
config.password.low_value,
config.password.upp_value,
config.password.oth_value,
"Oui" * (not no_cracklib) + "Non" * (no_cracklib)
),
'jaune')
else:
affich_tools.cprint(u"""Le nouveau mot de passe doit comporter au minimum %s caractères.
Il ne doit pas être basé sur un mot du dictionnaire.
Il doit contenir %s chiffre(s), %s minuscule(s), %s majuscule(s)
et au moins %s autre(s) caractère(s).
CTRL+D ou CTRL+C provoquent un abandon.""" % (config.password.min_len, config.password.min_cif, config.password.min_low, config.password.min_upp, config.password.min_oth), 'jaune')
CTRL+D ou CTRL+C provoquent un abandon.""" %
(
config.password.min_len,
config.password.min_cif,
config.password.min_low,
config.password.min_upp,
config.password.min_oth
), 'jaune')
try:
while True:
mdp = getpass.getpass("Nouveau mot de passe: ")
if check_password(mdp, arguments.no_cracklib)[0]:
if check_password(mdp, no_cracklib)[0]:
mdp2 = getpass.getpass("Retaper le mot de passe: ")
if mdp != mdp2:
affich_tools.cprint(u"Les deux mots de passe diffèrent.", "rouge")
......@@ -195,11 +226,23 @@ CTRL+D ou CTRL+C provoquent un abandon.""" % (config.password.min_len, config.pa
affich_tools.cprint(u"Mot de passe de %s changé." % (user['uid'][0]), "vert")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Recherche dans la base des adhérents", add_help=False)
parser.add_argument('-h', '--help', help="Affiche ce message et quitte.", action="store_true")
parser.add_argument('-n', '--no-cracklib', help="Permet de contourner les règles de choix du mot de passe (réservé aux nounous).", action="store_true")
parser.add_argument('-v', '--verbose', help="Permet de contourner les règles de choix du mot de passe (réservé aux nounous).", action="store_true")
parser.add_argument('user', type=str, nargs="?", help="L'utilisateur dont on veut changer le mot de passe.")
parser = argparse.ArgumentParser(
description="Recherche dans la base des adhérents",
add_help=False)
parser.add_argument('-h', '--help',
help="Affiche ce message et quitte.",
action="store_true")
parser.add_argument('-n', '--no-cracklib',
help="Permet de contourner les règles de choix du mot de passe" +
"(réservé aux nounous).",
action="store_true")
parser.add_argument('-v', '--verbose',
help="Permet de contourner les règles de choix du mot de passe" +
"(réservé aux nounous).",
action="store_true")
parser.add_argument('login', type=str, nargs="?",
help="L'utilisateur dont on veut changer le mot de passe.")
args = parser.parse_args()
if args.help:
......@@ -208,4 +251,4 @@ if __name__ == "__main__":
if args.no_cracklib:
if not lc_ldap.attributs.nounou in ldap.droits:
args.no_cracklib = False
change_password(args)
change_password(**vars(args))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment