Class: MailResolver::Resolver
- Inherits:
-
Object
- Object
- MailResolver::Resolver
- Defined in:
- lib/mailresolver/resolver.rb
Overview
DNS for mail. Built on dnsruby rather than Resolv, which collapses SERVFAIL/REFUSED into NXDOMAIN.
Direct Known Subclasses
Constant Summary collapse
- TIMEOUTS =
One attempt per element; intervals double after the first, and the sum is the hard deadline. Default: attempts at 0s, 5s, and 10s, over at 11s.
[ 5, 3, 3 ].freeze
Instance Method Summary collapse
- #a(name) ⇒ Object
-
#aaaa(name) ⇒ Object
Dnsruby prints IPv6 in capitals; RFC 5952 §4.3 asks for lower case.
-
#addresses(name) ⇒ Object
A missing family contributes nothing; NXDOMAIN or nameserver failure still raises.
- #cname(name) ⇒ Object
-
#initialize(timeouts: TIMEOUTS) ⇒ Resolver
constructor
A new instance of Resolver.
-
#mx(name) ⇒ Object
Equal preferences tie-break on the exchange name so callers always see the same order.
-
#ptr(address) ⇒ Object
Dnsruby puts the question name in
nameand the host indomainname. -
#txt(name) ⇒ Object
TXT character-strings are joined into one value (RFC 7208 §3.3).
Constructor Details
Instance Method Details
#a(name) ⇒ Object
31 32 33 |
# File 'lib/mailresolver/resolver.rb', line 31 def a(name) records("A", name).map { |record| record.address.to_s } end |
#aaaa(name) ⇒ Object
Dnsruby prints IPv6 in capitals; RFC 5952 §4.3 asks for lower case.
36 37 38 |
# File 'lib/mailresolver/resolver.rb', line 36 def aaaa(name) records("AAAA", name).map { |record| record.address.to_s.downcase } end |
#addresses(name) ⇒ Object
A missing family contributes nothing; NXDOMAIN or nameserver failure still raises.
41 42 43 |
# File 'lib/mailresolver/resolver.rb', line 41 def addresses(name) %w[ A AAAA ].flat_map { |type| family(type, name) } end |
#cname(name) ⇒ Object
56 57 58 |
# File 'lib/mailresolver/resolver.rb', line 56 def cname(name) records("CNAME", name).map { |record| record.domainname.to_s } end |
#mx(name) ⇒ Object
Equal preferences tie-break on the exchange name so callers always see the same order.
46 47 48 49 |
# File 'lib/mailresolver/resolver.rb', line 46 def mx(name) records("MX", name).sort_by { |record| [ record.preference, record.exchange.to_s ] } .map { |record| record.exchange.to_s } end |
#ptr(address) ⇒ Object
Dnsruby puts the question name in name and the host in domainname.
52 53 54 |
# File 'lib/mailresolver/resolver.rb', line 52 def ptr(address) records("PTR", IPAddr.new(address.to_s).reverse).map { |record| record.domainname.to_s } end |
#txt(name) ⇒ Object
TXT character-strings are joined into one value (RFC 7208 §3.3).
27 28 29 |
# File 'lib/mailresolver/resolver.rb', line 27 def txt(name) records("TXT", name).map { |record| record.strings.join } end |