Fixes for the recordsiter_from_refs branch in domain.

This commit is contained in:
Philip Homburg
2026-02-20 09:49:31 +01:00
parent 44e2a88748
commit 248b2e2db4
4 changed files with 28 additions and 18 deletions
+4
View File
@@ -139,3 +139,7 @@ assets = [
# Set Obsoletes per https://docs.fedoraproject.org/en-US/packaging-guidelines/#renaming-or-replacing-existing-packages.
[package.metadata.generate-rpm.obsoletes]
ldns-utils = "< 0:1.8.4-2"
# To get the recordsiter_from_refs branch.
[patch.'https://github.com/NLnetLabs/domain.git']
domain = { path = "../domain" }
+1 -1
View File
@@ -330,7 +330,7 @@ impl Keygen {
// TODO: Attempt repeated generation to avoid key tag collisions.
// TODO: Add a high-level operation in 'domain' to select flags?
let flags = if self.make_ksk { 257 } else { 256 };
let (secret_key, public_key) = domain::crypto::sign::generate(params, flags)
let (secret_key, public_key) = domain::crypto::sign::generate(&params, flags)
.map_err(|err| format!("an implementation error occurred: {err}").into())
.context("generating a cryptographic keypair")?;
let digest = self.make_ksk.then(|| {
+9 -8
View File
@@ -2612,8 +2612,9 @@ impl WorkSpace {
// Otherwise use Ring/OpenSSL based key generation.
let (secret_key, public_key, key_tag) = loop {
let (secret_key, public_key) = domain::crypto::sign::generate(algorithm.clone(), flags)
.map_err(|e| format!("key generation failed: {e}\n"))?;
let (secret_key, public_key) =
domain::crypto::sign::generate(&algorithm.clone(), flags)
.map_err(|e| format!("key generation failed: {e}\n"))?;
let key_tag = public_key.key_tag();
if !keys.iter().any(|(_, k)| k.key_tag() == key_tag) {
@@ -2804,8 +2805,8 @@ impl WorkSpace {
KeyType::Include(_) => false,
};
let rrset =
Rrset::new(&dnskeys).map_err(|e| format!("unable to create Rrset: {e}\n"))?;
let rrset = Rrset::new_from_owned(&dnskeys)
.map_err(|e| format!("unable to create Rrset: {e}\n"))?;
if dnskey_signer {
let privref = v.privref().ok_or("missing private key")?;
@@ -2949,10 +2950,10 @@ impl WorkSpace {
KeyType::Include(_) => false,
};
let cds_rrset =
Rrset::new(&cds_list).map_err(|e| format!("unable to create Rrset: {e}\n"))?;
let cdnskey_rrset =
Rrset::new(&cdnskey_list).map_err(|e| format!("unable to create Rrset: {e}\n"))?;
let cds_rrset = Rrset::new_from_owned(&cds_list)
.map_err(|e| format!("unable to create Rrset: {e}\n"))?;
let cdnskey_rrset = Rrset::new_from_owned(&cdnskey_list)
.map_err(|e| format!("unable to create Rrset: {e}\n"))?;
if dnskey_signer {
let privref = v.privref().ok_or("missing private key")?;
+14 -9
View File
@@ -53,7 +53,9 @@ use domain::dnssec::sign::denial::nsec3::mk_hashed_nsec3_owner_name;
use domain::dnssec::sign::denial::nsec3::{GenerateNsec3Config, Nsec3ParamTtlMode};
use domain::dnssec::sign::error::SigningError;
use domain::dnssec::sign::keys::SigningKey;
use domain::dnssec::sign::records::{OwnerRrs, RecordsIter, Rrset, SortedRecords};
use domain::dnssec::sign::records::{
OwnerRrs, RecordsIter, Rrset, SliceRefsOrOwned, SortedRecords,
};
use domain::dnssec::sign::signatures::rrsigs::sign_rrset;
use domain::dnssec::sign::traits::{Signable, SignableZoneInPlace};
use domain::dnssec::sign::SigningConfig;
@@ -841,10 +843,10 @@ impl SignZone {
let mut dnskey_extra = Vec::new();
let mut all_dnskeys = Vec::new();
let empty_records: [Record<_, _>; 0] = [];
for r in dnskey_rrset
.as_ref()
.map_or(empty_records.iter(), |r| r.iter())
{
for r in dnskey_rrset.as_ref().map_or(
SliceRefsOrOwned::new_from_owned(&empty_records).iter(),
|r| r.iter(),
) {
all_dnskeys.push(r.clone());
}
if !self.do_not_add_keys_to_zone {
@@ -857,7 +859,10 @@ impl SignZone {
let pubkey = k.dnskey();
if !dnskey_rrset
.as_ref()
.map_or(empty_records.iter(), |r| r.iter())
.map_or(
SliceRefsOrOwned::new_from_owned(&empty_records).iter(),
|r| r.iter(),
)
.any(|k| {
if let ZoneRecordData::Dnskey(dnskey) = k.data() {
*dnskey == pubkey
@@ -875,7 +880,7 @@ impl SignZone {
}
}
let all_dnskeys = Rrset::new(&all_dnskeys);
let all_dnskeys = Rrset::new_from_owned(&all_dnskeys);
let mut dnskey_rrsigs = Vec::new();
if let Ok(all_dnskeys) = all_dnskeys {
@@ -1816,8 +1821,8 @@ impl SignZone {
expiration: Timestamp,
) -> Result<(), SigningError> {
if !zonemd_rrs.is_empty() {
let zonemd_rrset =
Rrset::new(zonemd_rrs).expect("zonemd_rrs is not empty so new should not fail");
let zonemd_rrset = Rrset::new_from_owned(zonemd_rrs)
.expect("zonemd_rrs is not empty so new should not fail");
let mut new_rrsig_recs = zonemd_rrset.sign(apex, keys, inception, expiration)?;
records.update_data(|rr| {
matches!(rr.data(), ZoneRecordData::Rrsig(rrsig) if rr.owner() == apex && rrsig.type_covered() == Rtype::ZONEMD)