1
1
# Copyright: 2022, ECP, NLnet Labs and the Internet.nl contributors
2
2
# SPDX-License-Identifier: Apache-2.0
3
- import binascii
4
3
import re
5
4
import socket
6
5
from collections import defaultdict
11
10
12
11
import dns
13
12
from 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
16
14
17
15
from checks .models import MxStatus
18
16
from checks .resolver import (
19
17
dns_resolve_spf ,
20
18
dns_resolve_a ,
21
19
dns_resolve_aaaa ,
22
- DNSSECStatus ,
23
- dns_resolve_tlsa ,
24
20
dns_resolve_ns ,
25
21
dns_resolve_mx ,
26
- dns_resolve ,
27
22
)
28
23
from checks .tasks .spf_parser import parse as spf_parse
29
24
from checks .scoring import ORDERED_STATUSES , STATUS_MAX
@@ -131,8 +126,8 @@ def batch_resolve_ns(self, qname, *args, **kwargs):
131
126
132
127
def do_mail_get_servers (self , url , * args , ** kwargs ):
133
128
"""
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].
136
131
137
132
"""
138
133
mailservers = []
@@ -146,19 +141,18 @@ def do_mail_get_servers(self, url, *args, **kwargs):
146
141
if is_null_mx :
147
142
if len (mxlist ) > 1 :
148
143
# 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 )]
150
145
elif not do_resolve_single_a_aaaa (url ):
151
146
return [(None , None , MxStatus .null_mx_without_a_aaaa )]
152
- return [(None , None , MxStatus .null_mx )]
147
+ return [(None , MxStatus .null_mx )]
153
148
154
149
rdata = rdata .lower ().strip ()
155
150
if rdata == "" :
156
151
rdata = "."
157
152
elif re .match (MX_LOCALHOST_RE , rdata ):
158
153
# Ignore "localhost".
159
154
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 ))
162
156
163
157
if not mailservers :
164
158
if do_resolve_single_a_aaaa (url ):
@@ -167,10 +161,10 @@ def do_mail_get_servers(self, url, *args, **kwargs):
167
161
if spf_data :
168
162
spf_parsed = spf_parse (spf_data )
169
163
if spf_parsed .get ("terms" , []) == ["-all" ]:
170
- return [(None , None , MxStatus .no_null_mx )]
164
+ return [(None , MxStatus .no_null_mx )]
171
165
except DNSException :
172
166
pass
173
- return [(None , None , MxStatus .no_mx )]
167
+ return [(None , MxStatus .no_mx )]
174
168
175
169
# Sort the mailservers on their name so that the same ones are tested for
176
170
# all related tests.
@@ -179,7 +173,7 @@ def do_mail_get_servers(self, url, *args, **kwargs):
179
173
180
174
181
175
def get_mail_servers_mxstatus (mailservers ):
182
- return mailservers [0 ][2 ]
176
+ return mailservers [0 ][1 ]
183
177
184
178
185
179
def do_resolve_single_a_aaaa (qname ):
@@ -224,7 +218,7 @@ def do_resolve_mx_ips(self, url, *args, **kwargs):
224
218
"""
225
219
mx_ips_pairs = []
226
220
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 ):
228
222
if status is not MxStatus .has_mx :
229
223
continue
230
224
@@ -267,28 +261,6 @@ def do_resolve_ns_ips(qname):
267
261
raise Exception (f"resolver failed on ns_name: { ns_name = } { ns_list = } { qname = } { ve = } " )
268
262
269
263
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
-
292
264
def results_per_domain (results ):
293
265
"""
294
266
Results contain data per test per domain (or IP).
0 commit comments