Commit 714b9ba5 authored by Daniel STAN's avatar Daniel STAN

auth.py: retrouve la machine par dn

et évite les probs si le mid n'est pas unique.
parent b3c9cc12
......@@ -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 (<automatique> -> %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)
* 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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment