From 65391c5d2d115b52c068c778bddc4d50422f8d39 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Tue, 19 Sep 2017 18:14:21 +0100 Subject: [PATCH] zone.lisp: Add support for CAA records (RFC 6844). --- zone.lisp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/zone.lisp b/zone.lisp index a1e74b7..2267026 100644 --- a/zone.lisp +++ b/zone.lisp @@ -1273,6 +1273,29 @@ (rec-name host)) 33) +(defenum caa-flag () (:critical 128)) + +(defzoneparse :caa (name data rec) + ":caa ((TAG VALUE FLAG*)*)" + (dolist (prop data) + (destructuring-bind (tag value &rest flags) prop + (setf flags (reduce #'logior + (mapcar (lambda (item) + (lookup-enum 'caa-flag item + :min 0 :max 255)) + flags))) + (ecase tag + ((:issue :issuewild :iodef) + (rec :name name + :data (list flags tag value))))))) + +(defmethod zone-record-rrdata ((type (eql :caa)) zr) + (destructuring-bind (flags tag value) (zr-data zr) + (rec-u8 flags) + (rec-string (string-downcase tag)) + (rec-raw-string value)) + 257) + (defzoneparse :net (name data rec) ":net (NETWORK*)" (dolist (net (listify data)) @@ -1616,6 +1639,10 @@ $TTL ~2@*~D~2%" (bind-format-record zr "~2D ~2D ~2D " usage selector match) (bind-write-hex data 12))) +(defmethod zone-write-record ((format (eql :bind)) (type (eql :caa)) zr) + (destructuring-bind (flags tag value) (zr-data zr) + (bind-format-record zr "~3D ~(~A~) ~S~%" flags tag value))) + (defmethod zone-write-record ((format (eql :bind)) (type (eql :ds)) zr) (destructuring-bind (tag alg hashtype hash) (zr-data zr) (bind-format-record zr "~5D ~2D ~2D " tag alg hashtype) -- 2.11.0