From: Mark Wooding Date: Fri, 3 May 2024 00:23:16 +0000 (+0100) Subject: zone.lisp (:dkim): Use new splitting machinery. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/zone/commitdiff_plain/5969df58acec66f58f74bfa68ef294c1dc8ba79c zone.lisp (:dkim): Use new splitting machinery. --- diff --git a/zone.lisp b/zone.lisp index 5589361..5e41a5d 100644 --- a/zone.lisp +++ b/zone.lisp @@ -912,47 +912,26 @@ (pushnew '*dkim-pathname-defaults* *zone-config*) (defzoneparse :dkim (name data rec) ":dkim (KEYFILE {:TAG VALUE}*)" (destructuring-bind (file &rest plist) (listify data) - (let ((things nil) (out nil)) - (labels ((flush () - (when out - (push (get-output-stream-string out) things) - (setf out nil))) - (emit (text) - (let ((len (length text))) - (when (and out (> (+ (file-position out) - (length text)) - 64)) - (flush)) - (when (plusp len) - (cond ((< len 64) - (unless out - (setf out (make-string-output-stream))) - (write-string text out)) - (t - (do ((i 0 j) - (j 64 (+ j 64))) - ((>= i len)) - (push (subseq text i (min j len)) - things)))))))) - (do ((p plist (cddr p))) - ((endp p)) - (emit (format nil "~(~A~)=~A;" (car p) (cadr p)))) - (emit (with-output-to-string (out) - (write-string "p=" out) - (when file - (with-open-file - (in (merge-pathnames file *dkim-pathname-defaults*)) - (loop - (when (string= (read-line in) - "-----BEGIN PUBLIC KEY-----") - (return))) - (loop - (let ((line (read-line in))) - (if (string= line "-----END PUBLIC KEY-----") - (return) - (write-string line out))))))))) - (rec :type :txt - :data (nreverse things))))) + (rec :type :txt + :data + (split-txt-data + (with-output-to-string (out) + (do ((p plist (cddr p))) + ((endp p)) + (format out "~(~A~)=~A;" (car p) (cadr p))) + (write-string "p=" out) + (when file + (with-open-file + (in (merge-pathnames file *dkim-pathname-defaults*)) + (loop + (when (string= (read-line in) + "-----BEGIN PUBLIC KEY-----") + (return))) + (loop + (let ((line (read-line in))) + (when (string= line "-----END PUBLIC KEY-----") + (return)) + (write-string line out)))))))))) (defenum sshfp-algorithm () (:rsa 1) (:dsa 2) (:ecdsa 3) (:ed25519 4)) (defenum sshfp-type () (:sha-1 1) (:sha-256 2))