darcs-hash:20060404224746-68412-c02859958ebb6c759a67a40516661d2ed40b1a7a.gz
This commit is contained in:
glondu 2006-04-05 00:47:46 +02:00
parent bf58f3db6c
commit fffbed84f9
6 changed files with 35 additions and 35 deletions

View file

@ -39,8 +39,8 @@ def decode64(chaine):
return chaine.decode('utf8','ignore')
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')
cprint(u"""Le nouveau mot de passe doit comporter au minimum 6 caractères.
Il ne doit pas être basé sur un mot du dictionnaire.""", 'jaune')
print "Il est conseillé d'utiliser une combinaison de minuscules, majuscules,\nde chiffres et d'au moins un caractère spécial."
print "Le mot de passe tapé ne sera pas écrit à l'écran."
print "Taper Ctrl-D pour abandonner"
@ -52,14 +52,14 @@ Il ne doit pas
### Test du mdp
## 1 - Longueur
if len(mdp) < 6 :
cprint('Mot de passe trop court','rouge')
cprint(u'Mot de passe trop court', 'rouge')
continue
## 2 - Empeche les mots de passe non ASCII
try:
mdp = mdp.encode('ascii')
except UnicodeDecodeError:
cprint('Les accents ou caractères bizarres ne sont pas autorisés (mais #!@*&%{}| le sont !)',
cprint(u'Les accents ou caractères bizarres ne sont pas autorisés (mais #!@*&%{}| le sont !)',
'rouge')
continue
@ -80,41 +80,41 @@ Il ne doit pas
autres += 4
if len(mdp) < 16 - minuscules - majuscules - chiffres - autres or \
(not majuscules and not minuscules) :
cprint('Mot de passe trop simple.','rouge')
cprint(u'Mot de passe trop simple.', 'rouge')
continue
## 4 - Cracklib
test = commands.getoutput("echo '%s' | /usr/sbin/crack_testlib" % mdp)
if test.split(':')[-1] != ' ok' :
commentaire = {
' it does not contain enough DIFFERENT characters' : 'Il y a trop de caractères identiques.' ,
' it is based on a dictionary word' : 'Le mot de passe est basé sur un mot du dictionnaire' ,
' it is too simplistic/systematic' : 'Le mot de passe est trop simple/répétitif'
' it does not contain enough DIFFERENT characters': u'Il y a trop de caractères identiques.' ,
' it is based on a dictionary word': u'Le mot de passe est basé sur un mot du dictionnaire' ,
' it is too simplistic/systematic': u'Le mot de passe est trop simple/répétitif'
}.get(test.split(':')[-1],test.split(':')[-1])
cprint(commentaire,'rouge')
cprint(commentaire, 'rouge')
continue
### On redemande le mot de passe
mdp1 = getpass.getpass('Retaper mot de passe : ')
if mdp != mdp1 :
cprint('Les deux mots de passe entrés sont différents, réesayer','rouge')
cprint(u'Les deux mots de passe entrés sont différents, réesayer', 'rouge')
continue
break
# Changement mdp
if os.system("/usr/bin/ldappasswd -H '%s' -x -D '%s' -w '%s' '%s' -s '%s' > /dev/null" % (uri, ldap_auth_dn, ldap_password, dn, mdp) ):
cprint('Erreur lors du changement de mot de passe','rouge')
cprint(u'Erreur lors du changement de mot de passe', 'rouge')
syslog.syslog("LDAP password changed for dn=%s" % dn)
else :
cprint('Changement effectué avec succès','vert')
cprint(u'Changement effectué avec succès', u'vert')
except KeyboardInterrupt :
cprint('\nAbandon','rouge')
cprint(u'\nAbandon', 'rouge')
pass
except EOFError :
# Un Ctrl-D
cprint('\nAbandon','rouge')
cprint(u'\nAbandon', 'rouge')
pass
if __name__ == '__main__' :
@ -134,11 +134,11 @@ if __name__ == '__main__' :
self_mode = False
for c in login[:] :
if not c.isalnum() and not c=='-' :
cprint('Login incorrect','rouge')
cprint(u'Login incorrect', 'rouge')
sys.exit(1)
if getuser() == login :
cprint('Utiliser passwd pour changer son propre mot de passe','rouge')
cprint(u'Utiliser passwd pour changer son propre mot de passe', 'rouge')
sys.exit(2)
if self_mode :
@ -146,24 +146,24 @@ if __name__ == '__main__' :
else :
s = commands.getoutput("/usr/bin/ldapsearch -D cn=readonly,dc=crans,dc=org -y/etc/ldap/readonly -x -LLL '(&(objectClass=posixAccount)(uid=%s))' dn nom prenom droits | grep -v MultiMachines" % login).strip()
if not s :
cprint('Login non trouvé dans la base LDAP','rouge')
cprint(u'Login non trouvé dans la base LDAP', 'rouge')
sys.exit(3)
# Ca a l'air bon
if s.find('\n\n') != -1 :
# Plusieurs trouvé : pas normal
cprint('Erreur lors de la recherche du login : plusieurs occurences !','rouge')
cprint(u'Erreur lors de la recherche du login : plusieurs occurences !', 'rouge')
sys.exit(4)
s = s.split('\n')
try :
dn = s[0].split()[1]
if len(s) == 2 :
cprint("Changement du mot de passe du club %s "%decode64(' '.join(s[1].split()[1:])),'vert')
cprint(u"Changement du mot de passe du club %s "%decode64(' '.join(s[1].split()[1:])), 'vert')
else :
cprint("Changement du mot de passe de %s %s " % ( s[2].split()[1], s[1].split()[1] ),'vert')
cprint(u"Changement du mot de passe de %s %s " % ( s[2].split()[1], s[1].split()[1] ), 'vert')
except :
cprint('Erreur lors de la recherche du login','rouge')
cprint(u'Erreur lors de la recherche du login', 'rouge')
sys.exit(5)
if self_mode :
@ -174,10 +174,10 @@ if __name__ == '__main__' :
try :
resultat = s.split(':')[1].strip()
except :
cprint("Erreur lors de l'authentification",'rouge')
cprint(u"Erreur lors de l'authentification", 'rouge')
sys.exit(7)
if resultat != dn :
cprint({ 'Invalid credentials (49)' : 'Mot de passe invalide' }.get(resultat,resultat),'rouge')
cprint({ 'Invalid credentials (49)': u'Mot de passe invalide' }.get(resultat, resultat), 'rouge')
sys.exit(8)
elif len(s) > 3 and os.getuid()!=0 :
@ -196,7 +196,7 @@ Tentative de changement du mot de passe de %s par %s.
conn = smtplib.SMTP('localhost')
conn.sendmail(From, To , mail )
conn.quit()
cprint('Impossible de changer le mot de passe de cet adhérent : compte privilégié','rouge')
cprint(u'Impossible de changer le mot de passe de cet adhérent : compte privilégié', 'rouge')
sys.exit(6)
# Finalement !