From b08c98376c42f6b8636d0715b5225576b140d6b1 Mon Sep 17 00:00:00 2001 From: Slatian Date: Sun, 10 Dec 2023 18:27:41 +0100 Subject: [PATCH] Update trust_dns to hickory It doesn't work yet because of: https://github.com/hickory-dns/hickory-dns/issues/2108 --- Cargo.lock | 196 +++++++++++++++++++++++++++++----------------- Cargo.toml | 4 +- src/config/dns.rs | 10 ++- src/main.rs | 4 +- src/simple_dns.rs | 23 +++--- 5 files changed, 145 insertions(+), 92 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a54d600..94c4a0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -376,6 +376,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.6" @@ -464,9 +474,9 @@ dependencies = [ [[package]] name = "deunicode" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a1abaf4d861455be59f64fd2b55606cb151fce304ede7165f410243ce96bde6" +checksum = "3ae2a35373c5c74340b79ae6780b498b2b183915ec5dacf263aac5a099bf485a" [[package]] name = "digest" @@ -487,6 +497,8 @@ dependencies = [ "axum-extra", "clap", "governor", + "hickory-proto", + "hickory-resolver", "http 1.0.0", "idna 0.4.0", "lazy_static", @@ -501,8 +513,6 @@ dependencies = [ "toml", "tower", "tower-http", - "trust-dns-proto", - "trust-dns-resolver", ] [[package]] @@ -792,6 +802,62 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +[[package]] +name = "hickory-proto" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "091a6fbccf4860009355e3efc52ff4acf37a63489aad7435372d44ceeb6fbbcf" +dependencies = [ + "async-trait", + "bytes", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "h2 0.3.22", + "http 0.2.11", + "idna 0.4.0", + "ipnet", + "once_cell", + "quinn", + "rand", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "thiserror", + "tinyvec", + "tokio", + "tokio-rustls", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b8f021164e6a984c9030023544c57789c51760065cd510572fedcfb04164e8" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "rustls", + "rustls-native-certs", + "smallvec", + "thiserror", + "tokio", + "tokio-rustls", + "tracing", +] + [[package]] name = "hostname" version = "0.3.1" @@ -1046,9 +1112,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.150" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "libm" @@ -1223,6 +1289,12 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + [[package]] name = "parking_lot" version = "0.12.1" @@ -1615,6 +1687,18 @@ dependencies = [ "sct", ] +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -1642,9 +1726,9 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "same-file" @@ -1655,6 +1739,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -1671,6 +1764,29 @@ dependencies = [ "untrusted 0.9.0", ] +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "serde" version = "1.0.193" @@ -2098,64 +2214,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "trust-dns-proto" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" -dependencies = [ - "async-trait", - "bytes", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "h2 0.3.22", - "http 0.2.11", - "idna 0.4.0", - "ipnet", - "once_cell", - "quinn", - "rand", - "rustls", - "rustls-pemfile", - "rustls-webpki", - "smallvec", - "thiserror", - "tinyvec", - "tokio", - "tokio-rustls", - "tracing", - "url", - "webpki-roots", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot", - "rand", - "resolv-conf", - "rustls", - "smallvec", - "thiserror", - "tokio", - "tokio-rustls", - "tracing", - "trust-dns-proto", - "webpki-roots", -] - [[package]] name = "typenum" version = "1.17.0" @@ -2363,12 +2421,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - [[package]] name = "widestring" version = "1.0.2" diff --git a/Cargo.toml b/Cargo.toml index 66aec90..3bd3023 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,8 +24,8 @@ tera = "1" toml = "0.8" tower = "0.4" tower-http = { version = "0.5", features = ["fs"] } -trust-dns-proto = "0.23" -trust-dns-resolver = { version = "0.23", features = ["dns-over-rustls","dns-over-https","dns-over-quic"] } +hickory-proto = "0.24" +hickory-resolver = { version = "0.24", features = ["dns-over-rustls","dns-over-https","dns-over-quic","native-certs"] } maxminddb = "0.23" mime = "0.3" http = "1.0" diff --git a/src/config/dns.rs b/src/config/dns.rs index ffe92f3..54fbcb8 100644 --- a/src/config/dns.rs +++ b/src/config/dns.rs @@ -1,5 +1,7 @@ use serde::{Deserialize,Serialize}; -use trust_dns_resolver::config::Protocol; +use hickory_resolver::config::Protocol; +use hickory_resolver::config::ResolverConfig as HickoryResolverConfig; +use hickory_resolver::config::NameServerConfig; use std::sync::Arc; use std::collections::HashMap; @@ -86,10 +88,10 @@ impl Into for DnsProtocol { impl DnsResolverConfig { pub fn to_trust_resolver_config( &self - ) -> trust_dns_resolver::config::ResolverConfig { - let mut resolver = trust_dns_resolver::config::ResolverConfig::new(); + ) -> HickoryResolverConfig { + let mut resolver = HickoryResolverConfig::new(); for server in &self.servers { - resolver.add_name_server(trust_dns_resolver::config::NameServerConfig{ + resolver.add_name_server(NameServerConfig{ socket_addr: *server, protocol: self.protocol.clone().into(), tls_dns_name: self.tls_dns_name.clone().map(|s| s.to_string()), diff --git a/src/main.rs b/src/main.rs index e24fe0d..df9a9b0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,8 +22,8 @@ use regex::Regex; use serde::{Deserialize,Serialize}; use tower::ServiceBuilder; use tower_http::services::ServeDir; -use trust_dns_resolver::Name; -use trust_dns_resolver::TokioAsyncResolver; +use hickory_resolver::Name; +use hickory_resolver::TokioAsyncResolver; use tokio::signal::unix::{ signal, diff --git a/src/simple_dns.rs b/src/simple_dns.rs index e9990cd..15d3a7f 100644 --- a/src/simple_dns.rs +++ b/src/simple_dns.rs @@ -1,17 +1,16 @@ -/* - * This module wraps the trust_dns_resolver library - * to generate results thaat are ready for serializing - * or templating. - * It does not aim to be reusable for any other purpose, - * the trust_dns_resolver library already does that. - */ -use trust_dns_proto::op::response_code::ResponseCode; -use trust_dns_proto::rr::{ +//! This module wraps the hickory_resolver library +//! to generate results thaat are ready for serializing +//! or templating. +//! It does not aim to be reusable for any other purpose, +//! the hickory_resolver library already does that. + +use hickory_proto::op::response_code::ResponseCode; +use hickory_proto::rr::{ RData, record_type::RecordType, }; -use trust_dns_resolver::{ +use hickory_resolver::{ error::ResolveError, error::ResolveErrorKind, lookup::Lookup, @@ -121,9 +120,9 @@ pub fn set_default_if_none(opt_vec: &mut Option>) { pub fn add_record_to_lookup_result(result: &mut DnsLookupResult, record: &RData){ match record { - RData::AAAA(address) => opush(&mut result.aaaa, std::net::IpAddr::V6(address.0)), + RData::AAAA(aaaa) => opush(&mut result.aaaa, std::net::IpAddr::V6(aaaa.0)), RData::ANAME(aname) => opush(&mut result.aname, aname.to_string()), - RData::A(address) => opush(&mut result.a, std::net::IpAddr::V4(address.0)), + RData::A(a) => opush(&mut result.a, std::net::IpAddr::V4(a.0)), RData::CAA(caa) => opush(&mut result.caa, caa.to_string()), RData::CNAME(cname) => opush(&mut result.cname, cname.to_string()), RData::MX(mx) => opush(&mut result.mx, MxRecord{