chiark / gitweb /
zone.lisp: Stringify the zone name at construction time.
[zone] / zone.lisp
index 735e87f5a7735e3b9a8716243a95299ffa59862b..6b84dac957619fea85e63928434e7b0049029bd1 100644 (file)
--- a/zone.lisp
+++ b/zone.lisp
@@ -439,7 +439,7 @@ (defun zone-parse-head (head)
        (ttl min-ttl)
        (serial (make-zone-serial zname)))
       (listify head)
-    (values zname
+    (values (string-downcase zname)
            (timespec-seconds ttl)
            (make-soa :admin admin
                      :source (zone-parse-host source zname)
@@ -580,12 +580,14 @@ (defmacro defrevzone (head &body zf)
                                      nconc (list k v)))
                          ,@',zf)))))))
 
+(export 'map-host-addresses)
 (defun map-host-addresses (func addr &key (family *address-family*))
   "Call FUNC for each address denoted by ADDR (a `host-parse' address)."
 
   (dolist (a (host-addrs (host-parse addr family)))
     (funcall func a)))
 
+(export 'do-host)
 (defmacro do-host ((addr spec &key (family *address-family*)) &body body)
   "Evaluate BODY, binding ADDR to each address denoted by SPEC."
   `(dolist (,addr (host-addrs (host-parse ,spec ,family)))
@@ -609,6 +611,10 @@ (defzoneparse :a (name data rec)
   ":a IPADDR"
   (zone-set-address #'rec data :make-ptr-p t :family :ipv4))
 
+(defzoneparse :aaaa (name data rec)
+  ":aaaa IPADDR"
+  (zone-set-address #'rec data :make-ptr-p t :family :ipv6))
+
 (defzoneparse :addr (name data rec)
   ":addr IPADDR"
   (zone-set-address #'rec data :make-ptr-p t))
@@ -815,7 +821,7 @@ (defzoneparse (:rev :reverse) (name data rec)
                       :ttl (zr-ttl zr) :data (zr-name zr))
                  (setf (gethash name seen) t))))))))))
 
-(defzoneparse (:multi) (name data rec :zname zname :ttl ttl)
+(defzoneparse :multi (name data rec :zname zname :ttl ttl)
   ":multi (((NET*) &key :start :end :family :suffix) . REC)
 
    Output multiple records covering a portion of the reverse-resolution
@@ -949,7 +955,8 @@ (defmethod zone-write ((format (eql :bind)) zone stream)
                    (setf (char copy at) #\.))
                  copy)))
       (format stream "~
-~A~30TIN SOA~40T~A ~A (
+~A~30TIN SOA~40T~A (
+~55@A~60T ;administrator
 ~45T~10D~60T ;serial
 ~45T~10D~60T ;refresh
 ~45T~10D~60T ;retry
@@ -983,6 +990,7 @@ (defgeneric bind-record-type (type)
 (export 'bind-record-format-args)
 (defgeneric bind-record-format-args (type data)
   (:method ((type (eql :a)) data) (list "~A" (ipaddr-string data)))
+  (:method ((type (eql :aaaa)) data) (list "~A" (ipaddr-string data)))
   (:method ((type (eql :ptr)) data) (list "~A" (bind-hostname data)))
   (:method ((type (eql :cname)) data) (list "~A" (bind-hostname data)))
   (:method ((type (eql :ns)) data) (list "~A" (bind-hostname data)))