#! /usr/bin/env python # -*- coding: iso-8859-15 -*- import os, md5, sys, binascii from commands import getoutput sys.path.append('/usr/scripts/gestion') from ldap_crans import crans_ldap, crans from config import ann_scol, dat def chap_ok(password, challenge, clear_pass) : """ Test l'authentification chap fournie password et chalenge doivent être données en hexa (avec ou sans le 0x devant) retourne True si l'authentification est OK retourne False sinon """ try : challenge = binascii.a2b_hex(challenge.replace('0x','')) password = binascii.a2b_hex(password.replace('0x','')) if md5.new(password[0] + clear_pass + challenge).digest() == password[1:] : return True except : pass return False 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) # Mac dans la base LDAP m=crans_ldap().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) proprio=m[0].proprietaire() if proprio.__class__ == crans : sys.stdout.write("Machine du crans") sys.exit(-1) # Paiment ok ? paid=max(proprio.paiement()+[0]) if dat[1]==9 : # En septembre les anciennes adhésion sont OK ann_scol -= 1 if ann_scol > paid : sys.stdout.write("Echec test LDAP") sys.exit(-1) # C'est bon sys.stdout.write("Acces OK") sys.exit(0)