From 714b9ba53a29ce23dc7f462ffa17e6734d45625e Mon Sep 17 00:00:00 2001 From: Daniel STAN Date: Sat, 30 Aug 2014 19:20:48 +0200 Subject: [PATCH] auth.py: retrouve la machine par dn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit et évite les probs si le mid n'est pas unique. --- freeradius/auth.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/freeradius/auth.py b/freeradius/auth.py index 7cef2c3c..d88146dd 100644 --- a/freeradius/auth.py +++ b/freeradius/auth.py @@ -10,6 +10,7 @@ import logging import traceback import netaddr import radiusd # Module magique freeradius (radiusd.py is dummy) +import ldap import lc_ldap.shortcuts from lc_ldap.crans_utils import escape as escape_ldap @@ -195,7 +196,9 @@ def register_mac(data, machine, conn): radiusd.radlog(radiusd.L_ERR, 'Cannot format MAC !') return - with conn.search(unicode(machine.dn.split(',',1)[0]), mode='rw')[0] as machine: + # 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) machine['macAddress'] = mac machine.history_add(u'auth.py', u'macAddress ( -> %s)' % mac) @@ -322,8 +325,10 @@ def decide_vlan(data, is_wifi, conn): """Décide du vlan non-taggué à assigner, et donne une raison à ce choix. Retourne un (port, vlan_name, reason) - où port = est une prise réseau / chambre (si filaire) + où * port = est une prise réseau / chambre (si filaire) "wifi" si wifi + * vlan_name est un nom de vlan (cf config.py) + * reason est un unicode explicant le choix """ # Switch de remplissage decision par défaut, port, hebergeurs @@ -342,7 +347,7 @@ def decide_vlan(data, is_wifi, conn): # Prend la première machine candidat dans la base, ou exit items = get_machines(data, is_wifi=is_wifi, proprio=(hebergeurs+[None])[0]) if not items: - return (port, 'accueil', 'Machine inconnue') + return (port, 'accueil', u'Machine inconnue') machine = items[0] proprio = machine.proprio() @@ -355,6 +360,9 @@ def decide_vlan(data, is_wifi, conn): decision = 'v6only', u'No IPv4' elif unicode(machine['macAddress'][0]) in test_v6: decision = 'v6only', u'Test machine v6' + # TODO: condition plus générique: + # netaddr.all_matching_cidr(machine['ipHostNumber'][0].value, + # config.NETs_primaires['personnel-ens']) elif machine['ipHostNumber'][0].value in netaddr.IPNetwork('10.2.9.0/24'): # Cas des personnels logés dans les appartements de l'ENS decision = 'appts', u'Personnel ENS' @@ -400,5 +408,5 @@ def dummy_fun(p): def detach(p=None): """Appelé lors du déchargement du module (enfin, normalement)""" - print "*** goodbye from example.py ***" + print "*** goodbye from auth.py ***" return radiusd.RLM_MODULE_OK