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