[crans_utils, lc_ldap] Méthode pour récupérer les machines ldap correspondant à la machine physique locale

This commit is contained in:
Valentin Samir 2014-03-18 22:45:42 +01:00
parent d6d9f84076
commit 067459eb44
3 changed files with 25 additions and 4 deletions

View file

@ -45,6 +45,7 @@ sys.path.append('/usr/scripts/gestion')
import config import config
from unicodedata import normalize from unicodedata import normalize
import subprocess import subprocess
from netifaces import interfaces, ifaddresses, AF_INET
DEVNULL = open(os.devnull, 'w') DEVNULL = open(os.devnull, 'w')
@ -292,3 +293,14 @@ def fetch_cert_info(x509):
for ext in x509.get_extensions(): for ext in x509.get_extensions():
do_ext(data, ext) do_ext(data, ext)
return data return data
def ip4_addresses():
"""Renvois la liste des ipv4 de la machine physique courante"""
ip_list = []
for interface in interfaces():
if interface!='lo' and AF_INET in ifaddresses(interface).keys():
for link in ifaddresses(interface)[AF_INET]:
ip_list.append(link['addr'])
return ip_list

View file

@ -553,3 +553,13 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
return [attributs.soi] return [attributs.soi]
else: else:
return [] return []
def get_local_machines(self, mode='ro'):
filter=""
for ip in set(crans_utils.ip4_addresses()):
filter+=u'(ipHostNumber=%s)' % ip
filter = u"(|%s)" % filter
return self.search(filter, mode=mode)

View file

@ -34,7 +34,6 @@ current_user = os.getenv("SUDO_USER") or os.getenv("USER") or os.getenv("LOGNAME
if isinstance(current_user, str): if isinstance(current_user, str):
current_user = current_user.decode("utf-8") current_user = current_user.decode("utf-8")
def lc_ldap(*args, **kwargs): def lc_ldap(*args, **kwargs):
"""Renvoie une connexion à la base LDAP.""" """Renvoie une connexion à la base LDAP."""
return module_qui_a_le_meme_nom_que_sa_classe_principale.lc_ldap(*args, **kwargs) return module_qui_a_le_meme_nom_que_sa_classe_principale.lc_ldap(*args, **kwargs)
@ -60,7 +59,7 @@ def lc_ldap_test(*args, **kwargs):
def lc_ldap_admin(*args, **kwargs): def lc_ldap_admin(*args, **kwargs):
"""Renvoie une connexion LDAP à la vraie base, en admin. """Renvoie une connexion LDAP à la vraie base, en admin.
Possible seulement si on peut lire secrets.py Possible seulement si on peut lire secrets.py
""" """
kwargs["uri"] = 'ldap://ldap.adm.crans.org/' kwargs["uri"] = 'ldap://ldap.adm.crans.org/'
kwargs["dn"] = secrets.get('ldap_auth_dn') kwargs["dn"] = secrets.get('ldap_auth_dn')
@ -71,7 +70,7 @@ def lc_ldap_admin(*args, **kwargs):
def lc_ldap_readonly(*args, **kwargs): def lc_ldap_readonly(*args, **kwargs):
"""Connexion LDAP à la vraie base, en readonly. """Connexion LDAP à la vraie base, en readonly.
Possible seulement si on peut lire secrets.py Possible seulement si on peut lire secrets.py
""" """
kwargs["uri"] = 'ldap://ldap.adm.crans.org/' kwargs["uri"] = 'ldap://ldap.adm.crans.org/'
kwargs["dn"] = secrets.get('ldap_readonly_auth_dn') kwargs["dn"] = secrets.get('ldap_readonly_auth_dn')
@ -90,7 +89,7 @@ def lc_ldap_local(*args, **kwargs):
si vous souhaitez faire beaucoup de recherches si vous souhaitez faire beaucoup de recherches
indépendantes (c'est le temps d'accès à la socket indépendantes (c'est le temps d'accès à la socket
qui est problématique). qui est problématique).
""" """
if os.path.exists('/var/run/slapd/ldapi'): if os.path.exists('/var/run/slapd/ldapi'):
ro_uri = 'ldapi://%2fvar%2frun%2fslapd%2fldapi/' ro_uri = 'ldapi://%2fvar%2frun%2fslapd%2fldapi/'