diff --git a/gestion/gen_confs/filtrage.py b/gestion/gen_confs/filtrage.py new file mode 100644 index 00000000..a92a3240 --- /dev/null +++ b/gestion/gen_confs/filtrage.py @@ -0,0 +1,92 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Classe de synchronisation entre la base ldap et +la base postgresql pour la liste des exemptions +et la liste des machines. +Utilisé par generate.py +""" + +# importation des fonctions et classes + +import sys +if '/usr/scripts' not in sys.path: + sys.path.insert(0, '/usr/scripts/') +import lc_ldap.shortcuts +import lc_ldap.objets +from gestion.gen_confs import gen_config +import psycopg2 + +ldap_conn = lc_ldap.shortcuts.lc_ldap.readonly() + +# Génération des la tables d'exemptions +####################################### + +class exemptions(gen_config): + + base = [('138.231.136.0/24', '0.0.0.0/0'), ('138.231.136.0/21', '138.231.0.0/16'), ('138.231.144.0/21', '138.231.0.0/16')] + restart_cmd = "" + + def __str__(self): + return "surveillance_exemptions" + + def _gen(self): + machines = ldap_conn.search(u'(exempt=*)') + pgsql = psycopg2.connect(database='filtrage', user='crans') + curseur = pgsql.cursor() + + # Purge. + requete = "DELETE FROM exemptes" + curseur.execute(requete) + + for source, destination in self.base: + requete = "INSERT INTO exemptes (ip_crans, ip_dest) VALUES ('%s','%s')" % (source, destination) + curseur.execute(requete) + + for machine in machines: + for destination in machine["exempt"]: + if destination.value.version == 4: + source = str(machine["ipHostNumber"][0]) + requete = "INSERT INTO exemptes (ip_crans, ip_dest) VALUES ('%s','%s')" % (source, destination) + else: + source = str(machine["macAddress"][0]) + requete = "INSERT INTO exemptes6 (mac_crans, ip_dest) VALUES ('%s','%s')" % (source, destination) + # Si ip vide, passons au suivant + if not source: + continue + curseur.execute(requete) + + pgsql.commit() + +# Génération des la liste des machines +###################################### + +class machines(gen_config): + restart_cmd = "" + def __str__(self): + return "surveillance_liste_machines" + + def _gen(self): + machines = ldap_conn.search(u"(ipHostNumber=*)")['machine'] + + # liste des machines (on prend que les paimement ok) + # machines = self.machines + # machines = db.search('ip=*')['machine'] + + # connexion à la base postgresql + pgsql = psycopg2.connect(database='filtrage', user='crans') + curseur = pgsql.cursor() + curseur.execute("DELETE FROM machines;") + + # ajout des entrée + for m in machines: + if m.proprio().__class__ == lc_ldap.objets.club: + curseur.execute("INSERT INTO machines (mac_addr, type, id) VALUES ('%s','club',%s);" % (m['macAddress'][0], m.proprio()['cid'][0].value)) + elif m.proprio().__class__ == lc_ldap.objets.adherent: + curseur.execute("INSERT INTO machines (mac_addr, type, id) VALUES ('%s','adherent',%s);" % (m['macAddress'], m.proprio()['cid'][0].value)) + elif m.proprio().__class__ == lc_ldap.objets.AssociationCrans: + curseur.execute("INSERT INTO machines (mac_addr, type, id) VALUES ('%s','crans',%s);" % (m['macAddress'], m['mid'][0].value)) + # on commit + pgsql.commit() + diff --git a/gestion/gen_confs/generate.py b/gestion/gen_confs/generate.py index 74f3783d..cc0d8cc2 100755 --- a/gestion/gen_confs/generate.py +++ b/gestion/gen_confs/generate.py @@ -212,6 +212,15 @@ class thot(base_reconfigure): from gen_confs.surveillance import machines self._do(machines(), self._machines()) +class odlyd(base_reconfigure): + def filtrage_exemptions(self): + from gen_confs.filtrage import exemptions + self._do(exemptions()) + + def filtrage_machines(self): + from gen_confs.filtrage import machines + self._do(machines(), self._machines()) + class zamok(base_reconfigure): def del_user(self, args): # Suppression des fichies d'impression