From bcd3677e6a466bac816c284ba456289d1183a982 Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Mon, 5 Oct 2026 23:25:11 +0100 Subject: [PATCH] fix(deps): bump hickory-proto 0.25.2 -> 0.26.3 hickory-proto 0.25.2 is inside GHSA-q2qq-hmj6-3wpp (<= 0.26.0) and GHSA-3v94-mw7p-v465 (0.25 line, no patched 0.25 release). Move both crates to ^0.26.3 and port to the 0.26 message API, which replaced Header getters/setters with public Metadata fields: - Header::response_from_request -> Metadata::response_from_request - message.queries()/answers() -> message.queries/answers fields - set_response_code/set_op_code/... -> message.metadata.* fields - Record::set_dns_class -> record.dns_class; TXT::iter -> txt_data - rr::record_data::RData is private; import rr::RData Also replace a let-chain in hesinfo's validate command with a nested if-let: the workspace is edition 2021, so origin/main did not compile (E: let chains are only allowed in Rust 2024). Refs hyperpolymath/.git-private-farm#96 Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 199 ++++++++++++++++++++++++-------- crates/hesinfo/Cargo.toml | 2 +- crates/hesinfo/src/main.rs | 28 ++--- crates/hesiod-lib/Cargo.toml | 2 +- crates/hesiod-lib/src/server.rs | 30 ++--- 5 files changed, 177 insertions(+), 84 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 06e1910..dd8dde1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -73,17 +73,6 @@ version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea" -[[package]] -name = "async-trait" -version = "0.1.89" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -203,6 +192,17 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" +[[package]] +name = "chacha20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" +dependencies = [ + "cfg-if", + "cpufeatures", + "rand_core 0.10.1", +] + [[package]] name = "ciborium" version = "0.2.2" @@ -276,6 +276,25 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + [[package]] name = "criterion" version = "0.5.1" @@ -372,18 +391,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "errno" version = "0.3.14" @@ -436,12 +443,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - [[package]] name = "futures-task" version = "0.3.31" @@ -458,7 +459,6 @@ dependencies = [ "futures-task", "pin-project-lite", "pin-utils", - "slab", ] [[package]] @@ -480,10 +480,22 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", - "r-efi", + "r-efi 5.3.0", "wasip2", ] +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", +] + [[package]] name = "half" version = "2.7.1" @@ -540,25 +552,19 @@ dependencies = [ [[package]] name = "hickory-proto" -version = "0.25.2" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" +checksum = "12b92608f679a6fa515dd1d15c1ff89443026e391200a2c840c7afcba482893d" dependencies = [ - "async-trait", - "cfg-if", "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", "idna", "ipnet", + "jni", "once_cell", - "rand", + "rand 0.10.3", "ring", "thiserror", "tinyvec", - "tokio", "tracing", "url", ] @@ -784,6 +790,55 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys", + "log", + "simd_cesu8", + "thiserror", + "walkdir", + "windows-link", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn", +] + [[package]] name = "js-sys" version = "0.3.94" @@ -1023,7 +1078,7 @@ dependencies = [ "bit-vec", "bitflags", "num-traits", - "rand", + "rand 0.9.4", "rand_chacha", "rand_xorshift", "regex-syntax", @@ -1053,6 +1108,12 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + [[package]] name = "rand" version = "0.9.4" @@ -1060,7 +1121,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha", - "rand_core", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af" +dependencies = [ + "chacha20", + "getrandom 0.4.3", + "rand_core 0.10.1", ] [[package]] @@ -1070,7 +1142,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.5", ] [[package]] @@ -1082,13 +1154,19 @@ dependencies = [ "getrandom 0.3.4", ] +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + [[package]] name = "rand_xorshift" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a" dependencies = [ - "rand_core", + "rand_core 0.9.5", ] [[package]] @@ -1163,6 +1241,15 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "1.1.3" @@ -1215,6 +1302,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + [[package]] name = "serde" version = "1.0.228" @@ -1307,10 +1400,20 @@ dependencies = [ ] [[package]] -name = "slab" -version = "0.4.12" +name = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" [[package]] name = "smallvec" diff --git a/crates/hesinfo/Cargo.toml b/crates/hesinfo/Cargo.toml index c726b4c..e5f5fa0 100644 --- a/crates/hesinfo/Cargo.toml +++ b/crates/hesinfo/Cargo.toml @@ -11,7 +11,7 @@ repository.workspace = true [dependencies] hesiod-lib = { path = "../hesiod-lib" } -hickory-proto = "0.25.2" +hickory-proto = "0.26.3" clap = { version = "4.5.57", features = ["derive"] } tokio.workspace = true serde.workspace = true diff --git a/crates/hesinfo/src/main.rs b/crates/hesinfo/src/main.rs index dbd96af..9077e00 100644 --- a/crates/hesinfo/src/main.rs +++ b/crates/hesinfo/src/main.rs @@ -97,8 +97,7 @@ async fn main() -> Result<()> { /// Send a DNS query to a Hesiod server and print the result. async fn cmd_lookup(key: &str, map: &str, server: &str, port: u16) -> Result<()> { use hickory_proto::op::{Message, MessageType, OpCode, Query}; - use hickory_proto::rr::record_data::RData; - use hickory_proto::rr::{DNSClass, Name, RecordType}; + use hickory_proto::rr::{DNSClass, Name, RData, RecordType}; use tokio::net::UdpSocket; let map_type: MapType = map.parse()?; @@ -114,11 +113,8 @@ async fn cmd_lookup(key: &str, map: &str, server: &str, port: u16) -> Result<()> query.set_query_type(RecordType::TXT); query.set_query_class(DNSClass::HS); - let mut msg = Message::new(); - msg.set_id(rand_id()); - msg.set_message_type(MessageType::Query); - msg.set_op_code(OpCode::Query); - msg.set_recursion_desired(false); + let mut msg = Message::new(rand_id(), MessageType::Query, OpCode::Query); + msg.metadata.recursion_desired = false; msg.add_query(query); let wire = msg.to_vec()?; @@ -135,13 +131,13 @@ async fn cmd_lookup(key: &str, map: &str, server: &str, port: u16) -> Result<()> let response = Message::from_vec(&buf[..len])?; - if response.answers().is_empty() { + if response.answers.is_empty() { println!("No records found for {}.{}", key, map_type.label()); } else { - for answer in response.answers() { - let rdata: &RData = answer.data(); + for answer in &response.answers { + let rdata: &RData = &answer.data; if let RData::TXT(txt) = rdata { - for s in txt.iter() { + for s in txt.txt_data.iter() { println!("{}", std::str::from_utf8(s).unwrap_or("")); } } @@ -242,11 +238,11 @@ fn cmd_validate(file: &std::path::Path) -> Result<()> { None }; - if let Some(mt) = map_type - && let Err(e) = hesiod_lib::records::HesiodRecord::from_txt(mt, txt_data) - { - eprintln!("line {}: invalid {} record: {}", line_no + 1, mt.label(), e); - errors += 1; + if let Some(mt) = map_type { + if let Err(e) = hesiod_lib::records::HesiodRecord::from_txt(mt, txt_data) { + eprintln!("line {}: invalid {} record: {}", line_no + 1, mt.label(), e); + errors += 1; + } } } diff --git a/crates/hesiod-lib/Cargo.toml b/crates/hesiod-lib/Cargo.toml index 8f03086..839041e 100644 --- a/crates/hesiod-lib/Cargo.toml +++ b/crates/hesiod-lib/Cargo.toml @@ -10,7 +10,7 @@ license.workspace = true repository.workspace = true [dependencies] -hickory-proto = "0.25.2" +hickory-proto = "0.26.3" tokio.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/hesiod-lib/src/server.rs b/crates/hesiod-lib/src/server.rs index 8b3133c..b3b1338 100644 --- a/crates/hesiod-lib/src/server.rs +++ b/crates/hesiod-lib/src/server.rs @@ -5,10 +5,9 @@ use std::net::SocketAddr; use std::sync::Arc; use anyhow::{Context, Result}; -use hickory_proto::op::{Header, Message, OpCode, ResponseCode}; +use hickory_proto::op::{Message, Metadata, OpCode, ResponseCode}; use hickory_proto::rr::rdata::TXT; -use hickory_proto::rr::record_data::RData; -use hickory_proto::rr::{DNSClass, Name, Record, RecordType}; +use hickory_proto::rr::{DNSClass, Name, RData, Record, RecordType}; use tokio::net::UdpSocket; use tracing::{debug, error, info, warn}; @@ -78,24 +77,19 @@ pub async fn run_dns_server(zone: HesiodZone, port: u16) -> Result Result> { let request = Message::from_vec(data).context("parsing DNS query")?; - let mut response = Message::new(); - - let mut header = Header::response_from_request(request.header()); - header.set_authoritative(true); - - response.set_header(header); + let mut response = Message::response(request.metadata.id, request.metadata.op_code); + response.metadata = Metadata::response_from_request(&request.metadata); + response.metadata.authoritative = true; // Copy the question section - for query in request.queries() { - response.add_query(query.clone()); - } + response.add_queries(request.queries.iter().cloned()); - if request.header().op_code() != OpCode::Query { - response.set_response_code(ResponseCode::NotImp); + if request.metadata.op_code != OpCode::Query { + response.metadata.response_code = ResponseCode::NotImp; return Ok(response.to_vec()?); } - for query in request.queries() { + for query in &request.queries { let name = query.name(); let qclass_raw: u16 = query.query_class().into(); let qtype = query.query_type(); @@ -116,15 +110,15 @@ fn handle_query(data: &[u8], state: &DnsServerState) -> Result> { let txt_rdata = TXT::new(vec![txt_data.clone()]); let mut record = Record::from_rdata(name.clone(), state.zone.ttl, RData::TXT(txt_rdata)); - record.set_dns_class(DNSClass::HS); + record.dns_class = DNSClass::HS; response.add_answer(record); } else { debug!("no record found for {}", name); } } - if response.answers().is_empty() { - response.set_response_code(ResponseCode::NXDomain); + if response.answers.is_empty() { + response.metadata.response_code = ResponseCode::NXDomain; } Ok(response.to_vec()?)