X-Git-Url: https://git.distorted.org.uk/~mdw/zone/blobdiff_plain/32ebbe9b0fcc1a698c6ffec760259c5f7e953a9d..4ea82aba4c47b65d346a71a8d32564ca842ad5ba:/zone.lisp diff --git a/zone.lisp b/zone.lisp index 735e87f..633e0d4 100644 --- a/zone.lisp +++ b/zone.lisp @@ -439,7 +439,7 @@ (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 @@ 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 @@ ":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)) @@ -626,8 +632,8 @@ (rec :data (zone-parse-host data zname))) (defzoneparse :txt (name data rec) - ":txt TEXT" - (rec :data data)) + ":txt (TEXT*)" + (rec :data (listify data))) (export '*dkim-pathname-defaults*) (defvar *dkim-pathname-defaults* @@ -815,7 +821,7 @@ :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 @@ $TTL ~2@*~D~2%" (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 @@ $TTL ~2@*~D~2%" (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))) @@ -995,7 +1003,7 @@ $TTL ~2@*~D~2%" (cons "~2D ~2D ~A" data)) (:method ((type (eql :txt)) data) (cons "~#[\"\"~;~S~:;(~@{~%~8T~S~} )~]" - (mapcar #'stringify (listify data))))) + (mapcar #'stringify data)))) (defmethod bind-record (type zr) (destructuring-bind (format &rest args)