From 275934c23c944a2fe711a29bed71b4020833929b Mon Sep 17 00:00:00 2001 From: Daniel STAN Date: Wed, 10 Dec 2014 22:24:59 +0100 Subject: [PATCH] freeradius/auth.py: enregistrement IP 1er conn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lorsque la mac est en , si l'IP est également absente, assigne une nouvelle IP. --- freeradius/auth.py | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/freeradius/auth.py b/freeradius/auth.py index 9da34e5e..9a4861b9 100644 --- a/freeradius/auth.py +++ b/freeradius/auth.py @@ -179,9 +179,31 @@ def get_prise_chbre(data): return prise, chbre 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 def register_mac(data, machine, conn): """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) if mac is None: 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 !') 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: - radiusd.radlog(radiusd.L_INFO, 'Registering mac %s' % mac) + logger.info('Registering mac %s' % mac) machine['macAddress'] = mac - machine.history_add(u'auth.py', u'macAddress ( -> %s)' % mac) + if not machine.get('rid', None): + logger.info('Registering rid') + machine['rid'] = get_fresh_rid(machine) + machine['ipHostNumber'] = u'' machine.validate_changes() + machine.history_gen() machine.save() - radiusd.radlog(radiusd.L_INFO, 'Mac set') - radiusd.radlog(radiusd.L_INFO, 'Triggering komaz') - trigger_generate('odlyd') - radiusd.radlog(radiusd.L_INFO, 'done ! (triggered komaz)') + # This part is pure kludge + logger.info('...Success. Now triggering firewall') + trigger_generate('odlyd') + logger.info('done ! (triggered firewall)') @radius_event @use_ldap_admin