]> git.ipfire.org Git - location/libloc.git/commitdiff
export: Write a SOA for all DNS zones
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 17 Dec 2025 12:05:33 +0000 (12:05 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 17 Dec 2025 12:06:44 +0000 (12:06 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/python/location/export.py
src/scripts/location.in

index ce97fdc2abd9d1991cc0e8c4c6578796b56f3468..5b1845f69c153977d3bcd0a61e3d1592e4f6d418 100644 (file)
@@ -302,11 +302,13 @@ class Exporter(object):
 
 
 class ZoneExporter(object):
-       def __init__(self, db, format, origin, ttl=None):
+       def __init__(self, db, format, origin, ttl=None, master=None, zonemaster=None):
                self.db = db
                self.format = format
                self.origin = origin
-               self.ttl = ttl
+               self.ttl = ttl or 86400
+               self.master = master or "invalid."
+               self.zonemaster = zonemaster or "zonemaster.invalid."
 
                try:
                        self.write = self.formats[format]
@@ -329,9 +331,13 @@ class ZoneExporter(object):
                f.write("Updated At: %s\n" % created_at.isoformat())
                f.write(";##############################################################################\n")
 
-               f.write("$ORIGIN %s" % self.origin)
+               f.write("$ORIGIN %s\n" % self.origin)
                if self.ttl:
-                       f.write("$TTL %s" % self.ttl)
+                       f.write("$TTL %s\n" % self.ttl)
+
+               # Write the SOA
+               f.write("@ IN SOA %s %s %s 3600 600 3600000 %s\n" % \
+                       (self.master, self.zonemaster, self.db.created_at, self.ttl))
 
                # Write all records
                self.write(self, f)
index 535fe5f0b797ad741181121e3a67a1059402a311..16881bc4e54cf68815c28aae74fca541f259dc87 100644 (file)
@@ -200,6 +200,8 @@ class CLI(object):
                export_zone.add_argument("--origin", required=True,
                        help=_("The origin of the DNS zone"))
                export_zone.add_argument("--ttl", help=_("The TTL of the DNS zone"))
+               export_zone.add_argument("--master", help=_("The zone master"))
+               export_zone.add_argument("--zonemaster", help=_("The email address of the zone's administrator"))
                export_zone.set_defaults(func=self.handle_export_zone)
 
                args = parser.parse_args()
@@ -622,7 +624,13 @@ class CLI(object):
                """
                        Exports the database in DNS zone format
                """
-               e = location.export.ZoneExporter(db, format=ns.type, origin=ns.origin, ttl=ns.ttl)
+               e = location.export.ZoneExporter(db,
+                       format     = ns.type,
+                       origin     = ns.origin,
+                       ttl        = ns.ttl,
+                       master     = ns.master,
+                       zonemaster = ns.zonemaster,
+               )
                e.export(ns.output)