Modification pour filtrer les adhrents n'ayant pas rgl leur cotisation.
darcs-hash:20051002020013-41617-dcc5f18d714cb9cdd001d967b76933e0a2e53c78.gz
This commit is contained in:
parent
2d4384b00f
commit
5e5a04b38e
1 changed files with 60 additions and 0 deletions
60
radius_auth.py
Executable file
60
radius_auth.py
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
#! /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)
|
Loading…
Add table
Add a link
Reference in a new issue