diff --git a/radius_auth.py b/radius_auth.py index 85a3a5b9..fdaeacf0 100755 --- a/radius_auth.py +++ b/radius_auth.py @@ -29,22 +29,24 @@ def chap_ok(password, challenge, clear_pass) : if __name__ == '__main__' : # Test chap (comme cela on est sur que c'est bien un switch qui demande) mac=os.getenv('USER_NAME','').replace('"','') - + if not chap_ok(os.getenv('CHAP_PASSWORD'), os.getenv('CHAP_CHALLENGE'), mac) : - sys.stdout.write("Echec test CHAP") - sys.exit(-1) + sys.stdout.write("Echec test CHAP") + sys.exit(-1) # Mac dans la base LDAP - m=crans_ldap().search('mac=%s'%mac)['machine'] + m=crans_ldap(readonly=True).search('mac=%s'%mac)['machine'] if len(m)!=1 : sys.stdout.write("Pb recherche mac (nb résultat !=1)") sys.exit(-1) - # N'appartient pas au Crans (évite les spoof) + # N'appartient pas au Crans et n'a pas de prise attribuée + # donc sur uplink ou switch non filtré + # But : éviter le spoof d'une mac d'une machine clef proprio=m[0].proprietaire() -# if proprio.__class__ == crans : -# sys.stdout.write("Machine du crans") -# sys.exit(-1) + if proprio.__class__ == crans and m.prise == 'N/A' : + sys.stdout.write("Machine du crans") + sys.exit(-1) # Paiment ok ? paid=max(proprio.paiement()+[0])