From: Michael Tremer Date: Mon, 8 Dec 2025 15:29:26 +0000 (+0000) Subject: dnsbl: Use "dns" to write the zone file X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0dc387d0b053b2212ce3d77535959de369c09e2f;p=dbl.git dnsbl: Use "dns" to write the zone file Signed-off-by: Michael Tremer --- diff --git a/configure.ac b/configure.ac index f707deb..a570ec3 100644 --- a/configure.ac +++ b/configure.ac @@ -52,6 +52,7 @@ AC_PROG_MKDIR_P # 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]) diff --git a/src/dnsbl/lists.py b/src/dnsbl/lists.py index 744cdbc..e0bcddc 100644 --- a/src/dnsbl/lists.py +++ b/src/dnsbl/lists.py @@ -19,6 +19,9 @@ ############################################################################### import datetime +import dns.name +import dns.rdataclass +import dns.zone import functools import io import logging @@ -275,24 +278,42 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True): # 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)