handle [net] first, network fix
This commit is contained in:
parent
260ff97c0a
commit
d184b355d8
37
autorev2
37
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):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user