From e26ae062d6c7c8c65dfc43726d16963f7c80237f Mon Sep 17 00:00:00 2001 From: Edu4rdSHL Date: Sun, 13 Feb 2022 07:31:06 -0500 Subject: [PATCH 01/19] Avoid allocating domain_data everytime as it has the Clone trait. Signed-off-by: Edu4rdSHL --- src/dnslib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/dnslib.rs b/src/dnslib.rs index 899c883..292f9cd 100644 --- a/src/dnslib.rs +++ b/src/dnslib.rs @@ -72,9 +72,9 @@ pub async fn return_hosts_data( trustable_resolver.ipv4_lookup(host.trim_end_matches('.').to_owned() + "."); let wildcard_ips = wildcard_ips.clone(); - async move { - let mut domain_data = DomainData::default(); + let mut domain_data = DomainData::default(); + async move { if let Ok(ip) = resolver_fut.await { if disable_double_check { domain_data.ipv4_addresses = ip From 8620eded169ffe9ccee650f68cc7ee2d0969fd64 Mon Sep 17 00:00:00 2001 From: Edu4rdSHL Date: Sun, 13 Feb 2022 12:10:12 -0500 Subject: [PATCH 02/19] Use our custom trust-dns implementation until https://github.com/bluejekyll/trust-dns/pull/1632 is decided. Signed-off-by: Edu4rdSHL --- Cargo.lock | 9 ++++----- Cargo.toml | 5 ++++- src/main.rs | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f7d347..726c640 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -505,7 +505,7 @@ dependencies = [ [[package]] name = "rusolver" -version = "0.9.0" +version = "0.9.1" dependencies = [ "clap", "futures", @@ -646,8 +646,7 @@ dependencies = [ [[package]] name = "trust-dns-proto" version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca94d4e9feb6a181c690c4040d7a24ef34018d8313ac5044a61d21222ae24e31" +source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f05c9a33b59a932b0b2aea115cedd14cc3958b5f" dependencies = [ "async-trait", "cfg-if", @@ -671,8 +670,7 @@ dependencies = [ [[package]] name = "trust-dns-resolver" version = "0.20.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecae383baad9995efaa34ce8e57d12c3f305e545887472a492b838f4b5cfb77a" +source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f05c9a33b59a932b0b2aea115cedd14cc3958b5f" dependencies = [ "cfg-if", "futures-util", @@ -681,6 +679,7 @@ dependencies = [ "log", "lru-cache", "parking_lot", + "rand", "resolv-conf", "smallvec", "thiserror", diff --git a/Cargo.toml b/Cargo.toml index 2f0dba9..5bedbd5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rusolver" -version = "0.9.0" +version = "0.9.1" authors = ["Eduard Tolosa "] edition = "2018" description = "Fast DNS resolver written in Rust." @@ -19,6 +19,9 @@ trust-dns-resolver = "0.20.4" clap = "2.33.4" rand = "0.8.4" +# https://github.com/bluejekyll/trust-dns/pull/1632 +[patch.crates-io] +trust-dns-resolver = { git = "https://github.com/Findomain/trust-dns", package = "trust-dns-resolver", branch = "custombranch" } [profile.release] lto = true diff --git a/src/main.rs b/src/main.rs index 53ca1ec..c948c0c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -90,6 +90,7 @@ async fn main() -> Result<(), Box> { attempts: retries, ip_strategy: LookupIpStrategy::Ipv4Only, num_concurrent_reqs: 1, + shuffle_dns_servers: true, ..Default::default() }; From 42dbf01d763b4a66a687f56d5869cc7ea92a5b07 Mon Sep 17 00:00:00 2001 From: Edu4rdSHL Date: Sun, 13 Feb 2022 12:14:04 -0500 Subject: [PATCH 03/19] Bump manpage. Signed-off-by: Edu4rdSHL --- rusolver.1 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rusolver.1 b/rusolver.1 index 955d0a3..7cbc764 100644 --- a/rusolver.1 +++ b/rusolver.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. -.TH RUSOLVER "1" "February 2022" "Rusolver 0.9.0" "User Commands" +.TH RUSOLVER "1" "February 2022" "Rusolver 0.9.1" "User Commands" .SH NAME -Rusolver \- manual page for Rusolver 0.9.0 +Rusolver \- manual page for Rusolver 0.9.1 .SH DESCRIPTION -Rusolver 0.9.0 +Rusolver 0.9.1 Eduard Tolosa Fast DNS resolver written in Rust. .SS "USAGE:" From 06ea060de914b5d1f6c236c3e8c636f1faa95244 Mon Sep 17 00:00:00 2001 From: Edu4rdSHL Date: Sun, 13 Feb 2022 14:27:25 -0500 Subject: [PATCH 04/19] Update custom trust-dns-resolver branch. Signed-off-by: Edu4rdSHL --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 726c640..b5858c2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -646,7 +646,7 @@ dependencies = [ [[package]] name = "trust-dns-proto" version = "0.20.4" -source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f05c9a33b59a932b0b2aea115cedd14cc3958b5f" +source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f339a5e806bed9109ad205d2143d8b18701d2ab0" dependencies = [ "async-trait", "cfg-if", @@ -670,7 +670,7 @@ dependencies = [ [[package]] name = "trust-dns-resolver" version = "0.20.4" -source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f05c9a33b59a932b0b2aea115cedd14cc3958b5f" +source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f339a5e806bed9109ad205d2143d8b18701d2ab0" dependencies = [ "cfg-if", "futures-util", From 624a3febb9544627ad11d553714438e8e77544cf Mon Sep 17 00:00:00 2001 From: Edu4rdSHL Date: Wed, 9 Mar 2022 22:52:06 -0500 Subject: [PATCH 05/19] Add function to return CNAME data. Signed-off-by: Edu4rdSHL --- src/dnslib.rs | 66 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/src/dnslib.rs b/src/dnslib.rs index 292f9cd..b2ea2dc 100644 --- a/src/dnslib.rs +++ b/src/dnslib.rs @@ -1,3 +1,5 @@ +use trust_dns_resolver::proto::{rr::RecordType, xfer::DnsRequestOptions}; + use { crate::structs::DomainData, futures::stream::{self, StreamExt}, @@ -53,7 +55,7 @@ pub fn return_tokio_asyncresolver( #[allow(clippy::too_many_arguments)] pub async fn return_hosts_data( hosts: HashSet, - resolvers: AsyncResolver>, + resolver: AsyncResolver>, trustable_resolver: AsyncResolver>, wildcard_ips: HashSet, disable_double_check: bool, @@ -67,7 +69,7 @@ pub async fn return_hosts_data( stream::iter(hosts) .map(|host| { - let resolver_fut = resolvers.ipv4_lookup(host.trim_end_matches('.').to_owned() + "."); + let resolver_fut = resolver.ipv4_lookup(host.trim_end_matches('.').to_owned() + "."); let trustable_resolver_fut = trustable_resolver.ipv4_lookup(host.trim_end_matches('.').to_owned() + "."); let wildcard_ips = wildcard_ips.clone(); @@ -108,3 +110,63 @@ pub async fn return_hosts_data( .collect::>() .await } + +// Used internally for now +pub async fn return_cname_data( + hosts: HashSet, + resolver: AsyncResolver>, + trustable_resolver: AsyncResolver>, + disable_double_check: bool, + mut threads: usize, +) -> HashMap { + if hosts.len() < threads { + threads = hosts.len(); + } + + let request_options = DnsRequestOptions::default(); + let record_type = RecordType::CNAME; + + stream::iter(hosts) + .map(|host| { + let resolver_fut = resolver.lookup( + host.trim_end_matches('.').to_owned() + ".", + record_type, + request_options, + ); + let trustable_resolver_fut = trustable_resolver.lookup( + host.trim_end_matches('.').to_owned() + ".", + record_type, + request_options, + ); + + let mut domain_data = DomainData::default(); + + async move { + if let Ok(lookup) = resolver_fut.await { + if disable_double_check { + domain_data.cname = lookup + .iter() + .filter_map(|rdata| rdata.as_cname()) + .map(|name| { + let name = name.to_string(); + name[..name.len() - 1].to_owned() + }) + .collect(); + } else if let Ok(lookup) = trustable_resolver_fut.await { + domain_data.cname = lookup + .iter() + .filter_map(|rdata| rdata.as_cname()) + .map(|name| { + let name = name.to_string(); + name[..name.len() - 1].to_owned() + }) + .collect(); + } + } + (host, domain_data) + } + }) + .buffer_unordered(threads) + .collect::>() + .await +} From 88ee0f9b58ea89e6affb02f81c11b75983f1a497 Mon Sep 17 00:00:00 2001 From: Edu4rdSHL Date: Fri, 11 Mar 2022 15:32:21 -0500 Subject: [PATCH 06/19] Update builder.sh Signed-off-by: Edu4rdSHL --- builder.sh | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/builder.sh b/builder.sh index f3030bc..91c0f70 100755 --- a/builder.sh +++ b/builder.sh @@ -10,6 +10,14 @@ AARCH_TARGET="aarch64-unknown-linux-gnu" OSX_TARGET="x86_64-apple-darwin" MANPAGE_DIR="./$NAME.1" +if ! systemctl is-active docker >/dev/null 2>&1; then + echo "Docker is not running. Starting docker." + if ! sudo systemctl start docker; then + echo "Failed to start docker." + exit 1 + fi +fi + # Linux build echo "Building Linux artifact." if cargo build -q --release --target="$LINUX_TARGET"; then @@ -87,18 +95,9 @@ else echo "Please install the help2man package." fi -#if command -v git >/dev/null; then -# git add . -# git commit -m "Bump version." -# git push -#fi - -#echo "Uploading crate to crates.io..." -#if cargo publish --no-verify > /dev/null; then -# echo "Crate uploaded." -#else -# echo "An error has occurred while uploading the crate to crates.io." -# exit -#fi - -echo "All builds have passed!" +# Stop docker +echo "Stopping docker." +if ! sudo systemctl stop docker; then + echo "Failed to stop docker." + exit 1 +fi From 7755533e1efec0e12a98f7fcf8a7494d3062d032 Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Tue, 12 Apr 2022 05:46:39 -0500 Subject: [PATCH 07/19] Create make-release.yml --- .github/workflows/make-release.yml | 128 +++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 .github/workflows/make-release.yml diff --git a/.github/workflows/make-release.yml b/.github/workflows/make-release.yml new file mode 100644 index 0000000..f1e0877 --- /dev/null +++ b/.github/workflows/make-release.yml @@ -0,0 +1,128 @@ +name: Create and upload artifacts + +on: + workflow_dispatch: + +jobs: + build-nix: + env: + IN_PIPELINE: true + runs-on: ${{ matrix.os }} + strategy: + matrix: + type: [ubuntu-x64, ubuntu-x86, armv7, aarch64] + include: + - type: ubuntu-x64 + os: ubuntu-latest + target: x86_64-unknown-linux-musl + name: rusolver-linux + path: target/x86_64-unknown-linux-musl/release/rusolver + pkg_config_path: /usr/lib/x86_64-linux-gnu/pkgconfig + - type: ubuntu-x86 + os: ubuntu-latest + target: i686-unknown-linux-musl + name: rusolver-linux-i386 + path: target/i686-unknown-linux-musl/release/rusolver + pkg_config_path: /usr/lib/i686-linux-gnu/pkgconfig + - type: armv7 + os: ubuntu-latest + target: armv7-unknown-linux-gnueabihf + name: rusolver-armv7 + path: target/armv7-unknown-linux-gnueabihf/release/rusolver + pkg_config_path: /usr/lib/x86_64-linux-gnu/pkgconfig + - type: aarch64 + os: ubuntu-latest + target: aarch64-unknown-linux-gnu + name: rusolver-aarch64 + path: target/aarch64-unknown-linux-gnu/release/rusolver + pkg_config_path: /usr/lib/x86_64-linux-gnu/pkgconfig + steps: + - uses: actions/checkout@v2 + - name: Install System Dependencies + run: | + env + sudo apt-get update + sudo apt-get install -y --no-install-recommends libssl-dev pkg-config gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: ${{ matrix.target }} + override: true + - uses: actions-rs/cargo@v1 + env: + PKG_CONFIG_PATH: ${{ matrix.pkg_config_path }} + OPENSSL_DIR: /usr/lib/ssl + with: + use-cross: true + command: build + args: --release --target=${{ matrix.target }} + - name: Strip symbols from binary + run: | + strip -s ${{ matrix.path }} || arm-linux-gnueabihf-strip -s ${{ matrix.path }} || aarch64-linux-gnu-strip -s ${{ matrix.path }} + - uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.name }} + path: ${{ matrix.path }} + + build-macos: + env: + IN_PIPELINE: true + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: x86_64-apple-darwin + override: true + - uses: actions-rs/cargo@v1 + with: + use-cross: true + command: build + args: --release --target=x86_64-apple-darwin + - name: Strip symbols from binary + run: | + strip -u -r target/x86_64-apple-darwin/release/rusolver + - uses: actions/upload-artifact@v2 + with: + name: rusolver-osx + path: target/x86_64-apple-darwin/release/rusolver + - uses: actions/upload-artifact@v2 + with: + name: rusolver-osx + path: rusolver-osx + + build-windows: + env: + IN_PIPELINE: true + runs-on: ${{ matrix.os }} + strategy: + matrix: + type: [windows-x64, windows-x86] + include: + - type: windows-x64 + os: windows-latest + target: x86_64-pc-windows-msvc + name: rusolver-windows.exe + path: target\x86_64-pc-windows-msvc\release\rusolver.exe + - type: windows-x86 + os: windows-latest + target: i686-pc-windows-msvc + name: rusolver-windows-i686.exe + path: target\i686-pc-windows-msvc\release\rusolver.exe + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + target: ${{ matrix.target }} + override: true + - uses: actions-rs/cargo@v1 + with: + use-cross: true + command: build + args: --release --target=${{ matrix.target }} + - uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.name }} + path: ${{ matrix.path }} From cf75cafee7c9d0c257c0b5a361441efc4e247e9c Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Fri, 29 Apr 2022 12:08:48 -0500 Subject: [PATCH 08/19] Use LibOptions for library options. Signed-off-by: Eduard Tolosa --- src/dnslib.rs | 160 ++++++++++++++++++++++--------------------------- src/main.rs | 19 +++--- src/structs.rs | 21 ++++++- 3 files changed, 102 insertions(+), 98 deletions(-) diff --git a/src/dnslib.rs b/src/dnslib.rs index b2ea2dc..93345c8 100644 --- a/src/dnslib.rs +++ b/src/dnslib.rs @@ -1,17 +1,15 @@ -use trust_dns_resolver::proto::{rr::RecordType, xfer::DnsRequestOptions}; - use { - crate::structs::DomainData, + crate::structs::{DomainData, LibOptions}, futures::stream::{self, StreamExt}, - std::collections::{HashMap, HashSet}, - trust_dns_resolver::config::ResolverOpts, -}; - -use { - std::net::SocketAddr, + std::{ + collections::{HashMap, HashSet}, + net::SocketAddr, + }, trust_dns_resolver::{ - config::{NameServerConfig, NameServerConfigGroup, Protocol, ResolverConfig}, + config::{NameServerConfig, NameServerConfigGroup, Protocol, ResolverConfig, ResolverOpts}, + lookup::{Ipv4Lookup, Lookup}, name_server::{GenericConnection, GenericConnectionProvider, TokioRuntime}, + proto::{rr::RecordType, xfer::DnsRequestOptions}, AsyncResolver, TokioAsyncResolver, }, }; @@ -52,63 +50,58 @@ pub fn return_tokio_asyncresolver( .unwrap() } -#[allow(clippy::too_many_arguments)] -pub async fn return_hosts_data( - hosts: HashSet, - resolver: AsyncResolver>, - trustable_resolver: AsyncResolver>, - wildcard_ips: HashSet, - disable_double_check: bool, - mut threads: usize, - show_ip_addresses: bool, - quiet_flag: bool, -) -> HashMap { - if hosts.len() < threads { - threads = hosts.len(); - } +pub async fn return_hosts_data(options: &LibOptions) -> HashMap { + let threads = if options.hosts.len() < options.threads { + options.hosts.len() + } else { + options.threads + }; - stream::iter(hosts) - .map(|host| { - let resolver_fut = resolver.ipv4_lookup(host.trim_end_matches('.').to_owned() + "."); - let trustable_resolver_fut = - trustable_resolver.ipv4_lookup(host.trim_end_matches('.').to_owned() + "."); - let wildcard_ips = wildcard_ips.clone(); + stream::iter(options.hosts.clone().into_iter().map(|host| { + let lookup_host = host.trim_end_matches('.').to_owned() + "."; - let mut domain_data = DomainData::default(); + let resolver_fut = options.resolvers.ipv4_lookup(lookup_host.clone()); + let trustable_resolver_fut = options.trustable_resolver.ipv4_lookup(lookup_host); + let wildcard_ips = options.wildcard_ips.clone(); - async move { - if let Ok(ip) = resolver_fut.await { - if disable_double_check { - domain_data.ipv4_addresses = ip - .into_iter() - .map(|x| x.to_string()) - .collect::>(); - } else if let Ok(ip) = trustable_resolver_fut.await { - domain_data.ipv4_addresses = ip - .into_iter() - .map(|x| x.to_string()) - .collect::>(); - } + let mut domain_data = DomainData::default(); + + let mut ip_lookup = Option::::None; + + async move { + if let Ok(ip) = resolver_fut.await { + if options.disable_double_check { + ip_lookup = Some(ip); + } else if let Ok(ip) = trustable_resolver_fut.await { + ip_lookup = Some(ip); } - domain_data.is_wildcard = domain_data - .ipv4_addresses - .iter() - .all(|ip| wildcard_ips.contains(ip)); - - if !quiet_flag { - if show_ip_addresses && !domain_data.is_wildcard { - println!("{};{:?}", host, domain_data.ipv4_addresses); - } else if !domain_data.is_wildcard { - println!("{}", host) - } - } - - (host, domain_data) } - }) - .buffer_unordered(threads) - .collect::>() - .await + + if let Some(ip_lookup) = ip_lookup { + for ip in ip_lookup.iter() { + domain_data.ipv4_addresses.insert(ip.to_string()); + } + } + + domain_data.is_wildcard = domain_data + .ipv4_addresses + .iter() + .all(|ip| wildcard_ips.contains(ip)); + + if !options.quiet_flag { + if options.show_ip_address && !domain_data.is_wildcard { + println!("{};{:?}", host, domain_data.ipv4_addresses); + } else if !domain_data.is_wildcard { + println!("{}", host) + } + } + + (host, domain_data) + } + })) + .buffer_unordered(threads) + .collect::>() + .await } // Used internally for now @@ -128,41 +121,32 @@ pub async fn return_cname_data( stream::iter(hosts) .map(|host| { - let resolver_fut = resolver.lookup( - host.trim_end_matches('.').to_owned() + ".", - record_type, - request_options, - ); - let trustable_resolver_fut = trustable_resolver.lookup( - host.trim_end_matches('.').to_owned() + ".", - record_type, - request_options, - ); + let lookup_host = host.trim_end_matches('.').to_owned() + "."; + let resolver_fut = resolver.lookup(lookup_host.clone(), record_type, request_options); + let trustable_resolver_fut = + trustable_resolver.lookup(lookup_host, record_type, request_options); let mut domain_data = DomainData::default(); + let mut cname_lookup = Option::::None; + async move { if let Ok(lookup) = resolver_fut.await { if disable_double_check { - domain_data.cname = lookup - .iter() - .filter_map(|rdata| rdata.as_cname()) - .map(|name| { - let name = name.to_string(); - name[..name.len() - 1].to_owned() - }) - .collect(); + cname_lookup = Some(lookup); } else if let Ok(lookup) = trustable_resolver_fut.await { - domain_data.cname = lookup - .iter() - .filter_map(|rdata| rdata.as_cname()) - .map(|name| { - let name = name.to_string(); - name[..name.len() - 1].to_owned() - }) - .collect(); + cname_lookup = Some(lookup); } } + + if let Some(lookup) = cname_lookup { + for record in lookup.iter() { + if let Some(cname) = record.as_cname() { + domain_data.cname = cname.to_string(); + } + } + } + (host, domain_data) } }) diff --git a/src/main.rs b/src/main.rs index c948c0c..e785040 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use { clap::{value_t, App, Arg}, - rusolver::{dnslib, utils}, + rusolver::{dnslib, structs, utils}, std::collections::HashSet, tokio::{ self, @@ -9,7 +9,7 @@ use { trust_dns_resolver::config::{LookupIpStrategy, ResolverOpts}, }; -// Please add support for AAAA, TXT, SRV, NAPTR, PTR, CNAME, DNAME, MX, NS, SOA, LOC, SVCB, HTTPS, SPF, CAA and AVC resource records. +// WIP: add support for AAAA, TXT, SRV, NAPTR, PTR, CNAME, DNAME, MX, NS, SOA, LOC, SVCB, HTTPS, SPF, CAA and AVC resource records. // This could use a new command line option such as -t, e.g. echo www.example.com | rusolver -i -t AAAA. It might also make sense // to change -i/--ip to -d/--data with the text Display the record data. @@ -76,7 +76,7 @@ async fn main() -> Result<(), Box> { .get_matches(); // Assign values or use defaults - let show_ip_adress = matches.is_present("ip"); + let show_ip_address = matches.is_present("ip"); let threads = value_t!(matches.value_of("threads"), usize).unwrap_or_else(|_| 100); let timeout = value_t!(matches.value_of("timeout"), u64).unwrap_or_else(|_| 3); let retries = value_t!(matches.value_of("retries"), usize).unwrap_or_else(|_| 0); @@ -118,7 +118,7 @@ async fn main() -> Result<(), Box> { "84.200.70.40:53", ] .iter() - .map(|x| x.to_string()) + .map(ToString::to_string) .collect(); // Create resolvers @@ -152,17 +152,18 @@ async fn main() -> Result<(), Box> { buffer.lines().map(str::to_owned).collect() }; - dnslib::return_hosts_data( + let options = structs::LibOptions { hosts, resolvers, trustable_resolver, wildcard_ips, disable_double_check, threads, - show_ip_adress, - false, - ) - .await; + show_ip_address, + quiet_flag, + }; + + dnslib::return_hosts_data(&options).await; Ok(()) } diff --git a/src/structs.rs b/src/structs.rs index f281670..f408081 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -1,4 +1,10 @@ -use std::collections::HashSet; +use { + std::collections::HashSet, + trust_dns_resolver::{ + name_server::{GenericConnection, GenericConnectionProvider, TokioRuntime}, + AsyncResolver, + }, +}; #[derive(Clone, Debug)] pub struct DomainData { @@ -18,3 +24,16 @@ impl Default for DomainData { } } } + +#[derive(Clone, Debug)] +pub struct LibOptions { + pub hosts: HashSet, + pub resolvers: AsyncResolver>, + pub trustable_resolver: + AsyncResolver>, + pub wildcard_ips: HashSet, + pub disable_double_check: bool, + pub threads: usize, + pub show_ip_address: bool, + pub quiet_flag: bool, +} From 7e683bd1aec0a0f57da68211bf71e8bc41e9cadf Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sun, 20 Apr 2025 14:48:57 -0500 Subject: [PATCH 09/19] Clippy fixes. --- src/dnslib.rs | 3 ++- src/main.rs | 2 +- src/structs.rs | 13 +------------ src/utils.rs | 15 ++++++--------- 4 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/dnslib.rs b/src/dnslib.rs index 93345c8..8e4dd9f 100644 --- a/src/dnslib.rs +++ b/src/dnslib.rs @@ -14,6 +14,7 @@ use { }, }; +#[must_use] pub fn return_tokio_asyncresolver( nameserver_ips: HashSet, options: ResolverOpts, @@ -92,7 +93,7 @@ pub async fn return_hosts_data(options: &LibOptions) -> HashMap Result<(), Box> { wildcard_ips = utils::detect_wildcards(&domain, &trustable_resolver, quiet_flag).await; buffer .lines() - .map(|word| format!("{}.{}", word, domain)) + .map(|word| format!("{word}.{domain}")) .collect() } else { buffer.lines().map(str::to_owned).collect() diff --git a/src/structs.rs b/src/structs.rs index f408081..3da267b 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -6,7 +6,7 @@ use { }, }; -#[derive(Clone, Debug)] +#[derive(Clone, Debug, Default)] pub struct DomainData { pub ipv4_addresses: HashSet, pub ipv6_addresses: HashSet, @@ -14,17 +14,6 @@ pub struct DomainData { pub is_wildcard: bool, } -impl Default for DomainData { - fn default() -> Self { - DomainData { - ipv4_addresses: HashSet::new(), - ipv6_addresses: HashSet::new(), - cname: String::from(""), - is_wildcard: false, - } - } -} - #[derive(Clone, Debug)] pub struct LibOptions { pub hosts: HashSet, diff --git a/src/utils.rs b/src/utils.rs index 1e9df99..e6b3a31 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -15,7 +15,7 @@ pub async fn return_file_lines(file: String) -> HashSet { let mut f = match File::open(&file).await { Ok(file) => file, Err(e) => { - eprintln!("Error opening resolvers file. Error: {}", e); + eprintln!("Error opening resolvers file. Error: {e}"); std::process::exit(1) } }; @@ -25,7 +25,7 @@ pub async fn return_file_lines(file: String) -> HashSet { Ok(a) => a, _ => unreachable!("Error reading to string."), }; - buffer.lines().map(|f| format!("{}:53", f)).collect() + buffer.lines().map(|f| format!("{f}:53")).collect() } pub async fn detect_wildcards( @@ -34,7 +34,7 @@ pub async fn detect_wildcards( quiet_flag: bool, ) -> HashSet { if !quiet_flag { - println!("Running wildcards detection for {}...\n", target) + println!("Running wildcards detection for {target}...\n"); } let mut generated_wilcards: HashSet = HashSet::new(); for _ in 1..20 { @@ -69,13 +69,10 @@ pub async fn detect_wildcards( generated_wilcards.retain(|ip| ip.parse::().is_ok()); if !generated_wilcards.is_empty() && !quiet_flag { - println!( - "Wilcards detected for {} and wildcard's IP saved for furter work.", - target - ); - println!("Wilcard IPs: {:?}\n", generated_wilcards) + println!("Wilcards detected for {target} and wildcard's IP saved for furter work."); + println!("Wilcard IPs: {generated_wilcards:?}\n"); } else if !quiet_flag { - println!("No wilcards detected for {}, nice!\n", target) + println!("No wilcards detected for {target}, nice!\n"); } generated_wilcards } From e06eeffb48f243a41d93ba14e435d0a89e46947d Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sun, 20 Apr 2025 14:49:02 -0500 Subject: [PATCH 10/19] Update deps --- Cargo.lock | 863 ++++++++++++++++++++++++++++++++++++++++------------- Cargo.toml | 8 +- 2 files changed, 661 insertions(+), 210 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b5858c2..21b29b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ansi_term" @@ -13,13 +28,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -33,6 +48,27 @@ dependencies = [ "winapi", ] +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + [[package]] name = "bitflags" version = "1.3.2" @@ -40,10 +76,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bytes" -version = "1.1.0" +name = "bitflags" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cfg-if" @@ -59,7 +101,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim", "textwrap", "unicode-width", @@ -68,37 +110,47 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] [[package]] name = "enum-as-inner" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" +checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "matches", "percent-encoding", ] [[package]] name = "futures" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -111,9 +163,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -121,15 +173,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -138,38 +190,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -185,9 +237,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -195,13 +247,16 @@ dependencies = [ ] [[package]] -name = "heck" -version = "0.3.3" +name = "gimli" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" @@ -214,13 +269,131 @@ dependencies = [ [[package]] name = "hostname" -version = "0.3.1" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" dependencies = [ + "cfg-if", "libc", - "match_cfg", - "winapi", + "windows-link", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -235,10 +408,31 @@ dependencies = [ ] [[package]] -name = "instant" -version = "0.1.12" +name = "idna" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -249,7 +443,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" dependencies = [ - "socket2", + "socket2 0.3.19", "widestring", "winapi", "winreg", @@ -257,45 +451,49 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.3.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.117" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.14" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" -dependencies = [ - "cfg-if", -] +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lru-cache" @@ -306,71 +504,47 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "matches" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "memchr" -version = "2.4.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "miniz_oxide" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +dependencies = [ + "adler2", +] [[package]] name = "mio" -version = "0.7.14" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", - "log", - "miow", - "ntapi", - "winapi", + "wasi", + "windows-sys", ] [[package]] -name = "miow" -version = "0.3.7" +name = "object" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ - "winapi", + "memchr", ] -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" - [[package]] name = "parking_lot" version = "0.11.2" @@ -379,34 +553,57 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.10", ] [[package]] name = "parking_lot_core" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" dependencies = [ "cfg-if", "instant", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "winapi", ] [[package]] -name = "percent-encoding" -version = "2.1.0" +name = "parking_lot_core" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.11", + "smallvec", + "windows-targets", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -416,44 +613,40 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "proc-macro2" -version = "1.0.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "unicode-xid", + "zerocopy", ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "proc-macro2" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] [[package]] name = "quote" -version = "1.0.15" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", - "rand_hc", ] [[package]] @@ -468,39 +661,38 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] -name = "rand_hc" -version = "0.3.1" +name = "redox_syscall" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "rand_core", + "bitflags 1.3.2", ] [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ - "bitflags", + "bitflags 2.9.0", ] [[package]] name = "resolv-conf" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "48375394603e3dd4b2d64371f7148fd8c7baa2680e28741f2cb8d23b59e3d4c4" dependencies = [ "hostname", - "quick-error", ] [[package]] @@ -515,31 +707,60 @@ dependencies = [ ] [[package]] -name = "scopeguard" -version = "1.1.0" +name = "rustc-demangle" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] [[package]] name = "signal-hook-registry" -version = "1.4.0" +version = "1.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410" dependencies = [ "libc", ] [[package]] name = "slab" -version = "0.4.5" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.8.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" @@ -552,6 +773,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "socket2" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.8.0" @@ -560,13 +797,35 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.86" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", ] [[package]] @@ -580,67 +839,76 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", ] [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.16.1" +version = "1.44.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" dependencies = [ + "backtrace", "bytes", "libc", - "memchr", "mio", - "num_cpus", - "once_cell", - "parking_lot", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", + "socket2 0.5.9", "tokio-macros", - "winapi", + "windows-sys", ] [[package]] name = "tokio-macros" -version = "1.7.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -655,7 +923,7 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna", + "idna 0.2.3", "ipnet", "lazy_static", "log", @@ -678,7 +946,7 @@ dependencies = [ "lazy_static", "log", "lru-cache", - "parking_lot", + "parking_lot 0.11.2", "rand", "resolv-conf", "smallvec", @@ -689,49 +957,54 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" - [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "url" -version = "2.2.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna", - "matches", + "idna 1.0.3", "percent-encoding", ] +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "vec_map" version = "0.8.2" @@ -740,9 +1013,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "widestring" @@ -772,6 +1045,85 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "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", +] + +[[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_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[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_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + [[package]] name = "winreg" version = "0.6.2" @@ -780,3 +1132,102 @@ checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" dependencies = [ "winapi", ] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.100", +] diff --git a/Cargo.toml b/Cargo.toml index 5bedbd5..ea5d112 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,12 +12,12 @@ readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tokio = { version = "1.16.1", features = ["full"] } -futures = "0.3.21" +tokio = { version = "1.44.2", features = ["full"] } +futures = "0.3.31" trust-dns-resolver = "0.20.4" # trust-dns-resolver = { git = "https://github.com/Edu4rdSHL/trust-dns", branch = "main" } -clap = "2.33.4" -rand = "0.8.4" +clap = "2.34.0" +rand = "0.8.5" # https://github.com/bluejekyll/trust-dns/pull/1632 [patch.crates-io] From 37020360c2045ea4e36e95f5cf698ff93534a18c Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sun, 27 Jul 2025 16:19:33 -0500 Subject: [PATCH 11/19] (feat): refactor code This refactor is aimed to provide better readability for future maintenance, at the same time that provides several performance improvements reducing the number of calls that we do to resolvers. --- Cargo.lock | 1285 ++++++++++++++++++++++++++++++++++-------------- Cargo.toml | 19 +- src/args.rs | 46 ++ src/dnslib.rs | 131 +++-- src/lib.rs | 1 + src/main.rs | 116 +---- src/structs.rs | 15 +- src/utils.rs | 127 +++-- 8 files changed, 1130 insertions(+), 610 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 21b29b2..5eba665 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,17 +13,67 @@ dependencies = [ [[package]] name = "adler2" -version = "2.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] -name = "ansi_term" -version = "0.12.1" +name = "aho-corasick" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ - "winapi", + "memchr", +] + +[[package]] +name = "anstream" +version = "0.6.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.59.0", ] [[package]] @@ -34,31 +84,20 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", + "syn", ] [[package]] name = "autocfg" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", "cfg-if", @@ -66,20 +105,20 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] name = "bitflags" -version = "1.3.2" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] -name = "bitflags" -version = "2.9.0" +name = "bumpalo" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytes" @@ -88,26 +127,96 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] -name = "cfg-if" -version = "1.0.0" +name = "cc" +version = "1.2.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +dependencies = [ + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" [[package]] name = "clap" -version = "2.34.0" +version = "4.5.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +checksum = "be92d32e80243a54711e5d7ce823c35c41c9d929dc4ab58e1276f625841aadf9" dependencies = [ - "ansi_term", - "atty", - "bitflags 1.3.2", - "strsim", - "textwrap", - "unicode-width", - "vec_map", + "clap_builder", + "clap_derive", ] +[[package]] +name = "clap_builder" +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707eab41e9622f9139419d573eca0900137718000c517d47da73045f54331c3d" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef4f52386a59ca4c860f7393bcf8abd8dfd91ecccc0f774635ff68e92eeef491" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + [[package]] name = "data-encoding" version = "2.9.0" @@ -122,19 +231,19 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[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", "proc-macro2", "quote", - "syn 1.0.109", + "syn", ] [[package]] @@ -202,7 +311,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -236,14 +345,40 @@ dependencies = [ ] [[package]] -name = "getrandom" -version = "0.2.15" +name = "generator" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.1+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -254,47 +389,74 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[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" -version = "0.1.19" +name = "hickory-proto" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "f8a6fe56c0038198998a6f217ca4e7ef3a5e51f46163bd6dd60b5c71ca6c6502" dependencies = [ - "libc", + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand", + "ring", + "thiserror 2.0.12", + "tinyvec", + "tokio", + "tracing", + "url", ] [[package]] -name = "hostname" -version = "0.4.1" +name = "hickory-resolver" +version = "0.25.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56f203cd1c76362b69e3863fd987520ac36cf70a8c92627449b2f64a8cf7d65" +checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" dependencies = [ "cfg-if", - "libc", - "windows-link", + "futures-util", + "hickory-proto", + "ipconfig", + "moka", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "smallvec", + "thiserror 2.0.12", + "tokio", + "tracing", ] [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -303,31 +465,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locid_transform" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider", - "tinystr", - "zerovec", -] - -[[package]] -name = "icu_locid_transform_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" - [[package]] name = "icu_normalizer" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -335,78 +477,54 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "zerovec", ] -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.100", -] - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.0.3" @@ -420,32 +538,34 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", ] [[package]] -name = "instant" -version = "0.1.13" +name = "io-uring" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" dependencies = [ + "bitflags", "cfg-if", + "libc", ] [[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", ] @@ -455,6 +575,22 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -463,27 +599,21 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.172" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ "autocfg", "scopeguard", @@ -496,44 +626,80 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] -name = "lru-cache" -version = "0.1.2" +name = "loom" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" dependencies = [ - "linked-hash-map", + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", ] [[package]] -name = "matches" -version = "0.1.10" +name = "matchers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] [[package]] name = "memchr" -version = "2.7.4" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] name = "miniz_oxide" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ "adler2", ] [[package]] name = "mio" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "wasi", - "windows-sys", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", +] + +[[package]] +name = "moka" +version = "0.12.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "loom", + "parking_lot", + "portable-atomic", + "rustc_version", + "smallvec", + "tagptr", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", ] [[package]] @@ -546,51 +712,48 @@ dependencies = [ ] [[package]] -name = "parking_lot" -version = "0.11.2" +name = "once_cell" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.6", + "critical-section", + "portable-atomic", ] [[package]] -name = "parking_lot" -version = "0.12.3" +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", - "parking_lot_core 0.9.10", + "parking_lot_core", ] [[package]] name = "parking_lot_core" -version = "0.8.6" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" -dependencies = [ - "cfg-if", - "instant", - "libc", - "redox_syscall 0.2.16", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.11", + "redox_syscall", "smallvec", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -611,6 +774,21 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "potential_utf" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +dependencies = [ + "zerovec", +] + [[package]] name = "ppv-lite86" version = "0.2.21" @@ -639,21 +817,26 @@ dependencies = [ ] [[package]] -name = "rand" -version = "0.8.5" +name = "r-efi" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ - "libc", "rand_chacha", "rand_core", ] [[package]] name = "rand_chacha" -version = "0.3.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", "rand_core", @@ -661,56 +844,123 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.4" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom", + "getrandom 0.3.3", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "de3a5d9f0aba1dbcec1cc47f0ff94a4b778fe55bca98a6dfa92e4e094e57b1c4" dependencies = [ - "bitflags 1.3.2", + "bitflags", ] [[package]] -name = "redox_syscall" -version = "0.5.11" +name = "regex" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ - "bitflags 2.9.0", + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + [[package]] name = "resolv-conf" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48375394603e3dd4b2d64371f7148fd8c7baa2680e28741f2cb8d23b59e3d4c4" +checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3" + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ - "hostname", + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", ] [[package]] name = "rusolver" -version = "0.9.1" +version = "0.10.0" dependencies = [ "clap", "futures", + "hickory-resolver", "rand", "tokio", - "trust-dns-resolver", ] [[package]] name = "rustc-demangle" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" @@ -718,6 +968,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" + [[package]] name = "serde" version = "1.0.219" @@ -735,9 +991,24 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.5" @@ -749,38 +1020,34 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "smallvec" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +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]] name = "socket2" -version = "0.5.9" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -791,26 +1058,15 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "strsim" -version = "0.8.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "1.0.109" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -819,23 +1075,20 @@ dependencies = [ [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] -name = "textwrap" -version = "0.11.0" +name = "tagptr" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" [[package]] name = "thiserror" @@ -843,7 +1096,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", ] [[package]] @@ -854,14 +1116,34 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", ] [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -884,20 +1166,22 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.44.2" +version = "1.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +checksum = "43864ed400b6043a4757a25c7a64a8efde741aed79a056a2fb348a406701bb35" dependencies = [ "backtrace", "bytes", + "io-uring", "libc", "mio", - "parking_lot 0.12.3", + "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.9", + "slab", + "socket2 0.6.0", "tokio-macros", - "windows-sys", + "windows-sys 0.59.0", ] [[package]] @@ -908,58 +1192,57 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] -name = "trust-dns-proto" -version = "0.20.4" -source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f339a5e806bed9109ad205d2143d8b18701d2ab0" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "log", - "rand", - "smallvec", - "thiserror", - "tinyvec", - "tokio", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.20.4" -source = "git+https://github.com/Findomain/trust-dns?branch=custombranch#f339a5e806bed9109ad205d2143d8b18701d2ab0" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "log", - "lru-cache", - "parking_lot 0.11.2", - "rand", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "trust-dns-proto", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.18" +name = "tracing" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] [[package]] name = "unicode-ident" @@ -968,19 +1251,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] -name = "unicode-normalization" -version = "0.1.24" +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" @@ -989,16 +1263,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 1.0.3", + "idna", "percent-encoding", ] -[[package]] -name = "utf16_iter" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -1006,22 +1274,106 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] -name = "vec_map" -version = "0.8.2" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +dependencies = [ + "getrandom 0.3.3", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "widestring" -version = "0.4.3" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" [[package]] name = "winapi" @@ -1046,10 +1398,115 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-link" -version = "0.1.1" +name = "windows" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +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" @@ -1057,7 +1514,31 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[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]] @@ -1066,28 +1547,55 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "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-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + +[[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_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_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" @@ -1100,24 +1608,48 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[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_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_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_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" @@ -1126,30 +1658,34 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[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]] -name = "write16" -version = "1.0.0" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -1159,34 +1695,34 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.24" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2586fea28e186957ef732a5f8b3be2da217d65c5969d4b1e17f973ebbe876879" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.24" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] [[package]] @@ -1206,15 +1742,26 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", "synstructure", ] [[package]] -name = "zerovec" -version = "0.10.4" +name = "zerotrie" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428" dependencies = [ "yoke", "zerofrom", @@ -1223,11 +1770,11 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.100", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index ea5d112..8f16233 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,8 @@ [package] name = "rusolver" -version = "0.9.1" +version = "0.10.0" authors = ["Eduard Tolosa "] -edition = "2018" +edition = "2021" description = "Fast DNS resolver written in Rust." repository = "https://github.com/edu4rdshl/rusolver" license = "GPL-3.0-or-later" @@ -12,20 +12,13 @@ readme = "README.md" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tokio = { version = "1.44.2", features = ["full"] } +tokio = { version = "1.47.0", features = ["full"] } futures = "0.3.31" -trust-dns-resolver = "0.20.4" -# trust-dns-resolver = { git = "https://github.com/Edu4rdSHL/trust-dns", branch = "main" } -clap = "2.34.0" -rand = "0.8.5" - -# https://github.com/bluejekyll/trust-dns/pull/1632 -[patch.crates-io] -trust-dns-resolver = { git = "https://github.com/Findomain/trust-dns", package = "trust-dns-resolver", branch = "custombranch" } +hickory-resolver = "0.25.2" +clap = { version = "4.5.41", features = ["derive"] } +rand = "0.9.2" [profile.release] lto = true codegen-units = 1 panic = 'abort' -incremental = false -opt-level = "s" diff --git a/src/args.rs b/src/args.rs index e69de29..861bc3f 100644 --- a/src/args.rs +++ b/src/args.rs @@ -0,0 +1,46 @@ +use clap::{arg, Parser}; + +#[derive(Parser, Debug)] +#[command(author, version, about, long_about = None)] +pub struct Args { + #[arg( + short, + long, + default_value_t = 100, + help = "Number of threads. Default: 100" + )] + pub threads: usize, + + #[arg( + long, + default_value_t = 0, + help = "Number of retries after lookup failure before giving up. Defaults to 0" + )] + pub retries: usize, + + #[arg( + short, + long, + help = "Target domain. When it's specified, a wordlist can be used from stdin for bruteforcing." + )] + pub domain: Option, + + #[arg(short, long, help = "File with DNS ips.")] + pub resolvers: Option, + + #[arg(long, default_value_t = 3, help = "Timeout in seconds. Default: 3")] + pub timeout: u64, + + #[arg(short, long, help = "Display the record data.")] + pub ip: bool, + + #[arg( + short, + long, + help = "Enable the double verification algorithm for subdomains. Default: false" + )] + pub enable_double_check: bool, + + #[arg(short, long, help = "Quiet mode, no output except errors.")] + pub quiet_flag: bool, +} diff --git a/src/dnslib.rs b/src/dnslib.rs index 8e4dd9f..38e35b6 100644 --- a/src/dnslib.rs +++ b/src/dnslib.rs @@ -1,54 +1,52 @@ use { - crate::structs::{DomainData, LibOptions}, + crate::{ + structs::{DomainData, LibOptions}, + utils::print_domain_data, + }, futures::stream::{self, StreamExt}, + hickory_resolver::{ + config::{NameServerConfig, NameServerConfigGroup, ResolverConfig, ResolverOpts}, + name_server::TokioConnectionProvider, + proto::{rr::RecordType, xfer::Protocol}, + TokioResolver, + }, std::{ collections::{HashMap, HashSet}, net::SocketAddr, }, - trust_dns_resolver::{ - config::{NameServerConfig, NameServerConfigGroup, Protocol, ResolverConfig, ResolverOpts}, - lookup::{Ipv4Lookup, Lookup}, - name_server::{GenericConnection, GenericConnectionProvider, TokioRuntime}, - proto::{rr::RecordType, xfer::DnsRequestOptions}, - AsyncResolver, TokioAsyncResolver, - }, }; #[must_use] -pub fn return_tokio_asyncresolver( - nameserver_ips: HashSet, +pub fn return_tokio_asyncresolver( + nameserver_ips: &HashSet, options: ResolverOpts, -) -> AsyncResolver> { - let mut name_servers = NameServerConfigGroup::with_capacity(nameserver_ips.len() * 2); +) -> TokioResolver { + let mut name_servers = NameServerConfigGroup::with_capacity(nameserver_ips.len()); - name_servers.extend(nameserver_ips.into_iter().flat_map(|server| { - let socket_addr = SocketAddr::V4(match server.parse() { - Ok(a) => a, - Err(e) => unreachable!( + name_servers.extend(nameserver_ips.iter().map(|server| { + let socket_addr = SocketAddr::V4(server.parse().unwrap_or_else(|e| { + panic!( "Error parsing the server {}, only IPv4 are allowed. Error: {}", server, e - ), - }); + ) + })); - std::iter::once(NameServerConfig { + NameServerConfig { socket_addr, protocol: Protocol::Udp, tls_dns_name: None, - trust_nx_responses: false, - }) - .chain(std::iter::once(NameServerConfig { - socket_addr, - protocol: Protocol::Tcp, - tls_dns_name: None, - trust_nx_responses: false, - })) + http_endpoint: None, + trust_negative_responses: false, + bind_addr: None, + } })); - TokioAsyncResolver::tokio( + TokioResolver::builder_with_config( ResolverConfig::from_parts(None, vec![], name_servers), - options, + TokioConnectionProvider::default(), ) - .unwrap() + .with_options(options) + .build() } pub async fn return_hosts_data(options: &LibOptions) -> HashMap { @@ -59,24 +57,22 @@ pub async fn return_hosts_data(options: &LibOptions) -> HashMap::None; - async move { - if let Ok(ip) = resolver_fut.await { - if options.disable_double_check { - ip_lookup = Some(ip); - } else if let Ok(ip) = trustable_resolver_fut.await { - ip_lookup = Some(ip); + let ip_lookup = if options.enable_double_check { + match ( + options.resolvers.ipv4_lookup(lookup_host.clone()).await, + options.trustable_resolvers.ipv4_lookup(lookup_host).await, + ) { + (Ok(_), Ok(ip)) => Some(ip), + _ => None, } - } + } else { + options.resolvers.ipv4_lookup(lookup_host).await.ok() + }; if let Some(ip_lookup) = ip_lookup { for ip in ip_lookup.iter() { @@ -89,13 +85,7 @@ pub async fn return_hosts_data(options: &LibOptions) -> HashMap HashMap, - resolver: AsyncResolver>, - trustable_resolver: AsyncResolver>, +pub async fn return_cname_data( + hosts: HashSet, + resolver: TokioResolver, + trustable_resolver: TokioResolver, disable_double_check: bool, mut threads: usize, ) -> HashMap { @@ -117,33 +107,34 @@ pub async fn return_cname_data( threads = hosts.len(); } - let request_options = DnsRequestOptions::default(); - let record_type = RecordType::CNAME; - stream::iter(hosts) .map(|host| { - let lookup_host = host.trim_end_matches('.').to_owned() + "."; - let resolver_fut = resolver.lookup(lookup_host.clone(), record_type, request_options); - let trustable_resolver_fut = - trustable_resolver.lookup(lookup_host, record_type, request_options); + let host = host.trim_end_matches('.').to_owned(); + let fqdn = format!("{host}."); - let mut domain_data = DomainData::default(); - - let mut cname_lookup = Option::::None; + let resolver = resolver.clone(); + let trustable_resolver = trustable_resolver.clone(); async move { - if let Ok(lookup) = resolver_fut.await { - if disable_double_check { - cname_lookup = Some(lookup); - } else if let Ok(lookup) = trustable_resolver_fut.await { - cname_lookup = Some(lookup); + let cname_lookup = if disable_double_check { + resolver.lookup(fqdn.clone(), RecordType::CNAME).await.ok() + } else { + match ( + resolver.lookup(fqdn.clone(), RecordType::CNAME).await, + trustable_resolver.lookup(fqdn, RecordType::CNAME).await, + ) { + (Ok(_), Ok(lookup)) => Some(lookup), + _ => None, } - } + }; + + let mut domain_data = DomainData::default(); if let Some(lookup) = cname_lookup { for record in lookup.iter() { if let Some(cname) = record.as_cname() { domain_data.cname = cname.to_string(); + break; } } } diff --git a/src/lib.rs b/src/lib.rs index de23ad6..df347f2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,4 @@ +pub mod args; pub mod dnslib; pub mod structs; pub mod utils; diff --git a/src/main.rs b/src/main.rs index 980a492..1722b76 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,11 @@ use { - clap::{value_t, App, Arg}, - rusolver::{dnslib, structs, utils}, + clap::Parser, + rusolver::{args::Args, dnslib, structs, utils}, std::collections::HashSet, tokio::{ self, io::{self, AsyncReadExt}, }, - trust_dns_resolver::config::{LookupIpStrategy, ResolverOpts}, }; // WIP: add support for AAAA, TXT, SRV, NAPTR, PTR, CNAME, DNAME, MX, NS, SOA, LOC, SVCB, HTTPS, SPF, CAA and AVC resource records. @@ -16,83 +15,10 @@ use { #[tokio::main] async fn main() -> Result<(), Box> { // Eval args - let matches = App::new("Rusolver") - .version(clap::crate_version!()) - .author("Eduard Tolosa ") - .about("Fast DNS resolver written in Rust.") - .arg( - Arg::with_name("threads") - .short("t") - .long("threads") - .takes_value(true) - .help("Number of threads. Default: 100"), - ) - .arg( - Arg::with_name("retries") - .long("retries") - .takes_value(true) - .help("Number of retries after lookup failure before giving up. Defaults to 0"), - ) - .arg( - Arg::with_name("domain") - .short("d") - .long("domain") - .takes_value(true) - .help("Target domain. When it's specified, a wordlist can be used from stdin for bruteforcing."), - ) - .arg( - Arg::with_name("resolvers") - .short("r") - .long("resolvers") - .takes_value(true) - .help("File with DNS ips."), - ) - .arg( - Arg::with_name("timeout") - .long("timeout") - .takes_value(true) - .help("Timeout in seconds. Default: 3"), - ) - .arg( - Arg::with_name("ip") - .short("i") - .long("ip") - .takes_value(false) - .help("Show the discovered IP addresses. Default: false"), - ) - .arg( - Arg::with_name("no-verify") - .long("no-verify") - .takes_value(false) - .help("Disables the double verification algorithm for valid subdomains -NOT RECOMMENDED-. Default: false"), - ) - .arg( - Arg::with_name("quiet") - .short("q") - .long("quiet") - .takes_value(false) - .help("Enables quiet mode."), - ) - .get_matches(); - - // Assign values or use defaults - let show_ip_address = matches.is_present("ip"); - let threads = value_t!(matches.value_of("threads"), usize).unwrap_or_else(|_| 100); - let timeout = value_t!(matches.value_of("timeout"), u64).unwrap_or_else(|_| 3); - let retries = value_t!(matches.value_of("retries"), usize).unwrap_or_else(|_| 0); - let quiet_flag = matches.is_present("quiet"); - let custom_resolvers = matches.is_present("resolvers"); - let disable_double_check = matches.is_present("no-verify") && custom_resolvers; + let args = Args::parse(); // Resolver opts - let options = ResolverOpts { - timeout: std::time::Duration::from_secs(timeout), - attempts: retries, - ip_strategy: LookupIpStrategy::Ipv4Only, - num_concurrent_reqs: 1, - shuffle_dns_servers: true, - ..Default::default() - }; + let options = utils::return_resolver_opts(args.timeout, args.retries); let built_in_nameservers: HashSet = vec![ // Cloudflare @@ -110,12 +36,6 @@ async fn main() -> Result<(), Box> { // Verisign "64.6.64.6:53", "64.6.65.6:53", - // UncensoredDNS - "91.239.100.100:53", - "89.233.43.71:53", - // dns.watch - "84.200.69.80:53", - "84.200.70.40:53", ] .iter() .map(ToString::to_string) @@ -124,16 +44,15 @@ async fn main() -> Result<(), Box> { // Create resolvers let mut nameserver_ips; - if custom_resolvers { - nameserver_ips = - utils::return_file_lines(value_t!(matches.value_of("resolvers"), String).unwrap()) - .await; + if args.resolvers.is_some() { + nameserver_ips = utils::return_file_lines(&args.resolvers.unwrap()).await; nameserver_ips.retain(|ip| !ip.is_empty()); } else { nameserver_ips = built_in_nameservers.clone(); } - let resolvers = dnslib::return_tokio_asyncresolver(nameserver_ips, options); - let trustable_resolver = dnslib::return_tokio_asyncresolver(built_in_nameservers, options); + + let resolvers = dnslib::return_tokio_asyncresolver(&nameserver_ips, options.clone()); + let trustable_resolvers = dnslib::return_tokio_asyncresolver(&built_in_nameservers, options); let mut wildcard_ips = HashSet::new(); // Read stdin @@ -141,9 +60,10 @@ async fn main() -> Result<(), Box> { let mut stdin = io::stdin(); stdin.read_to_string(&mut buffer).await?; - let hosts: HashSet = if matches.is_present("domain") { - let domain = value_t!(matches, "domain", String).unwrap(); - wildcard_ips = utils::detect_wildcards(&domain, &trustable_resolver, quiet_flag).await; + let hosts: HashSet = if args.domain.is_some() { + let domain = args.domain.unwrap(); + wildcard_ips = + utils::detect_wildcards(&domain, &trustable_resolvers, args.quiet_flag).await; buffer .lines() .map(|word| format!("{word}.{domain}")) @@ -155,12 +75,12 @@ async fn main() -> Result<(), Box> { let options = structs::LibOptions { hosts, resolvers, - trustable_resolver, + trustable_resolvers, wildcard_ips, - disable_double_check, - threads, - show_ip_address, - quiet_flag, + enable_double_check: args.enable_double_check, + threads: args.threads, + show_ip_address: args.ip, + quiet_flag: args.quiet_flag, }; dnslib::return_hosts_data(&options).await; diff --git a/src/structs.rs b/src/structs.rs index 3da267b..8afd26f 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -1,10 +1,4 @@ -use { - std::collections::HashSet, - trust_dns_resolver::{ - name_server::{GenericConnection, GenericConnectionProvider, TokioRuntime}, - AsyncResolver, - }, -}; +use {hickory_resolver::TokioResolver, std::collections::HashSet}; #[derive(Clone, Debug, Default)] pub struct DomainData { @@ -17,11 +11,10 @@ pub struct DomainData { #[derive(Clone, Debug)] pub struct LibOptions { pub hosts: HashSet, - pub resolvers: AsyncResolver>, - pub trustable_resolver: - AsyncResolver>, + pub resolvers: TokioResolver, + pub trustable_resolvers: TokioResolver, pub wildcard_ips: HashSet, - pub disable_double_check: bool, + pub enable_double_check: bool, pub threads: usize, pub show_ip_address: bool, pub quiet_flag: bool, diff --git a/src/utils.rs b/src/utils.rs index e6b3a31..078d736 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,18 +1,17 @@ use { + crate::structs::{DomainData, LibOptions}, futures::stream::{self, StreamExt}, - rand::{distributions::Alphanumeric, thread_rng as rng, Rng}, - std::{collections::HashSet, net::Ipv4Addr}, - tokio::{self, fs::File, io::AsyncReadExt}, - trust_dns_resolver::{ - name_server::{GenericConnection, GenericConnectionProvider, TokioRuntime}, - AsyncResolver, + hickory_resolver::{ + config::{LookupIpStrategy, ResolverOpts, ServerOrderingStrategy}, + TokioResolver, }, + rand::{distr::Alphanumeric, rng, Rng}, + std::{collections::HashSet, net::Ipv4Addr}, + tokio::{fs::File, io::AsyncReadExt}, }; -// In the future I may need to implement error propagation, but for now it's fine -// to deal with matches -pub async fn return_file_lines(file: String) -> HashSet { - let mut f = match File::open(&file).await { +pub async fn return_file_lines(file: &str) -> HashSet { + let mut f = match File::open(file).await { Ok(file) => file, Err(e) => { eprintln!("Error opening resolvers file. Error: {e}"); @@ -21,58 +20,88 @@ pub async fn return_file_lines(file: String) -> HashSet { }; let mut buffer = String::new(); - match f.read_to_string(&mut buffer).await { - Ok(a) => a, - _ => unreachable!("Error reading to string."), - }; - buffer.lines().map(|f| format!("{f}:53")).collect() + (f.read_to_string(&mut buffer).await) + .unwrap_or_else(|_| unreachable!("Error reading to string.")); + + let estimated_lines = buffer.matches('\n').count() + 1; + let mut result = HashSet::with_capacity(estimated_lines); + + for line in buffer.lines() { + if !line.is_empty() { + result.insert(format!("{line}:53")); + } + } + result } pub async fn detect_wildcards( target: &str, - resolvers: &AsyncResolver>, + resolvers: &TokioResolver, quiet_flag: bool, ) -> HashSet { if !quiet_flag { println!("Running wildcards detection for {target}...\n"); } - let mut generated_wilcards: HashSet = HashSet::new(); + + let mut generated_wildcards = HashSet::with_capacity(19); + + // Generate random subdomains for wildcard detection for _ in 1..20 { - generated_wilcards.insert(format!( - "{}.{}.", - rng() - .sample_iter(Alphanumeric) - .take(15) - .map(char::from) - .collect::(), - target - )); + let random_subdomain: String = rng() + .sample_iter(Alphanumeric) + .take(15) + .map(char::from) + .collect(); + generated_wildcards.insert(format!("{random_subdomain}.{target}.")); } - generated_wilcards = stream::iter(generated_wilcards.clone().into_iter().map( - |host| async move { - if let Ok(ips) = resolvers.ipv4_lookup(host.clone()).await { - ips.into_iter() - .map(|x| x.to_string()) - .collect::>() - } else { - Vec::new() - } - }, - )) - .buffer_unordered(10) - .map(stream::iter) - .flatten() - .collect() - .await; + let wildcard_ips: HashSet = stream::iter(generated_wildcards.into_iter()) + .map(|host| async move { + resolvers.ipv4_lookup(host).await.map_or_else( + |_| Vec::new(), + |ips| { + ips.into_iter() + .filter_map(|ip| { + let ip_str = ip.to_string(); + if ip_str.parse::().is_ok() { + Some(ip_str) + } else { + None + } + }) + .collect::>() + }, + ) + }) + .buffer_unordered(10) + .map(stream::iter) + .flatten() + .collect() + .await; - generated_wilcards.retain(|ip| ip.parse::().is_ok()); - - if !generated_wilcards.is_empty() && !quiet_flag { - println!("Wilcards detected for {target} and wildcard's IP saved for furter work."); - println!("Wilcard IPs: {generated_wilcards:?}\n"); + if !wildcard_ips.is_empty() && !quiet_flag { + println!("Wildcards detected for {target} and wildcard's IP saved for further work."); + println!("Wildcard IPs: {wildcard_ips:?}\n"); } else if !quiet_flag { - println!("No wilcards detected for {target}, nice!\n"); + println!("No wildcards detected for {target}, nice!\n"); } - generated_wilcards + wildcard_ips +} + +pub fn print_domain_data(host: &str, domain_data: &DomainData, options: &LibOptions) { + if options.show_ip_address { + println!("{}: {:?}", host, domain_data.ipv4_addresses); + } else { + println!("{}", host); + } +} + +pub fn return_resolver_opts(timeout: u64, retries: usize) -> ResolverOpts { + let mut options = ResolverOpts::default(); + options.timeout = std::time::Duration::from_secs(timeout); + options.attempts = retries; + options.ip_strategy = LookupIpStrategy::Ipv4Only; + options.num_concurrent_reqs = 1; + options.server_ordering_strategy = ServerOrderingStrategy::RoundRobin; + options } From 55fd2cb2beeff8d2d582feaef04957c7a8dfef37 Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sun, 27 Jul 2025 16:52:51 -0500 Subject: [PATCH 12/19] (chore): update profile.release --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 8f16233..a36c00c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,3 +22,4 @@ rand = "0.9.2" lto = true codegen-units = 1 panic = 'abort' +strip = true From 3bb0ac4b35b6432926c3e4ec63ef23cb4c90b767 Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sun, 27 Jul 2025 17:00:24 -0500 Subject: [PATCH 13/19] (chore): update manpage --- builder.sh | 8 ------- rusolver.1 | 68 +++++++++++++++++++++++++----------------------------- 2 files changed, 32 insertions(+), 44 deletions(-) diff --git a/builder.sh b/builder.sh index 91c0f70..e0caf7c 100755 --- a/builder.sh +++ b/builder.sh @@ -10,14 +10,6 @@ AARCH_TARGET="aarch64-unknown-linux-gnu" OSX_TARGET="x86_64-apple-darwin" MANPAGE_DIR="./$NAME.1" -if ! systemctl is-active docker >/dev/null 2>&1; then - echo "Docker is not running. Starting docker." - if ! sudo systemctl start docker; then - echo "Failed to start docker." - exit 1 - fi -fi - # Linux build echo "Building Linux artifact." if cargo build -q --release --target="$LINUX_TARGET"; then diff --git a/rusolver.1 b/rusolver.1 index 7cbc764..0084772 100644 --- a/rusolver.1 +++ b/rusolver.1 @@ -1,56 +1,52 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.5. -.TH RUSOLVER "1" "February 2022" "Rusolver 0.9.1" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. +.TH RUSOLVER "1" "July 2025" "rusolver 0.10.0" "User Commands" .SH NAME -Rusolver \- manual page for Rusolver 0.9.1 +rusolver \- manual page for rusolver 0.10.0 +.SH SYNOPSIS +.B rusolver +[\fI\,OPTIONS\/\fR] .SH DESCRIPTION -Rusolver 0.9.1 -Eduard Tolosa Fast DNS resolver written in Rust. -.SS "USAGE:" -.IP -rusolver [FLAGS] [OPTIONS] -.SS "FLAGS:" +.SH OPTIONS .TP -\fB\-h\fR, \fB\-\-help\fR -Prints help information +\fB\-t\fR, \fB\-\-threads\fR +Number of threads. Default: 100 [default: 100] .TP -\fB\-i\fR, \fB\-\-ip\fR -Show the discovered IP addresses. Default: false +\fB\-\-retries\fR +Number of retries after lookup failure before giving up. Defaults to 0 [default: 0] .TP -\fB\-\-no\-verify\fR -Disables the double verification algorithm for valid subdomains \fB\-NOT\fR RECOMMENDED\-. Default: false +\fB\-d\fR, \fB\-\-domain\fR +Target domain. When it's specified, a wordlist can be used from stdin for bruteforcing. .TP -\fB\-q\fR, \fB\-\-quiet\fR -Enables quiet mode. -.TP -\fB\-V\fR, \fB\-\-version\fR -Prints version information -.SS "OPTIONS:" -.TP -\fB\-d\fR, \fB\-\-domain\fR -Target domain. When it's specified, a wordlist can be used from stdin for -bruteforcing. -.TP -\fB\-r\fR, \fB\-\-resolvers\fR +\fB\-r\fR, \fB\-\-resolvers\fR File with DNS ips. .TP -\fB\-\-retries\fR -Number of retries after lookup failure before giving up. Defaults to 0 +\fB\-\-timeout\fR +Timeout in seconds. Default: 3 [default: 3] .TP -\fB\-t\fR, \fB\-\-threads\fR -Number of threads. Default: 100 +\fB\-i\fR, \fB\-\-ip\fR +Display the record data. .TP -\fB\-\-timeout\fR -Timeout in seconds. Default: 3 +\fB\-e\fR, \fB\-\-enable\-double\-check\fR +Enable the double verification algorithm for subdomains. Default: false +.TP +\fB\-q\fR, \fB\-\-quiet\-flag\fR +Quiet mode, no output except errors. +.TP +\fB\-h\fR, \fB\-\-help\fR +Print help +.TP +\fB\-V\fR, \fB\-\-version\fR +Print version .SH "SEE ALSO" The full documentation for -.B Rusolver +.B rusolver is maintained as a Texinfo manual. If the .B info and -.B Rusolver +.B rusolver programs are properly installed at your site, the command .IP -.B info Rusolver +.B info rusolver .PP should give you access to the complete manual. From 28b29ca515ab299938df8e14b1424d2f5f118a51 Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sun, 27 Jul 2025 17:43:22 -0500 Subject: [PATCH 14/19] (fix): only print data if quiet_mode is not set. Also do not print wildcards --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/dnslib.rs | 4 +++- src/utils.rs | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5eba665..22581e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "rusolver" -version = "0.10.0" +version = "0.10.1" dependencies = [ "clap", "futures", diff --git a/Cargo.toml b/Cargo.toml index a36c00c..c688426 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rusolver" -version = "0.10.0" +version = "0.10.1" authors = ["Eduard Tolosa "] edition = "2021" description = "Fast DNS resolver written in Rust." diff --git a/src/dnslib.rs b/src/dnslib.rs index 38e35b6..a94a5f1 100644 --- a/src/dnslib.rs +++ b/src/dnslib.rs @@ -85,7 +85,9 @@ pub async fn return_hosts_data(options: &LibOptions) -> HashMap Date: Sun, 27 Jul 2025 23:45:27 -0500 Subject: [PATCH 15/19] (fix): only print valid data to stdout A regression was introduced during the refactoring that makes rusolver print all the domains, even if they were invalid, this fixes that Fixes #14 --- src/utils.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/utils.rs b/src/utils.rs index e45a39c..c9c65e5 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -89,10 +89,12 @@ pub async fn detect_wildcards( } pub fn print_domain_data(host: &str, domain_data: &DomainData, options: &LibOptions) { - if options.show_ip_address && !domain_data.is_wildcard { - println!("{}: {:?}", host, domain_data.ipv4_addresses); - } else { - println!("{}", host); + if !domain_data.is_wildcard && !domain_data.ipv4_addresses.is_empty() { + if options.show_ip_address { + println!("{}:{:?}", host, domain_data.ipv4_addresses); + } else { + println!("{}", host); + } } } From 9b329daa6ad0ebee7ba9a20caa129863ef71d8ea Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sun, 27 Jul 2025 23:46:01 -0500 Subject: [PATCH 16/19] (chore): bump version. --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 22581e2..36e2793 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "rusolver" -version = "0.10.1" +version = "0.10.2" dependencies = [ "clap", "futures", diff --git a/Cargo.toml b/Cargo.toml index c688426..32d49cb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rusolver" -version = "0.10.1" +version = "0.10.2" authors = ["Eduard Tolosa "] edition = "2021" description = "Fast DNS resolver written in Rust." From c372db9eab92cf6eaaf069bbf0734adfd20db815 Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sat, 2 Aug 2025 13:00:51 -0500 Subject: [PATCH 17/19] (chore): update builder.sh - Disable docker checks, we now use podman - Use cross for all builds, otherwise the build ends up in glibc versions mismatch --- builder.sh | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/builder.sh b/builder.sh index e0caf7c..f994261 100755 --- a/builder.sh +++ b/builder.sh @@ -7,12 +7,12 @@ LINUX_X86_TARGET="i686-unknown-linux-musl" WIN_TARGET="x86_64-pc-windows-gnu" ARMV7_TARGET="armv7-unknown-linux-gnueabihf" AARCH_TARGET="aarch64-unknown-linux-gnu" -OSX_TARGET="x86_64-apple-darwin" +# OSX_TARGET="x86_64-apple-darwin" MANPAGE_DIR="./$NAME.1" # Linux build echo "Building Linux artifact." -if cargo build -q --release --target="$LINUX_TARGET"; then +if cross build -q --release --target="$LINUX_TARGET"; then echo "Linux artifact build: SUCCESS" cp "target/$LINUX_TARGET/release/$NAME" "target/$LINUX_TARGET/release/$NAME-linux" strip "target/$LINUX_TARGET/release/$NAME-linux" @@ -66,15 +66,15 @@ else fi # Mac OS build -echo "Building OSX artifact." -if CC=o64-clang CXX=o64-clang++ LIBZ_SYS_STATIC=1 cargo build -q --release --target="$OSX_TARGET"; then - echo "OSX artifact build: SUCCESS" - cp "target/$OSX_TARGET/release/$NAME" "target/$OSX_TARGET/release/$NAME-osx" - strip "target/$OSX_TARGET/release/$NAME-osx" - sha512sum "target/$OSX_TARGET/release/$NAME-osx" >"target/$OSX_TARGET/release/$NAME-osx.sha512" -else - echo "OSX artifact build: FAILED" -fi +# echo "Building OSX artifact." +# if CC=o64-clang CXX=o64-clang++ LIBZ_SYS_STATIC=1 cargo build -q --release --target="$OSX_TARGET"; then +# echo "OSX artifact build: SUCCESS" +# cp "target/$OSX_TARGET/release/$NAME" "target/$OSX_TARGET/release/$NAME-osx" +# strip "target/$OSX_TARGET/release/$NAME-osx" +# sha512sum "target/$OSX_TARGET/release/$NAME-osx" >"target/$OSX_TARGET/release/$NAME-osx.sha512" +# else +# echo "OSX artifact build: FAILED" +# fi echo "Creating manpage..." if command -v help2man >/dev/null; then @@ -86,10 +86,3 @@ if command -v help2man >/dev/null; then else echo "Please install the help2man package." fi - -# Stop docker -echo "Stopping docker." -if ! sudo systemctl stop docker; then - echo "Failed to stop docker." - exit 1 -fi From 12318ce9c023ef94da738bc9a649e93eae24edc0 Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sat, 2 Aug 2025 13:55:38 -0500 Subject: [PATCH 18/19] Update builder.sh --- builder.sh | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/builder.sh b/builder.sh index f994261..568d94f 100755 --- a/builder.sh +++ b/builder.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash -# Rusolver releaser NAME="rusolver" LINUX_TARGET="x86_64-unknown-linux-musl" @@ -9,6 +8,10 @@ ARMV7_TARGET="armv7-unknown-linux-gnueabihf" AARCH_TARGET="aarch64-unknown-linux-gnu" # OSX_TARGET="x86_64-apple-darwin" MANPAGE_DIR="./$NAME.1" +BIN_OUTPUT_DIR="./ghbinaries" + +rm -rf "$BIN_OUTPUT_DIR" +mkdir -p "$BIN_OUTPUT_DIR" # Linux build echo "Building Linux artifact." @@ -16,7 +19,8 @@ if cross build -q --release --target="$LINUX_TARGET"; then echo "Linux artifact build: SUCCESS" cp "target/$LINUX_TARGET/release/$NAME" "target/$LINUX_TARGET/release/$NAME-linux" strip "target/$LINUX_TARGET/release/$NAME-linux" - sha512sum "target/$LINUX_TARGET/release/$NAME-linux" >"target/$LINUX_TARGET/release/$NAME-linux.sha512" + sha512sum "target/$LINUX_TARGET/release/$NAME-linux" >"$BIN_OUTPUT_DIR/$NAME-linux.sha512" + zip -q -j "$BIN_OUTPUT_DIR/$NAME-linux-x64.zip" "target/$LINUX_TARGET/release/$NAME-linux" else echo "Linux artifact build: FAILED" fi @@ -27,7 +31,8 @@ if cross build -q --release --target="$LINUX_X86_TARGET"; then echo "Linux x86 artifact build: SUCCESS" cp "target/$LINUX_X86_TARGET/release/$NAME" "target/$LINUX_X86_TARGET/release/$NAME-linux-i386" strip "target/$LINUX_X86_TARGET/release/$NAME-linux-i386" - sha512sum "target/$LINUX_X86_TARGET/release/$NAME-linux-i386" >"target/$LINUX_X86_TARGET/release/$NAME-linux-i386.sha512" + sha512sum "target/$LINUX_X86_TARGET/release/$NAME-linux-i386" >"$BIN_OUTPUT_DIR/$NAME-linux-i386.sha512" + zip -q -j "$BIN_OUTPUT_DIR/$NAME-linux-i386.zip" "target/$LINUX_X86_TARGET/release/$NAME-linux-i386" else echo "Linux x86 artifact build: FAILED" fi @@ -38,7 +43,8 @@ if cross build -q --release --target="$WIN_TARGET"; then echo "Windows artifact build: SUCCESS" cp "target/$WIN_TARGET/release/$NAME.exe" "target/$WIN_TARGET/release/$NAME-windows.exe" strip "target/$WIN_TARGET/release/$NAME-windows.exe" - sha512sum "target/$WIN_TARGET/release/$NAME-windows.exe" >"target/$WIN_TARGET/release/$NAME-windows.exe.sha512" + sha512sum "target/$WIN_TARGET/release/$NAME-windows.exe" >"$BIN_OUTPUT_DIR/$NAME-windows.exe.sha512" + zip -q -j "$BIN_OUTPUT_DIR/$NAME-windows.zip" "target/$WIN_TARGET/release/$NAME-windows.exe" else echo "Windows artifact build: FAILED" fi @@ -49,7 +55,8 @@ if cross build -q --release --target="$ARMV7_TARGET"; then echo "ARMv7 artifact build: SUCCESS" cp "target/$ARMV7_TARGET/release/$NAME" "target/$ARMV7_TARGET/release/$NAME-armv7" strip "target/$ARMV7_TARGET/release/$NAME-armv7" - sha512sum "target/$ARMV7_TARGET/release/$NAME-armv7" >"target/$ARMV7_TARGET/release/$NAME-armv7.sha512" + sha512sum "target/$ARMV7_TARGET/release/$NAME-armv7" >"$BIN_OUTPUT_DIR/$NAME-armv7.sha512" + zip -q -j "$BIN_OUTPUT_DIR/$NAME-armv7.zip" "target/$ARMV7_TARGET/release/$NAME-armv7" else echo "ARMv7 artifact build: FAILED" fi @@ -60,18 +67,20 @@ if cross build -q --release --target="$AARCH_TARGET"; then echo "Aarch64 artifact build: SUCCESS" cp "target/$AARCH_TARGET/release/$NAME" "target/$AARCH_TARGET/release/$NAME-aarch64" strip "target/$AARCH_TARGET/release/$NAME-aarch64" - sha512sum "target/$AARCH_TARGET/release/$NAME-aarch64" >"target/$AARCH_TARGET/release/$NAME-aarch64.sha512" + sha512sum "target/$AARCH_TARGET/release/$NAME-aarch64" >"$BIN_OUTPUT_DIR/$NAME-aarch64.sha512" + zip -q -j "$BIN_OUTPUT_DIR/$NAME-aarch64.zip" "target/$AARCH_TARGET/release/$NAME-aarch64" else echo "Aarch64 artifact build: FAILED" fi -# Mac OS build +# # Mac OS build # echo "Building OSX artifact." # if CC=o64-clang CXX=o64-clang++ LIBZ_SYS_STATIC=1 cargo build -q --release --target="$OSX_TARGET"; then # echo "OSX artifact build: SUCCESS" # cp "target/$OSX_TARGET/release/$NAME" "target/$OSX_TARGET/release/$NAME-osx" # strip "target/$OSX_TARGET/release/$NAME-osx" # sha512sum "target/$OSX_TARGET/release/$NAME-osx" >"target/$OSX_TARGET/release/$NAME-osx.sha512" +# zip -q "$BIN_OUTPUT_DIR/$NAME-osx.zip" "target/$OSX_TARGET/release/$NAME-osx" # else # echo "OSX artifact build: FAILED" # fi From 87f9336cc2b773904b8c6fb23e47a2da71b95097 Mon Sep 17 00:00:00 2001 From: Eduard Tolosa Date: Sat, 2 Aug 2025 14:02:25 -0500 Subject: [PATCH 19/19] Update manpage and exclude binaries folder --- .gitignore | 1 + rusolver.1 | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index aaa3d0d..999c5cd 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ resolvers .gitignore wordlist +/ghbinaries \ No newline at end of file diff --git a/rusolver.1 b/rusolver.1 index 0084772..77de385 100644 --- a/rusolver.1 +++ b/rusolver.1 @@ -1,7 +1,7 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH RUSOLVER "1" "July 2025" "rusolver 0.10.0" "User Commands" +.TH RUSOLVER "1" "August 2025" "rusolver 0.10.2" "User Commands" .SH NAME -rusolver \- manual page for rusolver 0.10.0 +rusolver \- manual page for rusolver 0.10.2 .SH SYNOPSIS .B rusolver [\fI\,OPTIONS\/\fR]