From f577a7f1c91dfbc0d05fca8acb0012d3ec99eedd Mon Sep 17 00:00:00 2001 From: pauget Date: Sun, 17 Oct 2004 21:30:52 +0200 Subject: [PATCH] Possibilit de changer son propre mot de passe. darcs-hash:20041017193052-41617-e3e4641cbc5d2682a8a3bf5e835ce56d40ea5ad5.gz --- gestion/chgpass.py | 55 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 16 deletions(-) diff --git a/gestion/chgpass.py b/gestion/chgpass.py index f34e4b57..a5638abe 100755 --- a/gestion/chgpass.py +++ b/gestion/chgpass.py @@ -2,15 +2,15 @@ # -*- coding: iso-8859-15 -*- import getpass, commands, os, sys +from user_tests import getuser from affich_tools import cprint try : from secrets import ldap_password, ldap_auth_dn except : - sys.stdout.write('Erreur : impossible de lire le fichier de secret !') ldap_password = '' ldap_auth_dn = '' - + def chgpass(dn) : cprint("""Le nouveau mot de passe doit comporter au minimum 6 caractères. Il ne doit pas être basé sur un mot du dictionnaire.""",'jaune') @@ -82,21 +82,29 @@ Il ne doit pas if __name__ == '__main__' : sys.stdout.write('\r \r') # Pour esthétique lors de l'utilisation par sudo - if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) != 2 : + if len(sys.argv) == 1 : + # Changement de son mot de passe + login = getuser() + self_mode = True + + elif '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) != 2 : print "%s " % sys.argv[0].split('/')[-1].split('.')[0] print "Changement du mot de passe du compte choisi." sys.exit(255) - - for c in sys.argv[1][:] : - if not c.isalnum() and not c=='-' : - cprint('Login incorrect','rouge') - sys.exit(1) + else : + # Changement du mot de passe par un admin câbleur ou une nounou + login = sys.argv[1] + self_mode = False + for c in login[:] : + if not c.isalnum() and not c=='-' : + cprint('Login incorrect','rouge') + sys.exit(1) - if os.getlogin() == sys.argv[1] : - cprint('Utiliser passwd pour changer son propre mot de passe','rouge') - sys.exit(2) - - s = commands.getoutput("/usr/bin/ldapsearch -x -LLL '(&(objectClass=posixAccount)(uid=%s))' dn nom prenom droits" % sys.argv[1]).strip() + if getuser() == login : + cprint('Utiliser passwd pour changer son propre mot de passe','rouge') + sys.exit(2) + + s = commands.getoutput("/usr/bin/ldapsearch -x -LLL '(&(objectClass=posixAccount)(uid=%s))' dn nom prenom droits" % login).strip() if not s : cprint('Login non trouvé dans la base LDAP','rouge') sys.exit(3) @@ -104,7 +112,7 @@ if __name__ == '__main__' : # Ca a l'air bon if s.find('\n\n') != -1 : # Plusieurs trouvé : pas normal - cprint('Erreur lors de la recherche du login : plusieur occurences !','rouge') + cprint('Erreur lors de la recherche du login : plusieurs occurences !','rouge') sys.exit(4) s = s.split('\n') @@ -115,7 +123,22 @@ if __name__ == '__main__' : cprint('Erreur lors de la recherche du login','rouge') sys.exit(5) - if len(s) > 3 : + if self_mode : + # Il faut vérifier l'ancien mot de passe + ldap_auth_dn = dn + ldap_password = getpass.getpass('Mot de passe actuel : ') + s = commands.getoutput("/usr/bin/ldapwhoami -x -D '%s' -w '%s'" % ( ldap_auth_dn, ldap_password ) ).strip() + try : + resultat = s.split(':')[1].strip() + except : + cprint("Erreur lors de l'authentification",'rouge') + sys.exit(7) + if resultat != dn : + print '|%s|' % resultat + cprint({ 'Invalid credentials (49)' : 'Mot de passe invalide' }.get(resultat,resultat),'rouge') + sys.exit(8) + + elif len(s) > 3 : # Adhérent avec droits From = 'roots@crans.org' To = 'roots@crans.org' @@ -124,7 +147,7 @@ To: %s Subject: Tentative de changement de mot de passe ! Tentative de changement du mot de passe de %s par %s. -""" % ( From, To , sys.argv[1], os.getlogin() ) +""" % ( From, To , login, os.getlogin() ) # Envoi mail import smtplib