11# Copyright: 2022, ECP, NLnet Labs and the Internet.nl contributors
22# SPDX-License-Identifier: Apache-2.0
3- import binascii
43import re
54import socket
65from collections import defaultdict
1110
1211import dns
1312from dns .exception import DNSException
14- from dns .rdatatype import RdataType
15- from dns .resolver import NXDOMAIN , NoAnswer , NoNameservers , LifetimeTimeout
13+ from dns .resolver import LifetimeTimeout , NXDOMAIN , NoAnswer , NoNameservers
1614
1715from checks .models import MxStatus
1816from checks .resolver import (
1917 dns_resolve_spf ,
2018 dns_resolve_a ,
2119 dns_resolve_aaaa ,
22- DNSSECStatus ,
23- dns_resolve_tlsa ,
2420 dns_resolve_ns ,
2521 dns_resolve_mx ,
26- dns_resolve ,
2722)
2823from checks .tasks .spf_parser import parse as spf_parse
2924from checks .scoring import ORDERED_STATUSES , STATUS_MAX
@@ -131,8 +126,8 @@ def batch_resolve_ns(self, qname, *args, **kwargs):
131126
132127def do_mail_get_servers (self , url , * args , ** kwargs ):
133128 """
134- Resolve the domain's mailservers and TLSA records .
135- Returns [mailserver, dane_data, MxStatus].
129+ Resolve the domain's mailservers.
130+ Returns [mailserver, MxStatus].
136131
137132 """
138133 mailservers = []
@@ -146,19 +141,18 @@ def do_mail_get_servers(self, url, *args, **kwargs):
146141 if is_null_mx :
147142 if len (mxlist ) > 1 :
148143 # Invalid NULL MX next to other MX.
149- return [(None , None , MxStatus .null_mx_with_other_mx )]
144+ return [(None , MxStatus .null_mx_with_other_mx )]
150145 elif not do_resolve_single_a_aaaa (url ):
151146 return [(None , None , MxStatus .null_mx_without_a_aaaa )]
152- return [(None , None , MxStatus .null_mx )]
147+ return [(None , MxStatus .null_mx )]
153148
154149 rdata = rdata .lower ().strip ()
155150 if rdata == "" :
156151 rdata = "."
157152 elif re .match (MX_LOCALHOST_RE , rdata ):
158153 # Ignore "localhost".
159154 continue
160- dane_cb_data = resolve_dane (25 , rdata )
161- mailservers .append ((rdata , dane_cb_data , MxStatus .has_mx ))
155+ mailservers .append ((rdata , MxStatus .has_mx ))
162156
163157 if not mailservers :
164158 if do_resolve_single_a_aaaa (url ):
@@ -167,10 +161,10 @@ def do_mail_get_servers(self, url, *args, **kwargs):
167161 if spf_data :
168162 spf_parsed = spf_parse (spf_data )
169163 if spf_parsed .get ("terms" , []) == ["-all" ]:
170- return [(None , None , MxStatus .no_null_mx )]
164+ return [(None , MxStatus .no_null_mx )]
171165 except DNSException :
172166 pass
173- return [(None , None , MxStatus .no_mx )]
167+ return [(None , MxStatus .no_mx )]
174168
175169 # Sort the mailservers on their name so that the same ones are tested for
176170 # all related tests.
@@ -179,7 +173,7 @@ def do_mail_get_servers(self, url, *args, **kwargs):
179173
180174
181175def get_mail_servers_mxstatus (mailservers ):
182- return mailservers [0 ][2 ]
176+ return mailservers [0 ][1 ]
183177
184178
185179def do_resolve_single_a_aaaa (qname ):
@@ -224,7 +218,7 @@ def do_resolve_mx_ips(self, url, *args, **kwargs):
224218 """
225219 mx_ips_pairs = []
226220
227- for mx_name , _ , status in do_mail_get_servers (self , url , * args , ** kwargs ):
221+ for mx_name , status in do_mail_get_servers (self , url , * args , ** kwargs ):
228222 if status is not MxStatus .has_mx :
229223 continue
230224
@@ -267,28 +261,6 @@ def do_resolve_ns_ips(qname):
267261 raise Exception (f"resolver failed on ns_name: { ns_name = } { ns_list = } { qname = } { ve = } " )
268262
269263
270- def resolve_dane (port , dname , check_nxdomain = False ):
271- # Due to its complex use, the API of this call is backwards compatible
272- qname = f"_{ port } ._tcp.{ dname } "
273- try :
274- if check_nxdomain :
275- rrset , dnssec_status = dns_resolve (qname , RdataType .A )
276- data = [rr .address for rr in rrset ]
277- else :
278- rrset , dnssec_status = dns_resolve_tlsa (qname )
279- data = [(rr .usage , rr .selector , rr .mtype , binascii .hexlify (rr .cert ).decode ("ascii" )) for rr in rrset ]
280- except NXDOMAIN :
281- return {"nxdomain" : True }
282- except (NoNameservers , NoAnswer , NoNameservers , LifetimeTimeout , dns .name .EmptyLabel ):
283- data = None
284- dnssec_status = None
285- return {
286- "data" : data ,
287- "bogus" : dnssec_status == DNSSECStatus .BOGUS ,
288- "secure" : dnssec_status == DNSSECStatus .SECURE ,
289- }
290-
291-
292264def results_per_domain (results ):
293265 """
294266 Results contain data per test per domain (or IP).
0 commit comments