zone.lisp: Include configurable search path for TLSA association data.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 22 Dec 2014 20:32:58 +0000 (20:32 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 23 Dec 2014 11:57:35 +0000 (11:57 +0000)
zone.lisp

index 841d62a..726791f 100644 (file)
--- a/zone.lisp
+++ b/zone.lisp
                       (return value)))
                   'tlsa-selector))))))
 
                       (return value)))
                   'tlsa-selector))))))
 
+(export '*tlsa-pathname-defaults*)
+(defvar *tlsa-pathname-defaults*
+  (list (make-pathname :directory '(:relative "certs") :type "cert")
+       (make-pathname :directory '(:relative "keys") :type "pub"))
+  "Default pathname components for TLSA records.")
+(pushnew '*tlsa-pathname-defaults* *zone-config*)
+
 (defun convert-tlsa-selector-data (data selector match)
   "Convert certificate association DATA as required by SELECTOR and MATCH.
 
 (defun convert-tlsa-selector-data (data selector match)
   "Convert certificate association DATA as required by SELECTOR and MATCH.
 
        bin))
     (pathname
      (with-temporary-files (context :base "tmpfile.tmp")
        bin))
     (pathname
      (with-temporary-files (context :base "tmpfile.tmp")
-       (let* ((kind (identify-tlsa-selector-file data))
-             (raw (raw-tlsa-assoc-data kind selector data context)))
+       (let* ((file (or (find-if #'probe-file
+                                (mapcar (lambda (template)
+                                          (merge-pathnames data template))
+                                        *tlsa-pathname-defaults*))
+                        (error "Couldn't find TLSA file `~A'" data)))
+             (kind (identify-tlsa-selector-file file))
+             (raw (raw-tlsa-assoc-data kind selector file context)))
         (read-tlsa-match-data match raw context))))))
 
 (defzoneparse :tlsa (name data rec)
         (read-tlsa-match-data match raw context))))))
 
 (defzoneparse :tlsa (name data rec)