Possibilit de changer son propre mot de passe.
darcs-hash:20041017193052-41617-e3e4641cbc5d2682a8a3bf5e835ce56d40ea5ad5.gz
This commit is contained in:
parent
5189b3c310
commit
f577a7f1c9
1 changed files with 39 additions and 16 deletions
|
@ -2,12 +2,12 @@
|
||||||
# -*- coding: iso-8859-15 -*-
|
# -*- coding: iso-8859-15 -*-
|
||||||
|
|
||||||
import getpass, commands, os, sys
|
import getpass, commands, os, sys
|
||||||
|
from user_tests import getuser
|
||||||
|
|
||||||
from affich_tools import cprint
|
from affich_tools import cprint
|
||||||
try :
|
try :
|
||||||
from secrets import ldap_password, ldap_auth_dn
|
from secrets import ldap_password, ldap_auth_dn
|
||||||
except :
|
except :
|
||||||
sys.stdout.write('Erreur : impossible de lire le fichier de secret !')
|
|
||||||
ldap_password = ''
|
ldap_password = ''
|
||||||
ldap_auth_dn = ''
|
ldap_auth_dn = ''
|
||||||
|
|
||||||
|
@ -82,21 +82,29 @@ Il ne doit pas
|
||||||
|
|
||||||
if __name__ == '__main__' :
|
if __name__ == '__main__' :
|
||||||
sys.stdout.write('\r \r') # Pour esthétique lors de l'utilisation par sudo
|
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 <login>" % sys.argv[0].split('/')[-1].split('.')[0]
|
print "%s <login>" % sys.argv[0].split('/')[-1].split('.')[0]
|
||||||
print "Changement du mot de passe du compte choisi."
|
print "Changement du mot de passe du compte choisi."
|
||||||
sys.exit(255)
|
sys.exit(255)
|
||||||
|
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)
|
||||||
|
|
||||||
for c in sys.argv[1][:] :
|
if getuser() == login :
|
||||||
if not c.isalnum() and not c=='-' :
|
cprint('Utiliser passwd pour changer son propre mot de passe','rouge')
|
||||||
cprint('Login incorrect','rouge')
|
sys.exit(2)
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if os.getlogin() == sys.argv[1] :
|
s = commands.getoutput("/usr/bin/ldapsearch -x -LLL '(&(objectClass=posixAccount)(uid=%s))' dn nom prenom droits" % login).strip()
|
||||||
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 not s :
|
if not s :
|
||||||
cprint('Login non trouvé dans la base LDAP','rouge')
|
cprint('Login non trouvé dans la base LDAP','rouge')
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
|
@ -104,7 +112,7 @@ if __name__ == '__main__' :
|
||||||
# Ca a l'air bon
|
# Ca a l'air bon
|
||||||
if s.find('\n\n') != -1 :
|
if s.find('\n\n') != -1 :
|
||||||
# Plusieurs trouvé : pas normal
|
# 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)
|
sys.exit(4)
|
||||||
|
|
||||||
s = s.split('\n')
|
s = s.split('\n')
|
||||||
|
@ -115,7 +123,22 @@ if __name__ == '__main__' :
|
||||||
cprint('Erreur lors de la recherche du login','rouge')
|
cprint('Erreur lors de la recherche du login','rouge')
|
||||||
sys.exit(5)
|
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
|
# Adhérent avec droits
|
||||||
From = 'roots@crans.org'
|
From = 'roots@crans.org'
|
||||||
To = 'roots@crans.org'
|
To = 'roots@crans.org'
|
||||||
|
@ -124,7 +147,7 @@ To: %s
|
||||||
Subject: Tentative de changement de mot de passe !
|
Subject: Tentative de changement de mot de passe !
|
||||||
|
|
||||||
Tentative de changement du mot de passe de %s par %s.
|
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
|
# Envoi mail
|
||||||
import smtplib
|
import smtplib
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue