Handle name-error/NXDOMAIN when looking up nameservers
This commit is contained in:
parent
bee10f5cdd
commit
b991160eab
37
api.rkt
37
api.rkt
|
@ -195,21 +195,24 @@
|
||||||
(set-union u1 u2)
|
(set-union u1 u2)
|
||||||
(set-union d1 d2)))
|
(set-union d1 d2)))
|
||||||
|
|
||||||
;; DomainName CompleteAnswer -> ListOf<IPv4>
|
;; DomainName Maybe<CompleteAnswer> -> SetOf<IPv4>
|
||||||
(define (extract-addresses name ans)
|
(define (extract-addresses name ans)
|
||||||
(match-define (complete-answer ns us ds) ans)
|
(match ans
|
||||||
(define rrs (set->list (set-union ns us ds)))
|
[#f ;; name-error/NXDOMAIN, so definitely no addresses.
|
||||||
(let loop ((names (list name))
|
(set)]
|
||||||
(ips (set))
|
[(complete-answer ns us ds)
|
||||||
(seen (set)))
|
(define rrs (set->list (set-union ns us ds)))
|
||||||
(if (null? names)
|
(let loop ((names (list name))
|
||||||
ips
|
(ips (set))
|
||||||
(let* ((name (car names))
|
(seen (set)))
|
||||||
(records (filter (lambda (rr) (equal? name (rr-name rr))) rrs)))
|
(if (null? names)
|
||||||
(if (set-member? seen name)
|
ips
|
||||||
(loop (cdr names) ips seen)
|
(let* ((name (car names))
|
||||||
(let ((a-records (filter (lambda (rr) (equal? 'a (rr-type rr))) records))
|
(records (filter (lambda (rr) (equal? name (rr-name rr))) rrs)))
|
||||||
(cname-records (filter (lambda (rr) (equal? 'cname (rr-type rr))) records)))
|
(if (set-member? seen name)
|
||||||
(loop (append (map rr-rdata cname-records) (cdr names))
|
(loop (cdr names) ips seen)
|
||||||
(set-union ips (list->set (map rr-rdata a-records)))
|
(let ((a-records (filter (lambda (rr) (equal? 'a (rr-type rr))) records))
|
||||||
(set-add seen name))))))))
|
(cname-records (filter (lambda (rr) (equal? 'cname (rr-type rr))) records)))
|
||||||
|
(loop (append (map rr-rdata cname-records) (cdr names))
|
||||||
|
(set-union ips (list->set (map rr-rdata a-records)))
|
||||||
|
(set-add seen name)))))))]))
|
||||||
|
|
Loading…
Reference in New Issue