(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)
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)))
":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))
(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*
: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
(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
(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)))
(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)