# Python
AM_PATH_PYTHON([3.13])
+AX_PYTHON_MODULE([dns], [fatal])
AX_PYTHON_MODULE([httpx], [fatal])
AX_PYTHON_MODULE([rich], [fatal])
AX_PYTHON_MODULE([sqlmodel], [fatal])
###############################################################################
import datetime
+import dns.name
+import dns.rdataclass
+import dns.zone
import functools
import io
import logging
# Write the header
self._write_header(f, ";")
- # Write the SOA
- f.write("%s\n" % " ".join((
- self.zone,
- "%s" % ttl,
- "IN",
- "SOA",
- "master.lwldns.net.",
- "hostmaster.ipfire.org.",
- self.updated_at.strftime("%s"),
- "3600",
- "600",
- "3600000",
- "%s" % ttl,
- )))
+ # Create the origin
+ origin = dns.name.from_text(self.zone)
+
+ # Create a new zone
+ zone = dns.zone.Zone(origin)
+
+ # Create the SOA
+ soa = dns.rdataset.from_text(
+ dns.rdataclass.IN,
+ dns.rdatatype.SOA,
+ ttl,
+ " ".join((
+ "master.lwldns.net.",
+ "hostmaster.ipfire.org.",
+ self.updated_at.strftime("%s"),
+ "3600",
+ "600",
+ "3600000",
+ "%s" % ttl,
+ )),
+ )
+ zone.replace_rdataset(origin, soa)
+
+ # XXX Add NS
# Write all domains
for domain in self.domains:
- f.write("%s.%s %s IN CNAME %s\n" % (domain, self.zone, ttl, rpz_action))
+ zone.replace_rdataset(
+ dns.name.from_text("%s.%s" % (domain, self.zone)),
+ dns.rdataset.from_text(
+ dns.rdataclass.IN, dns.rdatatype.CNAME, ttl, rpz_action,
+ ),
+ )
+
+ # Write the zone to file
+ zone.to_file(f)
else:
raise ValueError("Unknown output format: %s" % format)