From ea344c894026ec063901527b32ac57ba34b69963 Mon Sep 17 00:00:00 2001 From: hygienic-books Date: Tue, 5 Jul 2022 04:46:53 +0200 Subject: [PATCH] feat(xml): Add and detect XML rule elements --- update-firewall-source.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/update-firewall-source.py b/update-firewall-source.py index 8f30ed3..2e0174c 100644 --- a/update-firewall-source.py +++ b/update-firewall-source.py @@ -233,10 +233,37 @@ def validate_config_sections( config_obj.remove_option(this_section, key) -def gen_fw_rule_xml(ip_addresses: dict[str, list]) -> lxml.builder.ElementMaker: - len_ipv4_addresses = len(ip_addresses["ipv4"]) - len_ipv6_addresses = len(ip_addresses["ipv6"]) - data = lxml.builder.ElementMaker() +def has_child_elem(elem_name: str, attr_value: str) -> bool: + global arg_fw_rule_data + attr_name = "ipv" + + for elem in arg_fw_rule_data.findall(elem_name): + if elem.attrib[attr_name] == attr_value: + log.debug(f"""XML has element '<{elem_name} {attr_name}="{attr_value}" .../>'""") + return True + log.debug(f"""No XML element '<{elem_name} {attr_name}="{attr_value}" .../>'""") + return False + + +def add_chain_elem(elem_name: str, addr_family: str) -> bool: + global arg_fw_rule_data + + log.debug(f"Adding new ...") + for chain in ["FILTERS", "DOCKER-USER"]: + try: + lxml.etree.SubElement(arg_fw_rule_data, elem_name, + ipv=f"{addr_family}", + table="filter", + chain=chain) + except lxml.etree.LxmlError as le: + log.error(f"""Failed to add XML '<{elem_name} ipv=f"{addr_family}" .../>'\n""" + f"Verbatim exception was:\n" + f"f{le}\n" + f"Exiting 8 ...") + sys.exit(8) + + return True + direct_tag = data.direct chain_tag = data.chain