Skip to content

Commit ac3edcc

Browse files
committed
Clean up DANE/resolver integration
1 parent 018f117 commit ac3edcc

File tree

7 files changed

+95
-3138
lines changed

7 files changed

+95
-3138
lines changed

checks/categories.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1470,7 +1470,7 @@ def result_not_trusted(self):
14701470
def result_not_in_cert(self):
14711471
self._status(STATUS_SUCCESS)
14721472
self.verdict = "detail web tls ocsp-stapling verdict not-in-cert"
1473-
self.tech_data = "detail tech data not-in-cert"
1473+
self.tech_data = "detail tech data not-applicable"
14741474

14751475

14761476
class WebTlsKexHashFunc(Subtest):

checks/tasks/dnssec.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,12 +328,12 @@ def do_mail_is_secure(self, mailservers, url, *args, **kwargs):
328328
try:
329329
mx_status = shared.get_mail_servers_mxstatus(mailservers)
330330
if mx_status != MxStatus.has_mx:
331-
mailservers = [(url, None, mx_status)]
331+
mailservers = [(url, mx_status)]
332332
else:
333-
mailservers.insert(0, (url, None, mx_status))
333+
mailservers.insert(0, (url, mx_status))
334334

335335
res = OrderedDict()
336-
for domain, _, mx_status in mailservers:
336+
for domain, mx_status in mailservers:
337337
if domain != "":
338338
res[domain] = dnssec_status(
339339
domain,
@@ -346,7 +346,7 @@ def do_mail_is_secure(self, mailservers, url, *args, **kwargs):
346346

347347
except SoftTimeLimitExceeded:
348348
log.debug("Soft time limit exceeded.")
349-
for domain, _, mx_status in mailservers:
349+
for domain, mx_status in mailservers:
350350
if domain != "" and not res.get(domain):
351351
res[domain] = dict(
352352
status=DnssecStatus.dnserror.value,

checks/tasks/ipv6.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ def do_mx(self, url, *args, **kwargs):
394394
if mx_status != MxStatus.has_mx:
395395
mailservers = []
396396

397-
for mailserver, _, _ in mailservers:
397+
for mailserver, _ in mailservers:
398398
# Check if we already have cached results.
399399
cache_id = redis_id.mail_ipv6.id.format(mailserver)
400400
cache_ttl = redis_id.mail_ipv6.ttl

checks/tasks/shared.py

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# Copyright: 2022, ECP, NLnet Labs and the Internet.nl contributors
22
# SPDX-License-Identifier: Apache-2.0
3-
import binascii
43
import re
54
import socket
65
from collections import defaultdict
@@ -11,19 +10,15 @@
1110

1211
import dns
1312
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
1614

1715
from checks.models import MxStatus
1816
from 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
)
2823
from checks.tasks.spf_parser import parse as spf_parse
2924
from checks.scoring import ORDERED_STATUSES, STATUS_MAX
@@ -131,8 +126,8 @@ def batch_resolve_ns(self, qname, *args, **kwargs):
131126

132127
def 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

181175
def get_mail_servers_mxstatus(mailservers):
182-
return mailservers[0][2]
176+
return mailservers[0][1]
183177

184178

185179
def 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-
292264
def results_per_domain(results):
293265
"""
294266
Results contain data per test per domain (or IP).

0 commit comments

Comments
 (0)