Skip to content

Commit edf12d3

Browse files
bwbroersmamxsasha
andauthored
Fix #1592 - Make RPKI check all web/NS IPs (#1596)
(vs just one v4 and one v6) Also deduplicates the validity table, which already had duplicates for MX. Co-authored-by: Sasha Romijn <github@mxsasha.eu>
1 parent 1307ffb commit edf12d3

File tree

2 files changed

+46
-11
lines changed

2 files changed

+46
-11
lines changed

checks/tasks/rpki.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ def callback(results: Mapping[TestName, TestResult], domain, parent, parent_name
122122
return parent, results
123123

124124

125-
web_registered = check_registry("web_rpki", web_callback, shared.resolve_a_aaaa)
126-
batch_web_registered = check_registry("batch_web_rpki", batch_web_callback, shared.batch_resolve_a_aaaa)
125+
web_registered = check_registry("web_rpki", web_callback, shared.resolve_all_a_aaaa)
126+
batch_web_registered = check_registry("batch_web_rpki", batch_web_callback, shared.batch_resolve_all_a_aaaa)
127127
mail_registered = check_registry("mail_rpki", mail_callback, shared.resolve_mx)
128128
batch_mail_registered = check_registry("batch_mail_rpki", batch_mail_callback, shared.batch_resolve_mx)
129129

@@ -334,6 +334,7 @@ def gen_tech_data(host, asn, prefix, validity, errors) -> List[str]:
334334
invalid_count = 0 # count of validation resulting in 'invalid'
335335
not_valid_count = 0 # count of validations not resulting in 'valid'
336336
tech_data = []
337+
routes_shown_for_host = []
337338

338339
prev_host = None
339340
for host in hostset:
@@ -346,9 +347,17 @@ def gen_tech_data(host, asn, prefix, validity, errors) -> List[str]:
346347

347348
for route, validity in ip["validity"].items():
348349
asn, prefix = route
350+
351+
first_line_for_host = host.host != prev_host
352+
if first_line_for_host:
353+
routes_shown_for_host = []
354+
if route in routes_shown_for_host:
355+
continue
356+
routes_shown_for_host.append(route)
357+
349358
tech_data.append(
350359
gen_tech_data(
351-
host.host if host.host != prev_host else "...",
360+
host.host if first_line_for_host else "...",
352361
asn,
353362
prefix,
354363
validity,

checks/tasks/shared.py

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,26 @@ def batch_resolve_a_aaaa(self, qname, *args, **kwargs):
6464
return do_resolve_a_aaaa(self, qname, *args, **kwargs)
6565

6666

67+
@shared_task(
68+
bind=True,
69+
soft_time_limit=settings.SHARED_TASK_SOFT_TIME_LIMIT_HIGH,
70+
time_limit=settings.SHARED_TASK_TIME_LIMIT_HIGH,
71+
base=SetupUnboundContext,
72+
)
73+
def resolve_all_a_aaaa(self, qname, *args, **kwargs):
74+
return do_resolve_all_a_aaaa(self, qname, *args, **kwargs)
75+
76+
77+
@batch_shared_task(
78+
bind=True,
79+
soft_time_limit=settings.BATCH_SHARED_TASK_SOFT_TIME_LIMIT_HIGH,
80+
time_limit=settings.BATCH_SHARED_TASK_TIME_LIMIT_HIGH,
81+
base=SetupUnboundContext,
82+
)
83+
def batch_resolve_all_a_aaaa(self, qname, *args, **kwargs):
84+
return do_resolve_all_a_aaaa(self, qname, *args, **kwargs)
85+
86+
6787
@shared_task(
6888
bind=True,
6989
soft_time_limit=settings.SHARED_TASK_SOFT_TIME_LIMIT_HIGH,
@@ -162,6 +182,18 @@ def do_resolve_a_aaaa(self, qname, *args, **kwargs):
162182
return af_ip_pairs
163183

164184

185+
def do_resolve_all_a_aaaa(self, qname, *args, **kwargs):
186+
"""Resolve all A and AAAA records and return all results for each type."""
187+
af_ip_pairs = []
188+
ip4 = self.resolve(qname, unbound.RR_TYPE_A)
189+
for ip in ip4:
190+
af_ip_pairs.append((socket.AF_INET, ip))
191+
ip6 = self.resolve(qname, unbound.RR_TYPE_AAAA)
192+
for ip in ip6:
193+
af_ip_pairs.append((socket.AF_INET6, ip))
194+
return af_ip_pairs
195+
196+
165197
def do_resolve_mx_ips(self, url, *args, **kwargs):
166198
"""Resolve the domain's mailservers
167199
returns [(mailserver, af_ip_pairs)]
@@ -172,13 +204,7 @@ def do_resolve_mx_ips(self, url, *args, **kwargs):
172204
if status is not MxStatus.has_mx:
173205
continue
174206

175-
af_ip_pairs = []
176-
ip4 = self.resolve(qname, unbound.RR_TYPE_A)
177-
for ip in ip4:
178-
af_ip_pairs.append((socket.AF_INET, ip))
179-
ip6 = self.resolve(qname, unbound.RR_TYPE_AAAA)
180-
for ip in ip6:
181-
af_ip_pairs.append((socket.AF_INET6, ip))
207+
af_ip_pairs = do_resolve_all_a_aaaa(self, qname, *args, **kwargs)
182208
mx_ips_pairs.append((qname, af_ip_pairs))
183209

184210
return mx_ips_pairs
@@ -195,7 +221,7 @@ def do_resolve_ns_ips(self, url, *args, **kwargs):
195221
next_label = next_label[next_label.find(".") + 1 :]
196222

197223
for rr in rrset:
198-
yield (rr, do_resolve_a_aaaa(self, rr))
224+
yield (rr, do_resolve_all_a_aaaa(self, rr))
199225

200226

201227
def resolve_dane(task, port, dname, check_nxdomain=False):

0 commit comments

Comments
 (0)