From ccb71d0bdd051ca1a524f17037ab8396a1e319fc Mon Sep 17 00:00:00 2001 From: Andreas Rottmann Date: Tue, 20 Aug 2024 00:39:45 +0200 Subject: [PATCH 1/2] Update to latest `trust-dns` This is an intermediate step before switching to `hickory-dns`, which is `trust-dns`'s new name. --- Cargo.lock | 394 +++++++++++++++++++++++++++--------------- Cargo.toml | 4 +- src/backend.rs | 41 ++--- src/bin/tdns.rs | 2 +- src/query.rs | 22 +-- src/record.rs | 22 +-- src/update.rs | 20 ++- src/update_message.rs | 4 +- src/util.rs | 2 +- tests/mock/mod.rs | 26 +-- 10 files changed, 330 insertions(+), 207 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 34bb287..f8fc70f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -162,15 +162,6 @@ version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" -[[package]] -name = "deranged" -version = "0.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" -dependencies = [ - "powerfmt", -] - [[package]] name = "digest" version = "0.10.7" @@ -201,14 +192,14 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "enum-as-inner" -version = "0.3.4" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.117", ] [[package]] @@ -356,9 +347,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -485,11 +476,10 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -515,24 +505,15 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - [[package]] name = "ipconfig" -version = "0.2.2" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2 0.3.19", + "socket2 0.5.10", "widestring", - "winapi", + "windows-sys 0.48.0", "winreg", ] @@ -600,12 +581,6 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "memchr" version = "2.8.0" @@ -632,12 +607,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "num-conv" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" - [[package]] name = "num-traits" version = "0.2.19" @@ -653,17 +622,6 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", -] - [[package]] name = "parking_lot" version = "0.12.5" @@ -671,21 +629,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", - "parking_lot_core 0.9.12", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -696,7 +640,7 @@ checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.18", + "redox_syscall", "smallvec", "windows-link", ] @@ -722,12 +666,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -819,15 +757,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.18" @@ -843,6 +772,21 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + [[package]] name = "rustversion" version = "1.0.22" @@ -925,13 +869,12 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.3.19" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ - "cfg-if", "libc", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -944,6 +887,12 @@ dependencies = [ "windows-sys 0.60.2", ] +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -1068,25 +1017,6 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "time" -version = "0.3.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" -dependencies = [ - "deranged", - "num-conv", - "powerfmt", - "serde_core", - "time-core", -] - -[[package]] -name = "time-core" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" - [[package]] name = "tinystr" version = "0.8.2" @@ -1121,7 +1051,7 @@ dependencies = [ "bytes", "libc", "mio", - "parking_lot 0.12.5", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2 0.6.2", @@ -1140,31 +1070,61 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", +] + [[package]] name = "trust-dns-client" -version = "0.20.4" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b4ef9b9bde0559b78a4abb00339143750085f05e5a453efb7b8bef1061f09dc" +checksum = "14135e72c7e6d4c9b6902d4437881a8598f0145dbb2e3f86f92dbad845b61e63" dependencies = [ "cfg-if", "data-encoding", "futures-channel", "futures-util", - "lazy_static", - "log", + "once_cell", "radix_trie", "rand", "thiserror", - "time", "tokio", + "tracing", "trust-dns-proto", ] [[package]] name = "trust-dns-proto" -version = "0.20.4" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca94d4e9feb6a181c690c4040d7a24ef34018d8313ac5044a61d21222ae24e31" +checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" dependencies = [ "async-trait", "cfg-if", @@ -1173,35 +1133,37 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna 0.2.3", + "idna 0.4.0", "ipnet", - "lazy_static", - "log", + "once_cell", "rand", + "ring", "smallvec", "thiserror", "tinyvec", "tokio", + "tracing", "url", ] [[package]] name = "trust-dns-resolver" -version = "0.20.4" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecae383baad9995efaa34ce8e57d12c3f305e545887472a492b838f4b5cfb77a" +checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" dependencies = [ "cfg-if", "futures-util", "ipconfig", - "lazy_static", - "log", "lru-cache", - "parking_lot 0.11.2", + "once_cell", + "parking_lot", + "rand", "resolv-conf", "smallvec", "thiserror", "tokio", + "tracing", "trust-dns-proto", ] @@ -1244,6 +1206,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + [[package]] name = "url" version = "2.5.8" @@ -1325,11 +1293,21 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "web-sys" +version = "0.3.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "widestring" -version = "0.4.3" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -1412,13 +1390,31 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets", + "windows-targets 0.53.5", ] [[package]] @@ -1430,6 +1426,37 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + [[package]] name = "windows-targets" version = "0.53.5" @@ -1437,58 +1464,148 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + [[package]] name = "windows_aarch64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + [[package]] name = "windows_aarch64_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + [[package]] name = "windows_i686_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + [[package]] name = "windows_i686_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + [[package]] name = "windows_i686_msvc" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + [[package]] name = "windows_x86_64_gnu" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + [[package]] name = "windows_x86_64_gnullvm" version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "windows_x86_64_msvc" version = "0.53.1" @@ -1497,11 +1614,12 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winreg" -version = "0.6.2" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index c9167e7..e8e7218 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,8 +16,8 @@ maintenance = { status = "actively-developed" } [dependencies] async-trait = "0.1.57" -trust-dns-client = "0.20.0" -trust-dns-resolver = "0.20.0" +trust-dns-client = { version = "0.23.2", features = ["dnssec-ring"] } +trust-dns-resolver = "0.23.2" structopt = "0.3.1" futures = "0.3.1" anyhow = "1.0" diff --git a/src/backend.rs b/src/backend.rs index 0416ff4..51d2fae 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -11,9 +11,9 @@ use trust_dns_client::{ }; use trust_dns_resolver::{ config::{NameServerConfig, Protocol, ResolverConfig, ResolverOpts}, - error::ResolveError, + error::{ResolveError, ResolveResult}, lookup, lookup_ip, - proto::{error::ProtoError, xfer::dns_request::DnsRequestOptions}, + proto::error::ProtoError, TokioAsyncResolver, }; @@ -28,30 +28,26 @@ pub trait Resolver: Clone { name: rr::Name, rtype: rr::RecordType, ) -> Result; - async fn lookup_ip(&self, host: rr::Name) -> Result; - async fn lookup_soa(&self, name: rr::Name) -> Result; - async fn lookup_ns(&self, name: rr::Name) -> Result; + async fn lookup_ip(&self, host: rr::Name) -> ResolveResult; + async fn lookup_soa(&self, name: rr::Name) -> ResolveResult; + async fn lookup_ns(&self, name: rr::Name) -> ResolveResult; } #[async_trait] impl Resolver for TokioAsyncResolver { - async fn lookup( - &self, - name: rr::Name, - rtype: rr::RecordType, - ) -> Result { - TokioAsyncResolver::lookup(self, name, rtype, DnsRequestOptions::default()).await + async fn lookup(&self, name: rr::Name, rtype: rr::RecordType) -> ResolveResult { + TokioAsyncResolver::lookup(self, name, rtype).await } - async fn lookup_ip(&self, host: rr::Name) -> Result { + async fn lookup_ip(&self, host: rr::Name) -> ResolveResult { TokioAsyncResolver::lookup_ip(self, host).await } - async fn lookup_soa(&self, name: rr::Name) -> Result { + async fn lookup_soa(&self, name: rr::Name) -> ResolveResult { TokioAsyncResolver::soa_lookup(self, name).await } - async fn lookup_ns(&self, name: rr::Name) -> Result { + async fn lookup_ns(&self, name: rr::Name) -> ResolveResult { TokioAsyncResolver::ns_lookup(self, name).await } } @@ -65,8 +61,8 @@ pub trait Backend: Clone { runtime: &Runtime, addr: SocketAddr, ) -> Result; - fn open_resolver(&mut self, addr: SocketAddr) -> Result; - fn open_system_resolver(&mut self) -> Result; + fn open_resolver(&mut self, addr: SocketAddr) -> Self::Resolver; + fn open_system_resolver(&mut self) -> ResolveResult; } #[derive(Debug, Clone)] @@ -89,11 +85,11 @@ impl Backend for TcpBackend { Ok(client) } - fn open_resolver(&mut self, addr: SocketAddr) -> Result { + fn open_resolver(&mut self, addr: SocketAddr) -> Self::Resolver { make_resolver(addr, Protocol::Tcp) } - fn open_system_resolver(&mut self) -> Result { + fn open_system_resolver(&mut self) -> ResolveResult { TokioAsyncResolver::tokio_from_system_conf() } } @@ -117,22 +113,23 @@ impl Backend for UdpBackend { Ok(client) } - fn open_resolver(&mut self, addr: SocketAddr) -> Result { + fn open_resolver(&mut self, addr: SocketAddr) -> Self::Resolver { make_resolver(addr, Protocol::Udp) } - fn open_system_resolver(&mut self) -> Result { + fn open_system_resolver(&mut self) -> ResolveResult { TokioAsyncResolver::tokio_from_system_conf() } } -fn make_resolver(addr: SocketAddr, protocol: Protocol) -> Result { +fn make_resolver(addr: SocketAddr, protocol: Protocol) -> TokioAsyncResolver { let mut config = ResolverConfig::new(); config.add_name_server(NameServerConfig { socket_addr: addr, protocol, tls_dns_name: None, - trust_nx_responses: true, + trust_negative_responses: true, + bind_addr: None, }); TokioAsyncResolver::tokio(config, ResolverOpts::default()) } diff --git a/src/bin/tdns.rs b/src/bin/tdns.rs index 9e21ea3..a39be5b 100644 --- a/src/bin/tdns.rs +++ b/src/bin/tdns.rs @@ -302,7 +302,7 @@ fn open_resolver( addr: Option, ) -> Result { if let Some(addr) = addr { - Ok(dns.open_resolver(addr)?) + Ok(dns.open_resolver(addr)) } else { Ok(dns.open_system_resolver()?) } diff --git a/src/query.rs b/src/query.rs index ff5684f..7317c41 100644 --- a/src/query.rs +++ b/src/query.rs @@ -8,9 +8,9 @@ use chrono::DateTime; use data_encoding::{Encoding, BASE32, BASE64, HEXLOWER}; use futures::stream::{FuturesUnordered, Stream}; +use trust_dns_client::proto::rr::dnssec::Nsec3HashAlgorithm; use trust_dns_client::rr::{ self, - dnssec::Nsec3HashAlgorithm, rdata::{self, caa, DNSSECRData}, }; use trust_dns_resolver::error::ResolveError; @@ -241,9 +241,7 @@ impl<'a> fmt::Display for DisplayRData<'a> { } } // TODO: What to do with records that have no specified presentation? - NULL(_) | OPT(_) | Unknown { .. } | ZERO | HINFO(_) | HTTPS(_) | SVCB(_) => { - write!(f, "{:?}", self.0)? - } + _ => write!(f, "{:?}", self.0)?, } Ok(()) } @@ -368,11 +366,9 @@ impl<'a> fmt::Display for DisplayDNSSECRData<'a> { )?; } Unknown { rdata, .. } => { - // This is dubiuos, and I'm not sure how we can even end up here. - if let Some(data) = rdata.anything() { - write!(f, "{}", DisplayEncoded(&BASE64, data))?; - } + write!(f, "{}", DisplayEncoded(&BASE64, rdata.anything()))?; } + _ => todo!(), } Ok(()) } @@ -443,18 +439,22 @@ pub fn write_record( ) -> io::Result<()> { match format { DisplayFormat::Short => { - write!(writer, "{}", DisplayRData(record.rdata()))?; + if let Some(rdata) = record.data() { + write!(writer, "{}", DisplayRData(rdata))?; + } } DisplayFormat::Zone => { write!( writer, - "{} {} {} {} {}", + "{} {} {} {}", record.name(), record.ttl(), record.dns_class(), record.record_type(), - DisplayRData(record.rdata()), )?; + if let Some(rdata) = record.data() { + write!(writer, " {}", DisplayRData(rdata))?; + } } } Ok(()) diff --git a/src/record.rs b/src/record.rs index 862e579..c82a330 100644 --- a/src/record.rs +++ b/src/record.rs @@ -115,8 +115,10 @@ impl<'a> Iterator for RsDataIter<'a> { fn next(&mut self) -> Option { use RsDataIterInner::*; match &mut self.0 { - A(iter) => iter.next().map(|item| rr::RData::A(*item)), - AAAA(iter) => iter.next().map(|item| rr::RData::AAAA(*item)), + A(iter) => iter.next().map(|item| rr::RData::A(rr::rdata::A(*item))), + AAAA(iter) => iter + .next() + .map(|item| rr::RData::AAAA(rr::rdata::AAAA(*item))), TXT(iter) => iter .next() .map(|item| rr::RData::TXT(rdata::TXT::new(vec![item.into()]))), @@ -290,22 +292,20 @@ impl TryFrom<&[rr::Record]> for RecordSet { 0 => Err(TryFromRecordsError::Empty), 1 => { let key = keys.iter().next().unwrap(); - // TODO: I'm not sure if `trust-dns` actually guarantees that - // these `unwrap` calls never panic, but I'd guess so. I should - // study its code and submit a documentation patch to clarify - // behavior in either case. let data = match key.record_type { - rr::RecordType::A => { - RsData::A(rrs.iter().map(|rr| *rr.rdata().as_a().unwrap()).collect()) - } + rr::RecordType::A => RsData::A( + rrs.iter() + .filter_map(|rr| Some(rr.data()?.as_a()?.0)) + .collect(), + ), rr::RecordType::AAAA => RsData::AAAA( rrs.iter() - .map(|rr| *rr.rdata().as_aaaa().unwrap()) + .filter_map(|rr| Some(rr.data()?.as_aaaa()?.0)) .collect(), ), rr::RecordType::TXT => RsData::TXT( rrs.iter() - .map(|rr| txt_string(rr.rdata().as_txt().unwrap())) + .filter_map(|rr| Some(txt_string(rr.data()?.as_txt()?))) .collect::>()?, ), rtype => return Err(TryFromRecordsError::UnsupportedType(rtype)), diff --git a/src/update.rs b/src/update.rs index 891b5ca..0ce4095 100644 --- a/src/update.rs +++ b/src/update.rs @@ -181,8 +181,8 @@ where return Err(anyhow!("SOA record for {} not found", options.zone)); }; let mut server = dns.open(runtime, master).await?; - // TODO: probably should check response - server.send(message).await?; + // TODO: probably should check responses + let _reponses: Vec<_> = server.send(message).try_collect().await?; Ok(()) } @@ -219,7 +219,7 @@ async fn poll_for_update( options: Rc, ) -> anyhow::Result<()> where - I: IntoIterator, + I: IntoIterator, D: Backend, { let results: FuturesUnordered<_> = authorative @@ -229,7 +229,7 @@ where runtime, dns.clone(), resolver.clone(), - server_name, + server_name.0, Rc::clone(&options), ) }) @@ -262,17 +262,21 @@ where let options = Rc::clone(&options); let query = options.get_query(); loop { - if let Ok(response) = server + if let Ok(responses) = server .lookup(query.clone(), DnsRequestOptions::default()) + .try_collect::>() .await { - let answers = response.answers(); - let hit = options.expectation.satisfied_by(answers); + let answers: Vec<_> = responses + .into_iter() + .flat_map(|response| response.into_message().take_answers()) + .collect(); + let hit = options.expectation.satisfied_by(&answers); if options.verbose { if hit { println!("{}: match found", &server_name); } else { - let rset = match RecordSet::try_from(answers) { + let rset = match RecordSet::try_from(&answers[..]) { Ok(rs) => format!("{}", rs.data()), Err(e) => format!("{}", e), }; diff --git a/src/update_message.rs b/src/update_message.rs index 2881574..1038e09 100644 --- a/src/update_message.rs +++ b/src/update_message.rs @@ -1,6 +1,6 @@ use trust_dns_client::{ op::{Message, MessageType, OpCode, Query, UpdateMessage}, - rr::{rdata::NULL, DNSClass, Name, RData, Record, RecordSet, RecordType}, + rr::{DNSClass, Name, Record, RecordSet, RecordType}, }; // This code is taken from `update_message.rs` in the `trust_dns` crate, and @@ -110,7 +110,7 @@ pub fn delete_rrset(mut record: Record, zone_origin: Name) -> Message { // the TTL should be 0 record.set_ttl(0); // the rdata must be null to delete all rrsets - record.set_rdata(RData::NULL(NULL::new())); + record.set_data(None); message.add_update(record); message diff --git a/src/util.rs b/src/util.rs index 7e43c80..b779c8e 100644 --- a/src/util.rs +++ b/src/util.rs @@ -42,7 +42,7 @@ impl SocketName { Ok(SocketAddr::new(ip, port)) } else { Err(ResolveErrorKind::NoRecordsFound { - query: lookup.query().clone(), + query: Box::new(lookup.query().clone()), soa: None, negative_ttl: None, response_code: ResponseCode::NXDomain, diff --git a/tests/mock/mod.rs b/tests/mock/mod.rs index dad5fa9..e437e84 100644 --- a/tests/mock/mod.rs +++ b/tests/mock/mod.rs @@ -7,9 +7,9 @@ use std::{ use anyhow::anyhow; use async_trait::async_trait; -use futures::future; +use futures::{future, stream}; use trust_dns_client::{ - op::update_message::UpdateMessage, + op::UpdateMessage, proto::{ error::ProtoError, op::{Message, OpCode, Query}, @@ -29,6 +29,7 @@ use tdns_cli::{Backend, Resolver, Runtime}; pub type Handle = Arc>; pub type FutureResult = future::Ready>; +pub type ResultStream = stream::Once>; #[derive(Debug, Clone)] pub struct Zone(Vec); @@ -50,17 +51,20 @@ impl Zone { .iter_mut() .find(|r| r.record_type() == update.record_type() && r.name() == update.name()) { - record.set_rdata(update.rdata().clone()); + record.set_data(update.data().cloned()); } } } pub fn parse_rdata(rtype: &str, rdata: &str) -> anyhow::Result { - use rr::{rdata::SOA, RData}; + use rr::{ + rdata::{NS, SOA}, + RData, + }; match rtype { "A" => Ok(RData::A(rdata.parse()?)), "AAAA" => Ok(RData::AAAA(rdata.parse()?)), - "NS" => Ok(RData::NS(rdata.parse()?)), + "NS" => Ok(RData::NS(NS(rdata.parse()?))), "SOA" => { let parts: Vec<_> = rdata.split(' ').collect(); // This quite ugly -- is there a better way? @@ -146,8 +150,8 @@ impl Backend for MockBackend { ) -> Result { Ok(self.open_client(addr)) } - fn open_resolver(&mut self, addr: SocketAddr) -> Result { - Ok(self.open_client(addr)) + fn open_resolver(&mut self, addr: SocketAddr) -> Self::Resolver { + self.open_client(addr) } fn open_system_resolver(&mut self) -> Result { if let Some(addr) = self.resolv_conf { @@ -198,14 +202,14 @@ impl Server { message.add_answer(record); } } - Ok(message.into()) + DnsResponse::from_message(message) } OpCode::Update => { let mut zone = self.zone.lock().unwrap(); for update in request.updates() { zone.update(update); } - Ok(Message::new().into()) + DnsResponse::from_message(Message::new()) } _ => unimplemented!(), } @@ -214,11 +218,11 @@ impl Server { impl DnsHandle for Client { type Error = ProtoError; - type Response = FutureResult; + type Response = ResultStream; fn send>(&mut self, request: R) -> Self::Response { let mut server = self.0.lock().unwrap(); - future::ready(server.request(request.into())) + stream::once(future::ready(server.request(request.into()))) } } From b6e7a80ae6a05ffc29d67db21f4f74d327529e94 Mon Sep 17 00:00:00 2001 From: Andreas Rottmann Date: Fri, 6 Sep 2024 16:52:09 +0200 Subject: [PATCH 2/2] Migrate to hickory-dns --- Cargo.lock | 193 ++++++++++++++++-------------------------- Cargo.toml | 4 +- src/backend.rs | 8 +- src/bin/tdns.rs | 4 +- src/query.rs | 6 +- src/record.rs | 2 +- src/tsig.rs | 8 +- src/update.rs | 8 +- src/update_message.rs | 4 +- src/util.rs | 4 +- tests/mock/mod.rs | 6 +- tests/smoke.rs | 2 +- 12 files changed, 103 insertions(+), 146 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f8fc70f..80b3133 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -360,6 +360,71 @@ dependencies = [ "libc", ] +[[package]] +name = "hickory-client" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "156579a5cd8d1fc6f0df87cc21b6ee870db978a163a1ba484acd98a4eff5a6de" +dependencies = [ + "cfg-if", + "data-encoding", + "futures-channel", + "futures-util", + "hickory-proto", + "once_cell", + "radix_trie", + "rand", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "hickory-proto" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand", + "ring", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "hmac" version = "0.12.1" @@ -474,16 +539,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.1.0" @@ -774,17 +829,16 @@ checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "ring" -version = "0.16.20" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", + "cfg-if", + "getrandom", "libc", - "once_cell", - "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -887,12 +941,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -978,14 +1026,14 @@ dependencies = [ "data-encoding", "digest", "futures", + "hickory-client", + "hickory-resolver", "hmac", "once_cell", "rand", "sha2", "structopt", "tokio", - "trust-dns-client", - "trust-dns-resolver", ] [[package]] @@ -1101,99 +1149,18 @@ dependencies = [ "once_cell", ] -[[package]] -name = "trust-dns-client" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14135e72c7e6d4c9b6902d4437881a8598f0145dbb2e3f86f92dbad845b61e63" -dependencies = [ - "cfg-if", - "data-encoding", - "futures-channel", - "futures-util", - "once_cell", - "radix_trie", - "rand", - "thiserror", - "tokio", - "tracing", - "trust-dns-proto", -] - -[[package]] -name = "trust-dns-proto" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand", - "ring", - "smallvec", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[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", - "smallvec", - "thiserror", - "tokio", - "tracing", - "trust-dns-proto", -] - [[package]] name = "typenum" version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" -[[package]] -name = "unicode-bidi" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" - [[package]] name = "unicode-ident" version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" -[[package]] -name = "unicode-normalization" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" -dependencies = [ - "tinyvec", -] - [[package]] name = "unicode-segmentation" version = "1.12.0" @@ -1208,9 +1175,9 @@ checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" @@ -1219,7 +1186,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", - "idna 1.1.0", + "idna", "percent-encoding", "serde", ] @@ -1293,16 +1260,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "web-sys" -version = "0.3.88" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d6bb20ed2d9572df8584f6dc81d68a41a625cadc6f15999d649a70ce7e3597a" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - [[package]] name = "widestring" version = "1.2.1" diff --git a/Cargo.toml b/Cargo.toml index e8e7218..1b98da7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,8 +16,8 @@ maintenance = { status = "actively-developed" } [dependencies] async-trait = "0.1.57" -trust-dns-client = { version = "0.23.2", features = ["dnssec-ring"] } -trust-dns-resolver = "0.23.2" +hickory-client = { version = "0.24.1", features = ["dnssec-ring"] } +hickory-resolver = "0.24.1" structopt = "0.3.1" futures = "0.3.1" anyhow = "1.0" diff --git a/src/backend.rs b/src/backend.rs index 51d2fae..7fa3b09 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -2,20 +2,20 @@ use std::net::SocketAddr; use async_trait::async_trait; -use tokio::net::{TcpStream, UdpSocket}; -use trust_dns_client::{ +use hickory_client::{ client::{AsyncClient, ClientFuture, ClientHandle}, rr, tcp::TcpClientStream, udp::UdpClientStream, }; -use trust_dns_resolver::{ +use hickory_resolver::{ config::{NameServerConfig, Protocol, ResolverConfig, ResolverOpts}, error::{ResolveError, ResolveResult}, lookup, lookup_ip, proto::error::ProtoError, TokioAsyncResolver, }; +use tokio::net::{TcpStream, UdpSocket}; pub use tokio::runtime::Runtime; @@ -78,7 +78,7 @@ impl Backend for TcpBackend { runtime: &Runtime, addr: SocketAddr, ) -> Result { - use trust_dns_resolver::proto::iocompat::AsyncIoTokioAsStd; + use hickory_resolver::proto::iocompat::AsyncIoTokioAsStd; let (stream, sender) = TcpClientStream::>::new(addr); let (client, bg) = AsyncClient::new(Box::new(stream), sender, None).await?; runtime.spawn(bg); diff --git a/src/bin/tdns.rs b/src/bin/tdns.rs index a39be5b..93a343a 100644 --- a/src/bin/tdns.rs +++ b/src/bin/tdns.rs @@ -11,10 +11,10 @@ use std::{ use anyhow::anyhow; use data_encoding::BASE64; use futures::{future, StreamExt}; +use hickory_client::{proto::error::ProtoError, rr}; +use hickory_resolver::error::{ResolveError, ResolveErrorKind}; use structopt::StructOpt; use tokio::runtime::Runtime; -use trust_dns_client::{proto::error::ProtoError, rr}; -use trust_dns_resolver::error::{ResolveError, ResolveErrorKind}; use tdns_cli::{ query::{self, perform_query, Query}, diff --git a/src/query.rs b/src/query.rs index 7317c41..5d5282b 100644 --- a/src/query.rs +++ b/src/query.rs @@ -8,12 +8,12 @@ use chrono::DateTime; use data_encoding::{Encoding, BASE32, BASE64, HEXLOWER}; use futures::stream::{FuturesUnordered, Stream}; -use trust_dns_client::proto::rr::dnssec::Nsec3HashAlgorithm; -use trust_dns_client::rr::{ +use hickory_client::proto::rr::dnssec::Nsec3HashAlgorithm; +use hickory_client::rr::{ self, rdata::{self, caa, DNSSECRData}, }; -use trust_dns_resolver::error::ResolveError; +use hickory_resolver::error::ResolveError; use crate::Resolver; diff --git a/src/record.rs b/src/record.rs index c82a330..73b0bb7 100644 --- a/src/record.rs +++ b/src/record.rs @@ -7,7 +7,7 @@ use std::{ string::FromUtf8Error, }; -use trust_dns_client::rr::{self, rdata}; +use hickory_client::rr::{self, rdata}; /// This is a representation of the record set as described in RFC 2136. /// diff --git a/src/tsig.rs b/src/tsig.rs index 806b551..0c32e98 100644 --- a/src/tsig.rs +++ b/src/tsig.rs @@ -6,14 +6,14 @@ use std::{ }; use digest::KeyInit; -use hmac::{Hmac, Mac}; -use once_cell::sync::Lazy; -use trust_dns_client::{ +use hickory_client::{ op, proto::error::{ProtoError, ProtoResult}, rr, serialize::binary::{BinEncodable, BinEncoder}, }; +use hmac::{Hmac, Mac}; +use once_cell::sync::Lazy; #[derive(Debug)] pub enum Error { @@ -198,7 +198,7 @@ impl TryFrom for rr::RData { encoder.set_canonical_names(true); tsig.emit(&mut encoder)?; Ok(rr::RData::Unknown { - code: 250, + code: rr::RecordType::Unknown(250), rdata: rr::rdata::null::NULL::with(encoded), }) } diff --git a/src/update.rs b/src/update.rs index 0ce4095..bef3c49 100644 --- a/src/update.rs +++ b/src/update.rs @@ -8,12 +8,12 @@ use std::{ use anyhow::anyhow; use futures::stream::{FuturesUnordered, TryStreamExt}; -use tokio::time::{sleep, timeout}; -use trust_dns_client::{ +use hickory_client::{ op::{Message, Query}, proto::xfer::{DnsHandle, DnsRequestOptions}, rr, }; +use tokio::time::{sleep, timeout}; use crate::{ record::{RecordSet, RsData}, @@ -180,7 +180,7 @@ where } else { return Err(anyhow!("SOA record for {} not found", options.zone)); }; - let mut server = dns.open(runtime, master).await?; + let server = dns.open(runtime, master).await?; // TODO: probably should check responses let _reponses: Vec<_> = server.send(message).try_collect().await?; Ok(()) @@ -257,7 +257,7 @@ where if options.exclude.contains(&ip) { return Ok(()); } - let mut server = dns.open(runtime, SocketAddr::new(ip, 53)).await?; + let server = dns.open(runtime, SocketAddr::new(ip, 53)).await?; let server_name = server_name.clone(); let options = Rc::clone(&options); let query = options.get_query(); diff --git a/src/update_message.rs b/src/update_message.rs index 1038e09..ee72bf1 100644 --- a/src/update_message.rs +++ b/src/update_message.rs @@ -1,9 +1,9 @@ -use trust_dns_client::{ +use hickory_client::{ op::{Message, MessageType, OpCode, Query, UpdateMessage}, rr::{DNSClass, Name, Record, RecordSet, RecordType}, }; -// This code is taken from `update_message.rs` in the `trust_dns` crate, and +// This code is taken from `update_message.rs` in the `hickory` crate, and // adapted to omit EDNS. pub fn create(rrset: RecordSet, zone_origin: Name) -> Message { // TODO: assert non-empty rrset? diff --git a/src/util.rs b/src/util.rs index b779c8e..1685c96 100644 --- a/src/util.rs +++ b/src/util.rs @@ -5,8 +5,8 @@ use std::{ str::FromStr, }; -use trust_dns_client::{op::ResponseCode, proto::error::ProtoError, rr}; -use trust_dns_resolver::error::{ResolveError, ResolveErrorKind}; +use hickory_client::{op::ResponseCode, proto::error::ProtoError, rr}; +use hickory_resolver::error::{ResolveError, ResolveErrorKind}; use crate::Resolver; diff --git a/tests/mock/mod.rs b/tests/mock/mod.rs index e437e84..00d6df7 100644 --- a/tests/mock/mod.rs +++ b/tests/mock/mod.rs @@ -8,7 +8,7 @@ use std::{ use anyhow::anyhow; use async_trait::async_trait; use futures::{future, stream}; -use trust_dns_client::{ +use hickory_client::{ op::UpdateMessage, proto::{ error::ProtoError, @@ -18,7 +18,7 @@ use trust_dns_client::{ DnsHandle, }, }; -use trust_dns_resolver::{ +use hickory_resolver::{ error::{ResolveError, ResolveErrorKind}, lookup, lookup::Lookup, @@ -220,7 +220,7 @@ impl DnsHandle for Client { type Error = ProtoError; type Response = ResultStream; - fn send>(&mut self, request: R) -> Self::Response { + fn send>(&self, request: R) -> Self::Response { let mut server = self.0.lock().unwrap(); stream::once(future::ready(server.request(request.into()))) } diff --git a/tests/smoke.rs b/tests/smoke.rs index d78b4cb..a6b1587 100644 --- a/tests/smoke.rs +++ b/tests/smoke.rs @@ -1,13 +1,13 @@ use std::{pin::Pin, time::Duration}; use futures::{prelude::*, stream::FuturesUnordered}; +use hickory_client::rr; use tdns_cli::{ record::RecordSet, update::{monitor_update, perform_update, Expectation, Monitor, Operation, Update}, Backend, }; use tokio::{runtime::Runtime, time::sleep}; -use trust_dns_client::rr; mod mock; use mock::{parse_rdata, MockBackend, ZoneEntries};