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 traceback
|
||||||
import netaddr
|
import netaddr
|
||||||
import radiusd # Module magique freeradius (radiusd.py is dummy)
|
import radiusd # Module magique freeradius (radiusd.py is dummy)
|
||||||
|
import ldap
|
||||||
|
|
||||||
import lc_ldap.shortcuts
|
import lc_ldap.shortcuts
|
||||||
from lc_ldap.crans_utils import escape as escape_ldap
|
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 !')
|
radiusd.radlog(radiusd.L_ERR, 'Cannot format MAC !')
|
||||||
return
|
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)
|
radiusd.radlog(radiusd.L_INFO, 'Registering mac %s' % mac)
|
||||||
machine['macAddress'] = mac
|
machine['macAddress'] = mac
|
||||||
machine.history_add(u'auth.py', u'macAddress (<automatique> -> %s)' % 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
|
"""Décide du vlan non-taggué à assigner, et donne une raison
|
||||||
à ce choix.
|
à ce choix.
|
||||||
Retourne un (port, vlan_name, reason)
|
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
|
"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
|
# 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
|
# Prend la première machine candidat dans la base, ou exit
|
||||||
items = get_machines(data, is_wifi=is_wifi, proprio=(hebergeurs+[None])[0])
|
items = get_machines(data, is_wifi=is_wifi, proprio=(hebergeurs+[None])[0])
|
||||||
if not items:
|
if not items:
|
||||||
return (port, 'accueil', 'Machine inconnue')
|
return (port, 'accueil', u'Machine inconnue')
|
||||||
machine = items[0]
|
machine = items[0]
|
||||||
|
|
||||||
proprio = machine.proprio()
|
proprio = machine.proprio()
|
||||||
|
@ -355,6 +360,9 @@ def decide_vlan(data, is_wifi, conn):
|
||||||
decision = 'v6only', u'No IPv4'
|
decision = 'v6only', u'No IPv4'
|
||||||
elif unicode(machine['macAddress'][0]) in test_v6:
|
elif unicode(machine['macAddress'][0]) in test_v6:
|
||||||
decision = 'v6only', u'Test machine 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'):
|
elif machine['ipHostNumber'][0].value in netaddr.IPNetwork('10.2.9.0/24'):
|
||||||
# Cas des personnels logés dans les appartements de l'ENS
|
# Cas des personnels logés dans les appartements de l'ENS
|
||||||
decision = 'appts', u'Personnel ENS'
|
decision = 'appts', u'Personnel ENS'
|
||||||
|
@ -400,5 +408,5 @@ def dummy_fun(p):
|
||||||
|
|
||||||
def detach(p=None):
|
def detach(p=None):
|
||||||
"""Appelé lors du déchargement du module (enfin, normalement)"""
|
"""Appelé lors du déchargement du module (enfin, normalement)"""
|
||||||
print "*** goodbye from example.py ***"
|
print "*** goodbye from auth.py ***"
|
||||||
return radiusd.RLM_MODULE_OK
|
return radiusd.RLM_MODULE_OK
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue