#!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- # # Service in charge of firewall for trigger. # Contains multiple subservices for each special # part of firewall. # # Author : Pierre-Elliott Bécue # Licence : GPLv3 # Date : 15/06/2014 import lc_ldap.shortcuts from gestion.trigger.host import record import cranslib.clogger as clogger import gestion.config.firewall as firewall_config import gestion.trigger.firewall4.firewall4 as firewall4 import os import sys logger = clogger.CLogger("trigger.firewall", "debug") class FwFunFactory(object): """Factory containing which function is part of the trigger set """ _meths = {} @classmethod def register(cls, key, value): cls._meths[key] = value @classmethod def get(cls, key): return cls._meths.get(key, None) def fwrecord(function): FwFunFactory.register(function.func_name, function) def fwcall(fwfun): return FwFunFactory.get(fwfun) @record def firewall(body=()): if len(body) != 2: logger.warning("Received body %r, this format is incorrect, discarding.", body) (service, data) = body logger.info("Calling service %s for data %r", service, data) fwcall(service)(data) @fwrecord def mac_ip(body): host_fw = firewall4.firewall() if body and isinstance(body, dict): for (mac, ip) in body.get("add", ()): logger.info("Adding mac_ip %s,%s", mac, ip) host_fw.mac_ip_append(mac, ip) for (mac, ip) in body.get("delete", ()): logger.info("Removing mac_ip %s,%s", mac, ip) host_fw.mac_ip_remove(mac, ip) for (rmac, rip, mac, ip) in body.get("update", ()): logger.info("Updating mac_ip %s,%s with %s,%s", rmac, rip, mac, ip) host_fw.mac_ip_remove(rmac, rip) host_fw.mac_ip_append(mac, ip)