From d184b355d85b2710698460386900ff8989b14bbd Mon Sep 17 00:00:00 2001 From: Rottler Tamas Date: Thu, 21 Sep 2023 03:58:10 +0200 Subject: [PATCH] handle [net] first, network fix --- autorev2 | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/autorev2 b/autorev2 index fc3634b..02e983d 100755 --- a/autorev2 +++ b/autorev2 @@ -45,7 +45,7 @@ class Rev: self.revzones[zone]['info'] += info #print(f"zoneinfo {zone} - {info}") - def ptr(self, zone, addr, name, network = "", noauto = False, generate = False, comment = False): + def ptr(self, zone, addr, name, network = "", noauto = False, generate = False, wikionly = False): self._check_zone(zone) if not (ipbyte := re.match(r"(\d+)\.(\d+)\.(\d+)\.(\d+)", addr)): raise RevInvalidAddress(f"invalid address: {addr} ({name} / rev zone: {zone})") @@ -63,7 +63,7 @@ class Rev: 'network': network, 'noauto': noauto, 'generate': generate, - 'comment': comment + 'wikionly': wikionly } #print(f"{zone} {addr} {ptr}") @@ -80,7 +80,7 @@ class Rev: ptr = [] for ip in sorted(self.revzones[zone]['ptr']): rec = self.revzones[zone]['ptr'][ip] - if rec['noauto'] or rec['comment']: + if rec['noauto'] or rec['wikionly']: continue; ptr.append(f"{rec['ptr']}\t\tIN PTR\t{rec['name']}") return other + ptr @@ -93,23 +93,28 @@ class Rev: last_addr = None for ip in sorted(self.revzones[zone]['ptr']): rec = self.revzones[zone]['ptr'][ip] - if last_addr and re.sub(r"(\d+)$", lambda r : str(int(r[1])+1), last_addr) != rec['addr']: + addr, name = rec['addr'], rec['name'] + if last_addr and re.sub(r"(\d+)$", lambda r : str(int(r[1])+1), last_addr) != addr: wiki.append("| |||") - last_addr = rec['addr'] + last_addr = addr if rec['generate']: if rec['generate'] == 'first': - gen_first_name = rec['name'] - gen_first_addr = rec['addr'] + gen_first_name = name + gen_first_addr = addr continue elif rec['generate'] == 'middle': continue elif rec['generate'] == 'last': - rec['name'] = f"{gen_first_name}\\\\ ...\\\\ {rec['name']}" - rec['addr'] = f"{gen_first_addr}\\\\ ...\\\\ {rec['addr']}" + name = f"{gen_first_name}\\\\ ...\\\\ {name}" + addr = f"{gen_first_addr}\\\\ ...\\\\ {addr}" network = re.sub(r'(v\d+)', '**\\1**', rec['network']) if rec['noauto']: network = "**M** "+ network - wiki.append(f"|{rec['addr']}|{rec['name']}|{network}|") + if rec['wikionly']: + addr = f"//{addr}//" + name = f"//{name}//" + network = f"//{network}//" + wiki.append(f"|{addr}|{name}|{network}|") return wiki @@ -131,21 +136,21 @@ def read_zone(zonefile, rev): print(f"invalid autorev: {revzone}", file=sys.stderr) exit(1) rev.add_zone(revzone) - elif r:= re.match(r"\s*;.*?\[vlan\]\s*(.*)", line): - network = r[1] - network_ptrs = False - print(f"warning: legacy [vlan] in zone file {zonefile}") elif r:= re.match(r"\s*;.*?\[net(work)?\]\s*(.*)", line): prev_network = network network = r[2] if prev_network and not network_ptrs: # no ptr records in previous network - if r:= re.match(r"[0-9./]+", network): + if r:= re.match(r"[0-9./]+", prev_network): try: - rev.ptr(revzone, r[0], f"-", network=network, comment=True) + rev.ptr(revzone, r[0], f"-", network=prev_network, wikionly=True) except: pass network_ptrs = False + elif r:= re.match(r"\s*;.*?\[vlan\]\s*(.*)", line): + network = r[1] + network_ptrs = False + print(f"warning: legacy [vlan] in zone file {zonefile}") if not revzone or not origin: continue if r := re.match(r"\s*([a-z0-9.-]+)\s+IN\s+A\s+([0-9.]+)(.*)", line, flags=re.I):