]> git.ipfire.org Git - dnsbl.git/commitdiff
exporter: Build an exporter for a regular DNS BL zone
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 10 Dec 2025 10:52:15 +0000 (10:52 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 10 Dec 2025 10:52:15 +0000 (10:52 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/dnsbl/exporters.py
src/dnsbl/lists.py
src/scripts/dnsbl.in

index ca24ba1e1ac8276d7464f3d7a7ebd75513afe6e9..a52d7493d6443d5dbf7695b3988c6bcf25827d6a 100644 (file)
@@ -107,10 +107,7 @@ class HostsExporter(Exporter):
                        f.write("0.0.0.0 %s\n" % domain)
 
 
-class RPZExporter(Exporter):
-       """
-               Exports the list as a RPZ zone file
-       """
+class ZoneExporter(Exporter):
        def export(self, f, ttl=60, rpz_action="."):
                # Write the header
                self.write_header(f, ";")
@@ -148,7 +145,7 @@ class RPZExporter(Exporter):
                        zone.replace_rdataset(
                                dns.name.from_text("%s.%s" % (domain, self.list.zone), origin=origin),
                                dns.rdataset.from_text(
-                                       dns.rdataclass.IN, dns.rdatatype.CNAME, ttl, rpz_action,
+                                       dns.rdataclass.IN, self.type, ttl, self.content,
                                ),
                        )
 
@@ -181,3 +178,19 @@ class RPZExporter(Exporter):
 
                # Add the ZONEMD record
                zone.replace_rdataset(zone.origin, rrset)
+
+
+class BlocklistExporter(ZoneExporter):
+       """
+               Exports the list as a regular DNSBL zone file
+       """
+       type = dns.rdatatype.A
+       content = "127.0.0.2"
+
+
+class RPZExporter(ZoneExporter):
+       """
+               Exports the list as a RPZ zone file
+       """
+       type = dns.rdatatype.CNAME
+       content = "."
index 104be828b2ed6131ce7dbc1878f70a60d2d865b9..e3ee23e6c3253e71de478cdaa36fd1a3fc3b6d3b 100644 (file)
@@ -255,6 +255,7 @@ class List(sqlmodel.SQLModel, database.BackendMixin, table=True):
 
                formats = {
                        "domains" : exporters.DomainsExporter,
+                       "dnsbl"   : exporters.BlocklistExporter,
                        "hosts"   : exporters.HostsExporter,
                        "rpz"     : exporters.RPZExporter,
                }
index b3e91884a4840f9d9c04fc511b7ae53008240b45..e810d762a97239012d00418f11ed0d3dfa0f905e 100644 (file)
@@ -101,7 +101,7 @@ class CLI(object):
                export.add_argument("output", type=argparse.FileType("w"),
                                help=_("The output file"))
                export.add_argument("--format", default="domains",
-                               choices=("domains", "hosts", "rpz",), help=_("Output Format"))
+                               choices=("domains", "dnsbl", "hosts", "rpz",), help=_("Output Format"))
                export.set_defaults(func=self.__export)
 
                # export-all
@@ -290,6 +290,7 @@ class CLI(object):
                """
                formats = {
                        "domains" : "domains.txt",
+                       "dnsbl"   : "dnsbl.zone",
                        "hosts"   : "hosts.txt",
                        "rpz"     : "rpz.zone",
                }