freeradius/auth.py: enregistrement IP 1er conn

Lorsque la mac est en <automatique>, si l'IP est également absente, assigne
une nouvelle IP.
This commit is contained in:
Daniel STAN 2014-12-10 22:24:59 +01:00
parent 0706c41119
commit 275934c23c

View file

@ -179,9 +179,31 @@ def get_prise_chbre(data):
return prise, chbre return prise, chbre
return None return None
def realm_of_machine(machine):
"""Renvoie le `realm` d'une machine. Don't ask"""
if isinstance(machine, lc_ldap.objets.machineFixe):
return 'fil'
elif isinstance(machine, lc_ldap.objets.machineWifi):
return 'wifi-adh'
else:
raise NotImplementedError('Only fil and wifi realm supported')
def get_fresh_rid(machine):
"""Génère un rid tout frais pour la machine. Fonction kludge"""
lockId = machine.conn.lockholder.newid()
realm = realm_of_machine(machine)
try:
return machine.conn._find_id('rid', realm, lockId)
finally:
machine.conn.lockholder.purge(lockId)
@use_ldap_admin @use_ldap_admin
def register_mac(data, machine, conn): def register_mac(data, machine, conn):
"""Enregistre la mac actuelle sur une machine donnée.""" """Enregistre la mac actuelle sur une machine donnée."""
# TODO lc_ldap devrait posséder une fonction pour passer en rw depuis un ro
if 'w' not in machine.mode:
machine = conn.search(dn=machine.dn, scope=ldap.SCOPE_BASE, mode='rw')[0]
mac = data.get('Calling-Station-Id', None) mac = data.get('Calling-Station-Id', None)
if mac is None: if mac is None:
radiusd.radlog(radiusd.L_ERR, 'Cannot find MAC') radiusd.radlog(radiusd.L_ERR, 'Cannot find MAC')
@ -193,18 +215,20 @@ def register_mac(data, machine, conn):
radiusd.radlog(radiusd.L_ERR, 'Cannot format MAC !') radiusd.radlog(radiusd.L_ERR, 'Cannot format MAC !')
return return
# TODO lc_ldap devrait posséder une fonction pour passer en rw depuis un ro
machine = conn.search(dn=machine.dn, scope=ldap.SCOPE_BASE, mode='rw')[0]
with machine: with machine:
radiusd.radlog(radiusd.L_INFO, 'Registering mac %s' % mac) logger.info('Registering mac %s' % mac)
machine['macAddress'] = mac machine['macAddress'] = mac
machine.history_add(u'auth.py', u'macAddress (<automatique> -> %s)' % mac) if not machine.get('rid', None):
logger.info('Registering rid')
machine['rid'] = get_fresh_rid(machine)
machine['ipHostNumber'] = u'<automatique>'
machine.validate_changes() machine.validate_changes()
machine.history_gen()
machine.save() machine.save()
radiusd.radlog(radiusd.L_INFO, 'Mac set') # This part is pure kludge
radiusd.radlog(radiusd.L_INFO, 'Triggering komaz') logger.info('...Success. Now triggering firewall')
trigger_generate('odlyd') trigger_generate('odlyd')
radiusd.radlog(radiusd.L_INFO, 'done ! (triggered komaz)') logger.info('done ! (triggered firewall)')
@radius_event @radius_event
@use_ldap_admin @use_ldap_admin