]> git.ipfire.org Git - dbl.git/commitdiff
dnsbl: Use "dns" to write the zone file
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Dec 2025 15:29:26 +0000 (15:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Dec 2025 15:29:26 +0000 (15:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
configure.ac
src/dnsbl/lists.py

index f707debd3d21b18266d595f0d7744466055a1781..a570ec34968e330d98fca0e53ed0ed5528a2b3eb 100644 (file)
@@ -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])
index 744cdbc34ab19195440e7c9555dce96c28e6ba94..e0bcddc73f973146c9cec63fa7e924cb7720c404 100644 (file)
@@ -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)