mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-23 10:37:43 -04:00
Parse DNSKEY into a dnspython type in isctest.kasp.Key.dnskey
Previously, a DNSKEY string from keyfile was returned. This made the function brittle for further processing, as the string would have to be split up, concatenated, and TTL could be missing, making string indices context-dependent. Parse the DNSKEY rrset into a proper dnspython object and return it. This makes the output more predictable and reliable, as all the neccessary parsing is done by dnspython.
This commit is contained in:
parent
1ede6683cd
commit
0bf20f8d68
2 changed files with 24 additions and 12 deletions
|
|
@ -20,8 +20,12 @@ import time
|
|||
from typing import Dict, List, Optional, Tuple, Union
|
||||
|
||||
import dns
|
||||
import dns.rdatatype
|
||||
import dns.rrset
|
||||
import dns.tsig
|
||||
|
||||
import pytest
|
||||
|
||||
import isctest.log
|
||||
import isctest.query
|
||||
import isctest.util
|
||||
|
|
@ -443,12 +447,22 @@ class Key:
|
|||
return int(line.split()[1])
|
||||
return 0
|
||||
|
||||
def dnskey(self):
|
||||
@property
|
||||
def dnskey(self) -> dns.rrset.RRset:
|
||||
pytest.importorskip("dns", minversion="2.2.0") # dns.zonefile.read_rrsets
|
||||
with open(self.keyfile, "r", encoding="utf-8") as file:
|
||||
for line in file:
|
||||
if "DNSKEY" in line:
|
||||
return line.strip()
|
||||
return "undefined"
|
||||
rrsets = dns.zonefile.read_rrsets(
|
||||
file.read(),
|
||||
rdclass=None, # read rdclass from the file
|
||||
default_ttl=DEFAULT_TTL, # use this TTL if not present
|
||||
)
|
||||
assert len(rrsets) == 1, f"{self.keyfile} has multiple RRsets"
|
||||
dnskey_rr = rrsets[0]
|
||||
assert len(dnskey_rr) == 1, f"{self.keyfile} has multiple RRs"
|
||||
assert (
|
||||
dnskey_rr.rdtype == dns.rdatatype.DNSKEY
|
||||
), f"DNSKEY not found in {self.keyfile}"
|
||||
return dnskey_rr
|
||||
|
||||
def is_ksk(self) -> bool:
|
||||
return self.get_metadata("KSK") == "yes"
|
||||
|
|
|
|||
|
|
@ -102,11 +102,10 @@ def test_rollover_multisigner(ns3, alg, size):
|
|||
expected2[0].legacy = True # noqa
|
||||
expected = expected + expected2
|
||||
|
||||
dnskey = newkeys[0].dnskey().split()
|
||||
rdata = " ".join(dnskey[4:])
|
||||
dnskey = newkeys[0].dnskey
|
||||
|
||||
update_msg = dns.update.UpdateMessage(zone)
|
||||
update_msg.add(f"{dnskey[0]}", 3600, "DNSKEY", rdata)
|
||||
update_msg.add(dnskey.name, dnskey.ttl, dnskey[0])
|
||||
ns3.nsupdate(update_msg)
|
||||
|
||||
isctest.kasp.check_dnssec_verify(ns3, zone)
|
||||
|
|
@ -118,11 +117,10 @@ def test_rollover_multisigner(ns3, alg, size):
|
|||
isctest.kasp.check_subdomain(ns3, zone, ksks, zsks)
|
||||
|
||||
# Remove ZSKs from the other providers for zone.
|
||||
dnskey2 = extkeys[0].dnskey().split()
|
||||
rdata2 = " ".join(dnskey2[4:])
|
||||
dnskey2 = extkeys[0].dnskey
|
||||
update_msg = dns.update.UpdateMessage(zone)
|
||||
update_msg.delete(f"{dnskey[0]}", "DNSKEY", rdata)
|
||||
update_msg.delete(f"{dnskey2[0]}", "DNSKEY", rdata2)
|
||||
update_msg.delete(dnskey.name, dnskey[0])
|
||||
update_msg.delete(dnskey2.name, dnskey2[0])
|
||||
ns3.nsupdate(update_msg)
|
||||
|
||||
isctest.kasp.check_dnssec_verify(ns3, zone)
|
||||
|
|
|
|||
Loading…
Reference in a new issue