auth.py: retrouve la machine par dn
et évite les probs si le mid n'est pas unique.
This commit is contained in:
parent
b3c9cc1241
commit
714b9ba53a
1 changed files with 12 additions and 4 deletions
|
@ -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)
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue