chiark / gitweb /
zone: Write output to DOMAIN.zone, rather than just DOMAIN.
[zone] / zone.lisp
index 90867ea221d3f02123779b1f9c9b59c8cec57ea5..e83aa754b85a75c649d740a4743a5372612f33dc 100644 (file)
--- a/zone.lisp
+++ b/zone.lisp
@@ -40,6 +40,7 @@ (defpackage #:zone
             #:*default-mx-priority* #:*default-zone-admin*
             #:zone-find #:zone-parse #:zone-write #:zone-create #:defzone
             #:defrevzone #:zone-save
+          #:defzoneparse #:zone-parse-host
           #:timespec-seconds #:make-zone-serial))
 (in-package #:zone)
 
@@ -810,6 +811,19 @@ (defzoneparse :alias (name data rec :zname zname)
     (rec :name (zone-parse-host a zname)
         :type :cname
         :data name)))
+(defzoneparse :net (name data rec)
+  ":net (NETWORK*)"
+  (dolist (net (listify data))
+    (let ((n (net-get-as-ipnet net)))
+      (rec :name (zone-parse-host "net" name)
+          :type :a
+          :data (ipnet-net n))
+      (rec :name (zone-parse-host "mask" name)
+          :type :a
+          :data (ipnet-mask n))
+      (rec :name (zone-parse-host "broadcast" name)
+          :type :a
+          :data (ipnet-broadcast n)))))
   
 (defzoneparse (:rev :reverse) (name data rec)
   ":reverse ((NET :bytes BYTES) ZONE*)"
@@ -1003,8 +1017,9 @@ (defun zone-save (zones)
        (unless zz
          (error "Unknown zone `~A'." z))
        (let ((stream (safely-open-output-stream safe
-                                                (string-downcase
-                                                 (stringify z)))))
+                                                (format nil
+                                                        "~(~A~).zone"
+                                                        z))))
          (zone-write zz stream))))))
 
 ;;;----- That's all, folks --------------------------------------------------