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