From deb2f14f2bded909e6bdd550361a744fffb0fb96 Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:11:42 +0000 Subject: [PATCH 1/9] ci: bump actions/checkout version to 4 --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d844415..3f9935c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: with: toolchain: stable components: rustfmt - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Run rustfmt run: cargo fmt --all -- --check @@ -27,7 +27,7 @@ jobs: name: Job audit runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v4 - name: Run audit uses: actions-rs/audit-check@v1 with: @@ -43,7 +43,7 @@ jobs: with: toolchain: stable components: clippy - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Run clippy uses: actions-rs/clippy-check@v1 with: @@ -60,7 +60,7 @@ jobs: with: toolchain: stable components: clippy - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Run clippy windows service uses: actions-rs/clippy-check@v1 with: @@ -81,7 +81,7 @@ jobs: uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust_channel }} - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Run cargo test uses: actions-rs/cargo@v1 with: @@ -98,7 +98,7 @@ jobs: with: toolchain: nightly override: true - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Run cargo test uses: actions-rs/cargo@v1 with: From e3c1eb3e124157f6cf32aa526ef2be8421a5594b Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:19:21 +0000 Subject: [PATCH 2/9] ci: replace actions-rs/toolchain with dtolnay/rust-toolchain The actions-rs/toolchain is not maintained. --- .github/workflows/ci.yml | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f9935c..01575b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,9 +15,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Install toolchain with rustfmt - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: - toolchain: stable components: rustfmt - uses: actions/checkout@v4 - name: Run rustfmt @@ -39,9 +38,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Install toolchain with clippy - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: - toolchain: stable components: clippy - uses: actions/checkout@v4 - name: Run clippy @@ -56,9 +54,8 @@ jobs: runs-on: windows-latest steps: - name: Install toolchain with clippy - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: - toolchain: stable components: clippy - uses: actions/checkout@v4 - name: Run clippy windows service @@ -78,7 +75,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Install toolchain ${{ matrix.rust_channel }} on ${{ matrix.os }} - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@master with: toolchain: ${{ matrix.rust_channel }} - uses: actions/checkout@v4 @@ -94,10 +91,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Intall toolchain nightly on ubuntu-latest - uses: actions-rs/toolchain@v1 - with: - toolchain: nightly - override: true + uses: dtolnay/rust-toolchain@stable - uses: actions/checkout@v4 - name: Run cargo test uses: actions-rs/cargo@v1 From b792cec796f15467dcae4fbcd011a873780dddcb Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:20:49 +0000 Subject: [PATCH 3/9] ci: remove Job audit --- .github/workflows/ci.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 01575b4..25914b9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,16 +22,6 @@ jobs: - name: Run rustfmt run: cargo fmt --all -- --check - audit: - name: Job audit - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Run audit - uses: actions-rs/audit-check@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - clippy: name: Job clippy needs: rustfmt From d0358bf9c4064b3d311ffdc968068e64ee1cd07b Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:25:44 +0000 Subject: [PATCH 4/9] ci: replace actions-rs/clippy-check with giraffate/clippy-action The actions-rs/clippy-check is not maintained. --- .github/workflows/ci.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25914b9..3c2ee77 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,10 +33,11 @@ jobs: components: clippy - uses: actions/checkout@v4 - name: Run clippy - uses: actions-rs/clippy-check@v1 + uses: giraffate/clippy-action@v1 with: - token: ${{ secrets.GITHUB_TOKEN }} - args: -- --deny warnings -A clippy::unknown-clippy-lints + reporter: 'github-pr-check' + github_token: ${{ secrets.GITHUB_TOKEN }} + clippy_flags: --deny warnings -A clippy::unknown-clippy-lints clippy-windows-service: name: Job clippy windows service @@ -49,10 +50,11 @@ jobs: components: clippy - uses: actions/checkout@v4 - name: Run clippy windows service - uses: actions-rs/clippy-check@v1 + uses: giraffate/clippy-action@v1 with: - token: ${{ secrets.GITHUB_TOKEN }} - args: --bin windows-service --features main-windows-service -- --deny warnings -A clippy::unknown-clippy-lints + reporter: 'github-pr-check' + github_token: ${{ secrets.GITHUB_TOKEN }} + clippy_flags: --bin windows-service --features main-windows-service -- --deny warnings -A clippy::unknown-clippy-lints tests: name: Job tests From 9177d53e03d9cea11c3d16a66f2fa3c54b0680ba Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:27:10 +0000 Subject: [PATCH 5/9] ci: remove Job code coverage --- .github/workflows/ci.yml | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c2ee77..9a5bd69 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -77,25 +77,3 @@ jobs: command: test args: --no-default-features --features "${{ matrix.features }}" - code-coverage: - name: Job code coverage - needs: tests - runs-on: ubuntu-latest - steps: - - name: Intall toolchain nightly on ubuntu-latest - uses: dtolnay/rust-toolchain@stable - - uses: actions/checkout@v4 - - name: Run cargo test - uses: actions-rs/cargo@v1 - with: - command: test - env: - CARGO_INCREMENTAL: '0' - RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests' - RUSTDOCFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests' - - name: Run grcov - uses: actions-rs/grcov@v0.1 - - name: Upload coverage - uses: codecov/codecov-action@v1 - with: - file: ${{ steps.coverage.outputs.report }} From 53f964a54c81eeb38c7a46b1c32262b18df85141 Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:28:14 +0000 Subject: [PATCH 6/9] ci: replace actions-rs/cargo with run The actions-rs/cargo is not maintained. --- .github/workflows/ci.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9a5bd69..b8e5d38 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,8 +72,5 @@ jobs: toolchain: ${{ matrix.rust_channel }} - uses: actions/checkout@v4 - name: Run cargo test - uses: actions-rs/cargo@v1 - with: - command: test - args: --no-default-features --features "${{ matrix.features }}" + run: cargo test --no-default-features --features "${{ matrix.features }}" From e325ca1e35853976bfb8fcdca77d2f062cbf7ec9 Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:31:43 +0000 Subject: [PATCH 7/9] chore: bump dependencies to the latest version --- Cargo.lock | 1189 +++++++++++++++++++++++------------ Cargo.toml | 42 +- README.md | 118 ++-- completions/Cargo.lock | 1140 +++++++++++++++++++++++---------- completions/Cargo.toml | 2 +- completions/_doh-client | 59 +- completions/_doh-client.ps1 | 59 +- completions/doh-client.bash | 26 +- completions/doh-client.elv | 17 +- completions/doh-client.fish | 15 +- src/cmd/app.rs | 120 ++-- src/cmd/listen_config.rs | 9 +- src/cmd/remote_host.rs | 28 +- src/config.rs | 36 +- src/helper.rs | 53 +- src/remote/config.rs | 2 +- src/remote/helper.rs | 9 +- src/remote/host.rs | 2 +- src/remote/session.rs | 10 +- tests/base64url.rs | 6 +- 20 files changed, 1877 insertions(+), 1065 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 31c72d3..b9b89ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,55 +1,142 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "ahash" -version = "0.7.6" +name = "addr2line" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "getrandom", - "once_cell", - "version_check", + "gimli", ] +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "aho-corasick" -version = "0.7.19" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anstream" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + [[package]] name = "async-http-proxy" version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29faa5d4d308266048bd7505ba55484315a890102f9345b9ff4b87de64201592" dependencies = [ - "base64", + "base64 0.13.1", "httparse", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] -name = "atty" -version = "0.2.14" +name = "atomic-waker" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "aws-lc-rs" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" dependencies = [ - "hermit-abi", - "libc", - "winapi", + "aws-lc-sys", + "zeroize", ] [[package]] -name = "autocfg" -version = "1.1.0" +name = "aws-lc-sys" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "backtrace" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] [[package]] name = "base64" @@ -57,11 +144,40 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bindgen" +version = "0.69.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", + "which", +] + [[package]] name = "bitflags" -version = "1.3.2" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" [[package]] name = "block-buffer" @@ -84,12 +200,6 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "bumpalo" -version = "3.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" - [[package]] name = "byte-tools" version = "0.3.1" @@ -98,58 +208,100 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.2.1" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.0.74" +version = "1.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581f5dba903aac52ea3feb5ec4810848460ee833876f1f9b0fdeab1f19091574" +checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "clang-sys" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] [[package]] name = "clap" -version = "3.2.23" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" dependencies = [ - "atty", - "bitflags", + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" +dependencies = [ + "anstream", + "anstyle", "clap_lex", - "indexmap", - "once_cell", "strsim", - "termcolor", - "textwrap", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "cmake" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" dependencies = [ - "os_str_bytes", + "cc", ] +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -157,9 +309,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "digest" @@ -172,14 +324,14 @@ dependencies = [ [[package]] name = "dns-message-parser" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6051c76d5ba35c0b5f7d99c3604348467a4933310bdc7a2ba879f8218f3382d" +checksum = "2b7668abb61ae38907f7f6b9fa6396818448b2bc566e1a869c1631d70724e3f9" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "hex", - "thiserror", + "thiserror 2.0.16", ] [[package]] @@ -187,7 +339,7 @@ name = "doh-client" version = "3.1.2" dependencies = [ "async-http-proxy", - "base64", + "base64 0.22.1", "bytes", "clap", "dns-message-parser", @@ -202,46 +354,64 @@ dependencies = [ "rustls", "rustls-native-certs", "rustls-pemfile", - "thiserror", + "rustls-pki-types", + "thiserror 2.0.16", "tokio", "tokio-rustls", "tokio-socks", - "webpki", "windows-service", "winlog", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "either" -version = "1.8.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] -name = "env_logger" -version = "0.9.1" +name = "env_filter" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ - "atty", - "humantime", "log", "regex", - "termcolor", ] [[package]] -name = "err-derive" -version = "0.3.1" +name = "env_logger" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34a887c8df3ed90498c1c437ce21f211c8e27672921a8ffa293cb8d6d4caa9e" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "rustversion", - "syn", - "synstructure", + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", ] [[package]] @@ -256,11 +426,23 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[package]] name = "futures" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -273,9 +455,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -283,15 +465,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -300,15 +482,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -317,21 +499,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -356,26 +538,50 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "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 = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", - "wasi", + "r-efi", + "wasi 0.14.3+wasi-0.2.4", ] +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "h2" -version = "0.3.15" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", "indexmap", "slab", @@ -386,20 +592,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "libc", + "allocator-api2", + "equivalent", + "foldhash", ] [[package]] @@ -408,11 +607,20 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "http" -version = "0.2.8" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -421,104 +629,197 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "humantime" -version = "2.1.0" +name = "indexmap" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +dependencies = [ + "equivalent", + "hashbrown", +] [[package]] -name = "indexmap" -version = "1.9.1" +name = "io-uring" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "autocfg", - "hashbrown", + "bitflags", + "cfg-if", + "libc", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", ] [[package]] name = "itoa" -version = "1.0.4" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "js-sys" -version = "0.3.60" +name = "jiff" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" dependencies = [ - "wasm-bindgen", + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.3", + "libc", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lazycell" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.137" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] -name = "log" -version = "0.4.17" +name = "libloading" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", + "windows-targets 0.53.3", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + [[package]] name = "lru" -version = "0.8.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" dependencies = [ "hashbrown", ] [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] [[package]] name = "mio" -version = "0.8.5" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ "libc", - "log", - "wasi", - "windows-sys 0.42.0", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] -name = "num_cpus" -version = "1.13.1" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "hermit-abi", - "libc", + "memchr", + "minimal-lexical", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", ] [[package]] name = "once_cell" -version = "1.16.0" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "opaque-debug" @@ -528,21 +829,15 @@ checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" - -[[package]] -name = "os_str_bytes" -version = "6.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3baf96e39c5359d2eb0dd6ccb42c62b91d9678aa68160d261b9e0ccbf9e9dea9" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -551,52 +846,71 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "proc-macro-error" -version = "1.0.4" +name = "portable-atomic" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", + "portable-atomic", ] [[package]] -name = "proc-macro-error-attr" -version = "1.0.4" +name = "prettyplease" +version = "0.2.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "quote", - "version_check", + "syn", ] [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.21" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "regex" -version = "1.6.0" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", @@ -605,89 +919,120 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "ring" -version = "0.16.20" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", + "cfg-if", + "getrandom 0.2.16", "libc", - "once_cell", - "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.20.7" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "539a2bfe908f471bfa933876bd1eb6a19cf2176d375f82ef7f99530a40e48c2c" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ + "aws-lc-rs", "log", - "ring", - "sct", - "webpki", + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.6.2" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile", + "rustls-pki-types", "schannel", "security-framework", ] [[package]] name = "rustls-pemfile" -version = "1.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", ] [[package]] -name = "rustversion" -version = "1.0.9" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] [[package]] -name = "schannel" -version = "0.1.20" +name = "rustls-webpki" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] -name = "sct" -version = "0.7.0" +name = "schannel" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "ring", - "untrusted", + "windows-sys 0.59.0", ] [[package]] name = "security-framework" -version = "2.7.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ "bitflags", "core-foundation", @@ -698,14 +1043,34 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", ] +[[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", +] + [[package]] name = "sha2" version = "0.8.2" @@ -718,42 +1083,45 @@ dependencies = [ "opaque-debug", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "slab" -version = "0.4.7" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "socket2" -version = "0.4.7" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "winapi", + "windows-sys 0.59.0", ] [[package]] -name = "spin" -version = "0.5.2" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "strsim" -version = "0.10.0" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.103" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", @@ -761,46 +1129,39 @@ dependencies = [ ] [[package]] -name = "synstructure" -version = "0.12.6" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "proc-macro2", - "quote", - "syn", - "unicode-xid", + "thiserror-impl 1.0.69", ] [[package]] -name = "termcolor" -version = "1.1.3" +name = "thiserror" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" dependencies = [ - "winapi-util", + "thiserror-impl 2.0.16", ] [[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - -[[package]] -name = "thiserror" -version = "1.0.37" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "thiserror-impl" -version = "1.0.37" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -809,27 +1170,27 @@ dependencies = [ [[package]] name = "tokio" -version = "1.20.2" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4761e560a37f74e62fbcce107b99a8e54445c1009cf643848f6ae6606cb06c67" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ - "autocfg", + "backtrace", "bytes", + "io-uring", "libc", - "memchr", "mio", - "num_cpus", "pin-project-lite", + "slab", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "tokio-macros" -version = "1.8.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", @@ -838,176 +1199,114 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] name = "tokio-socks" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.3" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ "once_cell", ] [[package]] name = "typenum" -version = "1.15.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" - -[[package]] -name = "unicode-xid" -version = "0.2.4" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "version_check" -version = "0.9.4" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[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 = "wasm-bindgen" -version = "0.2.83" +name = "wasi" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "cfg-if", - "wasm-bindgen-macro", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" +name = "which" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ - "bumpalo", - "log", + "either", + "home", "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" - -[[package]] -name = "web-sys" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", + "rustix", ] [[package]] name = "widestring" -version = "1.0.2" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" [[package]] name = "winapi" @@ -1025,132 +1324,184 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-service" -version = "0.5.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917fdb865e7ff03af9dd86609f8767bc88fefba89e8efd569de8e208af8724b3" +checksum = "193cae8e647981c35bc947fdd57ba7928b1fa0d4a79305f6dd2dc55221ac35ac" dependencies = [ "bitflags", - "err-derive", "widestring", - "windows-sys 0.36.1", + "windows-sys 0.59.0", ] [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", + "windows-targets 0.52.6", ] [[package]] name = "windows-sys" -version = "0.42.0" +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-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winlog" @@ -1173,3 +1524,15 @@ checksum = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a" dependencies = [ "winapi", ] + +[[package]] +name = "wit-bindgen" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/Cargo.toml b/Cargo.toml index f7fa00b..11cd2d5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,25 +30,25 @@ native-certs = ["rustls-native-certs"] main-windows-service = ["windows-service", "winlog"] [dependencies] -libc = "~0.2.137" -base64 = "~0.13.1" -log = "~0.4.17" -env_logger = "~0.9.1" -tokio-rustls = "~0.23.4" -futures = "~0.3.25" -h2 = "~0.3.15" -http = "~0.2.8" -rustls = "~0.20.7" -rustls-pemfile = "~1.0.1" -webpki = "~0.22.0" -bytes = "~1.2.1" -lru = "~0.8.1" -dns-message-parser = "~0.7.0" -lazy_static = "~1.4.0" -thiserror = "~1.0.37" +libc = "~0.2.175" +base64 = "~0.22.1" +log = "~0.4.27" +env_logger = "~0.11.8" +futures = "~0.3.31" +h2 = "~0.4.12" +http = "~1.3.1" +lru = "~0.16.0" +rustls = "~0.23.31" +rustls-pki-types = "~1.12.0" +rustls-pemfile = "~2.2.0" +tokio-rustls = "~0.26.2" +dns-message-parser = "~0.9.0" +bytes = "~1.10.1" +lazy_static = "~1.5.0" +thiserror = "~2.0.16" [dependencies.clap] -version = "~3.2.23" +version = "~4.5.46" features = ["cargo"] [dependencies.async-http-proxy] @@ -57,19 +57,19 @@ optional = true features = ["runtime-tokio", "basic-auth"] [dependencies.tokio-socks] -version = "~0.5.1" +version = "~0.5.2" optional = true [dependencies.tokio] -version = "~1.20.2" +version = "~1.47.1" features = ["rt-multi-thread", "net", "time", "macros"] [dependencies.rustls-native-certs] -version = "~0.6.2" +version = "~0.8.1" optional = true [dependencies.windows-service] -version = "~0.5.0" +version = "~0.8.0" optional = true [dependencies.winlog] diff --git a/README.md b/README.md index 20847a1..8d0842c 100644 --- a/README.md +++ b/README.md @@ -121,86 +121,60 @@ This example will connect to the Cloudflare DNS service. contains the trusted CA certificates. ``` $ ./doh-client --help -DNS over HTTPS client 3.1.2 -LinkTed Open a local UDP (DNS) port and forward DNS queries to a remote HTTP/2.0 server. By default, the client will connect to the Cloudflare DNS service. This binary uses the env_logger as logger implementations. See https://github.com/sebasmagri/env_logger/ -USAGE: - doh-client [OPTIONS] [CAFILE] +Usage: doh-client [OPTIONS] [CAFILE] -ARGS: - The path to the pem file, which contains the trusted CA certificates - If no path is given then the platform's native certificate store will be used - -OPTIONS: - -c, --cache-size - The size of the private HTTP cache - If the size is 0 then the private HTTP cache is not used (ignores cache-control) - [default: 1024] - - --cache-fallback - Use expired cache entries if no response is received from the server - - --client-auth-certs - The path to the pem file, which contains the certificates for the client authentication - - --client-auth-key - The path to the pem file, which contains the key for the client authentication - - -d, --domain - The domain name of the remote server [default: cloudflare-dns.com] - - -g, --get - Use the GET method for the HTTP/2.0 request - - -h, --help - Print help information - - -l, --listen-addr - Listen address [default: 127.0.0.1:53] - - --listen-activation - Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() under Mac OS - - -p, --path - The path of the URI [default: dns-query] - - --proxy-credentials - The credentials for the proxy - - --proxy-host - Socks5 or HTTP CONNECT proxy host (see below) - - --proxy-https-cafile - The path to the pem file, which contains the trusted CA certificates for the https proxy +Arguments: + [CAFILE] The path to the pem file, which contains the trusted CA certificates If no path is given then the platform's native certificate store will be used - --proxy-https-domain - The domain name of the https proxy - - --proxy-scheme - The protocol of the proxy [possible values: socks5, socks5h, http, https] - - -r, --remote-host - Remote address/domain to the DOH server (see below) [default: 1.1.1.1:443] - - --retries - The number of retries to connect to the remote server [default: 3] - - -t, --timeout - The time in seconds after that the connection would be closed if no response is received - from the server [default: 2] - - -V, --version - Print version information - -CAUTION: If a domain name is used for a value instead of an IP address the system -resolver will be used to resolve the IP address of the domain name. If the `doh-client` is -configured as system resolver, then it will NOT WORK. It is recommended to always use an IP address -for values. +Options: + -l, --listen-addr + Listen address [default: 127.0.0.1:53] + --listen-activation + Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() under Mac OS + -r, --remote-host + Remote address/domain to the DOH server (see below) [default: 1.1.1.1:443] + -d, --domain + The domain name of the remote server [default: cloudflare-dns.com] + --retries + The number of retries to connect to the remote server [default: 3] + -t, --timeout + The time in seconds after that the connection would be closed if no response is received from the server [default: 2] + -p, --path + The path of the URI [default: dns-query] + -g, --get + Use the GET method for the HTTP/2.0 request + -c, --cache-size + The size of the private HTTP cache + If the size is 0 then the private HTTP cache is not used (ignores cache-control) [default: 1024] + --cache-fallback + Use expired cache entries if no response is received from the server + --client-auth-certs + The path to the pem file, which contains the certificates for the client authentication + --client-auth-key + The path to the pem file, which contains the key for the client authentication + --proxy-host + Socks5 or HTTP CONNECT proxy host (see below) + --proxy-scheme + The protocol of the proxy [possible values: socks5, socks5h, http, https] + --proxy-credentials + The credentials for the proxy + --proxy-https-cafile + The path to the pem file, which contains the trusted CA certificates for the https proxy + If no path is given then the platform's native certificate store will be used + --proxy-https-domain + The domain name of the https proxy + -h, --help + Print help + -V, --version + Print version + +CAUTION: If a domain name is used for a value instead of an IP address the system resolver will be used to resolve the IP address of the domain name. If the `doh-client` is configured as system resolver, then it will NOT WORK. It is recommended to always use an IP address for values. ``` ## Cache performance diff --git a/completions/Cargo.lock b/completions/Cargo.lock index 1bab3c7..0d49bbe 100644 --- a/completions/Cargo.lock +++ b/completions/Cargo.lock @@ -1,117 +1,278 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "ahash" -version = "0.7.6" +name = "addr2line" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ - "getrandom", - "once_cell", - "version_check", + "gimli", ] +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + [[package]] name = "aho-corasick" -version = "0.7.18" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "anstream" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" +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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2" +dependencies = [ + "windows-sys 0.60.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.60.2", +] + [[package]] name = "async-http-proxy" version = "1.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "29faa5d4d308266048bd7505ba55484315a890102f9345b9ff4b87de64201592" dependencies = [ - "base64", + "base64 0.13.1", "httparse", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] -name = "atty" -version = "0.2.14" +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "aws-lc-rs" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" +dependencies = [ + "aws-lc-sys", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" +dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "backtrace" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ - "hermit-abi", + "addr2line", + "cfg-if", "libc", - "winapi", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] -name = "autocfg" -version = "1.1.0" +name = "base64" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.13.0" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "bitflags" -version = "1.3.2" +name = "bindgen" +version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "itertools", + "lazy_static", + "lazycell", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", + "which", +] [[package]] -name = "bumpalo" -version = "3.9.1" +name = "bitflags" +version = "2.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" [[package]] name = "bytes" -version = "1.1.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.0.73" +version = "1.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "clang-sys" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] [[package]] name = "clap" -version = "3.1.5" +version = "4.5.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced1892c55c910c1219e98d6fc8d71f6bddba7905866ce740066d8bfea859312" +checksum = "2c5e4fcf9c21d2e544ca1ee9d8552de13019a42aa7dbf32747fa7aaf1df76e57" dependencies = [ - "atty", - "bitflags", - "indexmap", - "lazy_static", - "os_str_bytes", + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fecb53a0e6fcfb055f686001bc2e2592fa527efaf38dbe81a6a9563562e57d41" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", "strsim", - "termcolor", - "textwrap", ] [[package]] name = "clap_complete" -version = "3.1.1" +version = "4.5.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6f3613c0a3cddfd78b41b10203eb322cb29b600cbdf808a7d3db95691b8e25" +checksum = "4d9501bd3f5f09f7bbee01da9a511073ed30a80cd7a509f1214bb74eadea71ad" dependencies = [ "clap", ] +[[package]] +name = "clap_lex" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + +[[package]] +name = "cmake" +version = "0.1.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +dependencies = [ + "cc", +] + +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "completions" version = "0.1.0" @@ -122,9 +283,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" dependencies = [ "core-foundation-sys", "libc", @@ -132,28 +293,28 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "dns-message-parser" -version = "0.6.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b393503f9263e08ba3efe0a3578cdde90d6da5ae1af232cc338640670451c992" +checksum = "2b7668abb61ae38907f7f6b9fa6396818448b2bc566e1a869c1631d70724e3f9" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "hex", - "thiserror", + "thiserror 2.0.16", ] [[package]] name = "doh-client" -version = "3.1.1" +version = "3.1.2" dependencies = [ "async-http-proxy", - "base64", + "base64 0.22.1", "bytes", "clap", "dns-message-parser", @@ -167,31 +328,63 @@ dependencies = [ "lru", "rustls", "rustls-native-certs", - "rustls-pemfile 0.3.0", - "thiserror", + "rustls-pemfile", + "rustls-pki-types", + "thiserror 2.0.16", "tokio", "tokio-rustls", "tokio-socks", - "webpki", ] +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + [[package]] name = "either" -version = "1.6.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] -name = "env_logger" -version = "0.9.0" +name = "env_filter" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ - "atty", - "humantime", "log", "regex", - "termcolor", +] + +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" +dependencies = [ + "libc", + "windows-sys 0.60.2", ] [[package]] @@ -200,11 +393,23 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + [[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", @@ -217,9 +422,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", @@ -227,15 +432,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", @@ -244,15 +449,15 @@ 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", @@ -261,21 +466,21 @@ dependencies = [ [[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", @@ -291,26 +496,50 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.5" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d39cd93900197114fa1fcb7ae84ca742095eed9442088988ae74fa744e930e77" +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.3+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + [[package]] name = "h2" -version = "0.3.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", "indexmap", "slab", @@ -321,20 +550,13 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hermit-abi" -version = "0.1.19" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "libc", + "allocator-api2", + "equivalent", + "foldhash", ] [[package]] @@ -343,11 +565,20 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "http" -version = "0.2.6" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ "bytes", "fnv", @@ -356,144 +587,209 @@ dependencies = [ [[package]] name = "httparse" -version = "1.6.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "humantime" -version = "2.1.0" +name = "indexmap" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" +dependencies = [ + "equivalent", + "hashbrown", +] [[package]] -name = "indexmap" -version = "1.8.0" +name = "io-uring" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" dependencies = [ - "autocfg", - "hashbrown", + "bitflags", + "cfg-if", + "libc", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", ] [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] -name = "js-sys" -version = "0.3.56" +name = "jiff" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49" dependencies = [ - "wasm-bindgen", + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "jiff-static" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.3", + "libc", ] [[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 = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.119" +version = "0.2.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" [[package]] -name = "log" -version = "0.4.14" +name = "libloading" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", + "windows-targets 0.53.3", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + [[package]] name = "lru" -version = "0.7.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb87f3080f6d1d69e8c564c0fcfde1d7aa8cc451ce40cae89479111f03bc0eb" +checksum = "86ea4e65087ff52f3862caff188d489f1fab49a0cb09e01b2e3f1a617b10aaed" dependencies = [ "hashbrown", ] [[package]] name = "memchr" -version = "2.4.1" +version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" [[package]] -name = "mio" -version = "0.8.0" +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba272f85fa0b41fc91872be579b3bbe0f56b792aa361a380eb669469f68dafb2" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "libc", - "log", - "miow", - "ntapi", - "winapi", + "adler2", ] [[package]] -name = "miow" -version = "0.3.7" +name = "mio" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ - "winapi", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.59.0", ] [[package]] -name = "ntapi" -version = "0.3.7" +name = "nom" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ - "winapi", + "memchr", + "minimal-lexical", ] [[package]] -name = "num_cpus" -version = "1.13.1" +name = "object" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ - "hermit-abi", - "libc", + "memchr", ] [[package]] name = "once_cell" -version = "1.10.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] -name = "openssl-probe" -version = "0.1.5" +name = "once_cell_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] -name = "os_str_bytes" -version = "6.0.0" +name = "openssl-probe" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[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" @@ -501,29 +797,72 @@ 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 = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" dependencies = [ - "unicode-xid", + "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 = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "regex" -version = "1.5.4" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" dependencies = [ "aho-corasick", "memchr", @@ -532,92 +871,120 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" [[package]] name = "ring" -version = "0.16.20" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", + "cfg-if", + "getrandom 0.2.16", "libc", - "once_cell", - "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.20.4" +version = "0.23.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" +checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" dependencies = [ + "aws-lc-rs", "log", - "ring", - "sct", - "webpki", + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.6.1" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" dependencies = [ "openssl-probe", - "rustls-pemfile 0.2.1", + "rustls-pki-types", "schannel", "security-framework", ] [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64", + "rustls-pki-types", ] [[package]] -name = "rustls-pemfile" -version = "0.3.0" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "base64", + "zeroize", ] [[package]] -name = "schannel" -version = "0.1.19" +name = "rustls-webpki" +version = "0.103.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" dependencies = [ - "lazy_static", - "winapi", + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] -name = "sct" -version = "0.7.0" +name = "schannel" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "ring", - "untrusted", + "windows-sys 0.59.0", ] [[package]] name = "security-framework" -version = "2.6.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" dependencies = [ "bitflags", "core-foundation", @@ -628,82 +995,113 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", ] +[[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", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "slab" -version = "0.4.5" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "socket2" -version = "0.4.4" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" dependencies = [ "libc", - "winapi", + "windows-sys 0.59.0", ] [[package]] -name = "spin" -version = "0.5.2" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "strsim" -version = "0.10.0" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "1.0.86" +version = "2.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] -name = "termcolor" -version = "1.1.3" +name = "thiserror" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "winapi-util", + "thiserror-impl 1.0.69", ] [[package]] -name = "textwrap" -version = "0.15.0" +name = "thiserror" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +dependencies = [ + "thiserror-impl 2.0.16", +] [[package]] -name = "thiserror" -version = "1.0.30" +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "2.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", @@ -712,26 +1110,27 @@ dependencies = [ [[package]] name = "tokio" -version = "1.17.0" +version = "1.47.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" dependencies = [ + "backtrace", "bytes", + "io-uring", "libc", - "memchr", "mio", - "num_cpus", "pin-project-lite", + "slab", "socket2", "tokio-macros", - "winapi", + "windows-sys 0.59.0", ] [[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", @@ -740,186 +1139,273 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" dependencies = [ "rustls", "tokio", - "webpki", ] [[package]] name = "tokio-socks" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" dependencies = [ "either", "futures-util", - "thiserror", + "thiserror 1.0.69", "tokio", ] [[package]] name = "tokio-util" -version = "0.6.9" +version = "0.7.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" dependencies = [ "bytes", "futures-core", "futures-sink", - "log", "pin-project-lite", "tokio", ] [[package]] name = "tracing" -version = "0.1.31" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-core", ] [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "unicode-ident" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] -name = "version_check" -version = "0.9.4" +name = "utf8parse" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasm-bindgen" -version = "0.2.79" +name = "wasi" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "cfg-if", - "wasm-bindgen-macro", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.79" +name = "which" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", + "either", + "home", + "once_cell", + "rustix", ] [[package]] -name = "wasm-bindgen-macro" -version = "0.2.79" +name = "windows-link" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" [[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.79" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", + "windows-targets 0.52.6", ] [[package]] -name = "wasm-bindgen-shared" -version = "0.2.79" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] -name = "web-sys" -version = "0.3.56" +name = "windows-sys" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "js-sys", - "wasm-bindgen", + "windows-targets 0.53.3", ] [[package]] -name = "webpki" -version = "0.22.0" +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "ring", - "untrusted", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] -name = "winapi" -version = "0.3.9" +name = "windows-targets" +version = "0.53.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", ] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "windows_aarch64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] -name = "winapi-util" -version = "0.1.5" +name = "windows_aarch64_gnullvm" +version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + +[[package]] +name = "wit-bindgen" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "zeroize" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" diff --git a/completions/Cargo.toml b/completions/Cargo.toml index 5ec703b..360c375 100644 --- a/completions/Cargo.toml +++ b/completions/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -clap_complete = "~3.1.1" +clap_complete = "~4.5.57" [dependencies.doh-client] path = ".." diff --git a/completions/_doh-client b/completions/_doh-client index 56bcd90..4f59f83 100644 --- a/completions/_doh-client +++ b/completions/_doh-client @@ -14,40 +14,37 @@ _doh-client() { fi local context curcontext="$curcontext" state line - _arguments "${_arguments_options[@]}" \ -'(--listen-activation)-l+[Listen address \[default: 127.0.0.1:53\]]:Addr:Port: ' \ -'(--listen-activation)--listen-addr=[Listen address \[default: 127.0.0.1:53\]]:Addr:Port: ' \ -'-r+[Remote address/domain to the DOH server (see below)]:Addr/Domain:Port: ' \ -'--remote-host=[Remote address/domain to the DOH server (see below)]:Addr/Domain:Port: ' \ -'-d+[The domain name of the remote server]:Domain: ' \ -'--domain=[The domain name of the remote server]:Domain: ' \ -'--retries=[The number of retries to connect to the remote server]:UNSIGNED INT: ' \ -'-t+[The time in seconds after that the connection would be closed if no response is received from the server]:UNSIGNED LONG: ' \ -'--timeout=[The time in seconds after that the connection would be closed if no response is received from the server]:UNSIGNED LONG: ' \ -'-p+[The path of the URI]:STRING: ' \ -'--path=[The path of the URI]:STRING: ' \ -'-c+[The size of the private HTTP cache -If the size is 0 then the private HTTP cache is not used (ignores cache-control)]:UNSIGNED LONG: ' \ -'--cache-size=[The size of the private HTTP cache -If the size is 0 then the private HTTP cache is not used (ignores cache-control)]:UNSIGNED LONG: ' \ -'--client-auth-certs=[The path to the pem file, which contains the certificates for the client authentication]:CERTSFILE: ' \ -'--client-auth-key=[The path to the pem file, which contains the key for the client authentication]:KEYFILE: ' \ -'--proxy-host=[Socks5 or HTTP CONNECT proxy host (see below)]:Addr/Domain:Port: ' \ + _arguments "${_arguments_options[@]}" : \ +'(--listen-activation)-l+[Listen address \[default\: 127.0.0.1\:53\]]:Addr:Port:_default' \ +'(--listen-activation)--listen-addr=[Listen address \[default\: 127.0.0.1\:53\]]:Addr:Port:_default' \ +'-r+[Remote address/domain to the DOH server (see below)]:Addr/Domain:Port:_default' \ +'--remote-host=[Remote address/domain to the DOH server (see below)]:Addr/Domain:Port:_default' \ +'-d+[The domain name of the remote server]:Domain:_default' \ +'--domain=[The domain name of the remote server]:Domain:_default' \ +'--retries=[The number of retries to connect to the remote server]:UNSIGNED INT:_default' \ +'-t+[The time in seconds after that the connection would be closed if no response is received from the server]:UNSIGNED LONG:_default' \ +'--timeout=[The time in seconds after that the connection would be closed if no response is received from the server]:UNSIGNED LONG:_default' \ +'-p+[The path of the URI]:STRING:_default' \ +'--path=[The path of the URI]:STRING:_default' \ +'-c+[The size of the private HTTP cache If the size is 0 then the private HTTP cache is not used (ignores cache-control)]:UNSIGNED LONG:_default' \ +'--cache-size=[The size of the private HTTP cache If the size is 0 then the private HTTP cache is not used (ignores cache-control)]:UNSIGNED LONG:_default' \ +'--client-auth-certs=[The path to the pem file, which contains the certificates for the client authentication]:CERTSFILE:_default' \ +'--client-auth-key=[The path to the pem file, which contains the key for the client authentication]:KEYFILE:_default' \ +'--proxy-host=[Socks5 or HTTP CONNECT proxy host (see below)]:Addr/Domain:Port:_default' \ '--proxy-scheme=[The protocol of the proxy]: :(socks5 socks5h http https)' \ -'--proxy-credentials=[The credentials for the proxy]:Username:Password: ' \ -'--proxy-https-cafile=[The path to the pem file, which contains the trusted CA certificates for the https proxy -If no path is given then the platform'\''s native certificate store will be used]:CAFILE: ' \ -'--proxy-https-domain=[The domain name of the https proxy]:Domain: ' \ -'-h[Print help information]' \ -'--help[Print help information]' \ -'-V[Print version information]' \ -'--version[Print version information]' \ +'--proxy-credentials=[The credentials for the proxy]:Username:Password:_default' \ +'--proxy-https-cafile=[The path to the pem file, which contains the trusted CA certificates for the https proxy If no path is given then the platform'\''s native certificate store will be used]:CAFILE:_default' \ +'--proxy-https-domain=[The domain name of the https proxy]:Domain:_default' \ '(-l --listen-addr)--listen-activation[Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() under Mac OS]' \ '-g[Use the GET method for the HTTP/2.0 request]' \ '--get[Use the GET method for the HTTP/2.0 request]' \ '--cache-fallback[Use expired cache entries if no response is received from the server]' \ +'-h[Print help]' \ +'--help[Print help]' \ +'-V[Print version]' \ +'--version[Print version]' \ '::cafile -- The path to the pem file, which contains the trusted CA certificates -If no path is given then the platform'\''s native certificate store will be used:' \ +If no path is given then the platform'\''s native certificate store will be used:_default' \ && ret=0 } @@ -57,4 +54,8 @@ _doh-client_commands() { _describe -t commands 'doh-client commands' commands "$@" } -_doh-client "$@" +if [ "$funcstack[1]" = "_doh-client" ]; then + _doh-client "$@" +else + compdef _doh-client doh-client +fi diff --git a/completions/_doh-client.ps1 b/completions/_doh-client.ps1 index a8aec9d..c90e890 100644 --- a/completions/_doh-client.ps1 +++ b/completions/_doh-client.ps1 @@ -21,37 +21,34 @@ Register-ArgumentCompleter -Native -CommandName 'doh-client' -ScriptBlock { $completions = @(switch ($command) { 'doh-client' { - [CompletionResult]::new('-l', 'l', [CompletionResultType]::ParameterName, 'Listen address [default: 127.0.0.1:53]') - [CompletionResult]::new('--listen-addr', 'listen-addr', [CompletionResultType]::ParameterName, 'Listen address [default: 127.0.0.1:53]') - [CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Remote address/domain to the DOH server (see below)') - [CompletionResult]::new('--remote-host', 'remote-host', [CompletionResultType]::ParameterName, 'Remote address/domain to the DOH server (see below)') - [CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'The domain name of the remote server') - [CompletionResult]::new('--domain', 'domain', [CompletionResultType]::ParameterName, 'The domain name of the remote server') - [CompletionResult]::new('--retries', 'retries', [CompletionResultType]::ParameterName, 'The number of retries to connect to the remote server') - [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'The time in seconds after that the connection would be closed if no response is received from the server') - [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'The time in seconds after that the connection would be closed if no response is received from the server') - [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'The path of the URI') - [CompletionResult]::new('--path', 'path', [CompletionResultType]::ParameterName, 'The path of the URI') - [CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'The size of the private HTTP cache -If the size is 0 then the private HTTP cache is not used (ignores cache-control)') - [CompletionResult]::new('--cache-size', 'cache-size', [CompletionResultType]::ParameterName, 'The size of the private HTTP cache -If the size is 0 then the private HTTP cache is not used (ignores cache-control)') - [CompletionResult]::new('--client-auth-certs', 'client-auth-certs', [CompletionResultType]::ParameterName, 'The path to the pem file, which contains the certificates for the client authentication') - [CompletionResult]::new('--client-auth-key', 'client-auth-key', [CompletionResultType]::ParameterName, 'The path to the pem file, which contains the key for the client authentication') - [CompletionResult]::new('--proxy-host', 'proxy-host', [CompletionResultType]::ParameterName, 'Socks5 or HTTP CONNECT proxy host (see below)') - [CompletionResult]::new('--proxy-scheme', 'proxy-scheme', [CompletionResultType]::ParameterName, 'The protocol of the proxy') - [CompletionResult]::new('--proxy-credentials', 'proxy-credentials', [CompletionResultType]::ParameterName, 'The credentials for the proxy') - [CompletionResult]::new('--proxy-https-cafile', 'proxy-https-cafile', [CompletionResultType]::ParameterName, 'The path to the pem file, which contains the trusted CA certificates for the https proxy -If no path is given then the platform''s native certificate store will be used') - [CompletionResult]::new('--proxy-https-domain', 'proxy-https-domain', [CompletionResultType]::ParameterName, 'The domain name of the https proxy') - [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Print help information') - [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Print help information') - [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Print version information') - [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Print version information') - [CompletionResult]::new('--listen-activation', 'listen-activation', [CompletionResultType]::ParameterName, 'Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() under Mac OS') - [CompletionResult]::new('-g', 'g', [CompletionResultType]::ParameterName, 'Use the GET method for the HTTP/2.0 request') - [CompletionResult]::new('--get', 'get', [CompletionResultType]::ParameterName, 'Use the GET method for the HTTP/2.0 request') - [CompletionResult]::new('--cache-fallback', 'cache-fallback', [CompletionResultType]::ParameterName, 'Use expired cache entries if no response is received from the server') + [CompletionResult]::new('-l', '-l', [CompletionResultType]::ParameterName, 'Listen address [default: 127.0.0.1:53]') + [CompletionResult]::new('--listen-addr', '--listen-addr', [CompletionResultType]::ParameterName, 'Listen address [default: 127.0.0.1:53]') + [CompletionResult]::new('-r', '-r', [CompletionResultType]::ParameterName, 'Remote address/domain to the DOH server (see below)') + [CompletionResult]::new('--remote-host', '--remote-host', [CompletionResultType]::ParameterName, 'Remote address/domain to the DOH server (see below)') + [CompletionResult]::new('-d', '-d', [CompletionResultType]::ParameterName, 'The domain name of the remote server') + [CompletionResult]::new('--domain', '--domain', [CompletionResultType]::ParameterName, 'The domain name of the remote server') + [CompletionResult]::new('--retries', '--retries', [CompletionResultType]::ParameterName, 'The number of retries to connect to the remote server') + [CompletionResult]::new('-t', '-t', [CompletionResultType]::ParameterName, 'The time in seconds after that the connection would be closed if no response is received from the server') + [CompletionResult]::new('--timeout', '--timeout', [CompletionResultType]::ParameterName, 'The time in seconds after that the connection would be closed if no response is received from the server') + [CompletionResult]::new('-p', '-p', [CompletionResultType]::ParameterName, 'The path of the URI') + [CompletionResult]::new('--path', '--path', [CompletionResultType]::ParameterName, 'The path of the URI') + [CompletionResult]::new('-c', '-c', [CompletionResultType]::ParameterName, 'The size of the private HTTP cache If the size is 0 then the private HTTP cache is not used (ignores cache-control)') + [CompletionResult]::new('--cache-size', '--cache-size', [CompletionResultType]::ParameterName, 'The size of the private HTTP cache If the size is 0 then the private HTTP cache is not used (ignores cache-control)') + [CompletionResult]::new('--client-auth-certs', '--client-auth-certs', [CompletionResultType]::ParameterName, 'The path to the pem file, which contains the certificates for the client authentication') + [CompletionResult]::new('--client-auth-key', '--client-auth-key', [CompletionResultType]::ParameterName, 'The path to the pem file, which contains the key for the client authentication') + [CompletionResult]::new('--proxy-host', '--proxy-host', [CompletionResultType]::ParameterName, 'Socks5 or HTTP CONNECT proxy host (see below)') + [CompletionResult]::new('--proxy-scheme', '--proxy-scheme', [CompletionResultType]::ParameterName, 'The protocol of the proxy') + [CompletionResult]::new('--proxy-credentials', '--proxy-credentials', [CompletionResultType]::ParameterName, 'The credentials for the proxy') + [CompletionResult]::new('--proxy-https-cafile', '--proxy-https-cafile', [CompletionResultType]::ParameterName, 'The path to the pem file, which contains the trusted CA certificates for the https proxy If no path is given then the platform''s native certificate store will be used') + [CompletionResult]::new('--proxy-https-domain', '--proxy-https-domain', [CompletionResultType]::ParameterName, 'The domain name of the https proxy') + [CompletionResult]::new('--listen-activation', '--listen-activation', [CompletionResultType]::ParameterName, 'Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() under Mac OS') + [CompletionResult]::new('-g', '-g', [CompletionResultType]::ParameterName, 'Use the GET method for the HTTP/2.0 request') + [CompletionResult]::new('--get', '--get', [CompletionResultType]::ParameterName, 'Use the GET method for the HTTP/2.0 request') + [CompletionResult]::new('--cache-fallback', '--cache-fallback', [CompletionResultType]::ParameterName, 'Use expired cache entries if no response is received from the server') + [CompletionResult]::new('-h', '-h', [CompletionResultType]::ParameterName, 'Print help') + [CompletionResult]::new('--help', '--help', [CompletionResultType]::ParameterName, 'Print help') + [CompletionResult]::new('-V', '-V ', [CompletionResultType]::ParameterName, 'Print version') + [CompletionResult]::new('--version', '--version', [CompletionResultType]::ParameterName, 'Print version') break } }) diff --git a/completions/doh-client.bash b/completions/doh-client.bash index 77523cc..26be553 100644 --- a/completions/doh-client.bash +++ b/completions/doh-client.bash @@ -1,15 +1,19 @@ _doh-client() { - local i cur prev opts cmds + local i cur prev opts cmd COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - prev="${COMP_WORDS[COMP_CWORD-1]}" + if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then + cur="$2" + else + cur="${COMP_WORDS[COMP_CWORD]}" + fi + prev="$3" cmd="" opts="" - for i in ${COMP_WORDS[@]} + for i in "${COMP_WORDS[@]:0:COMP_CWORD}" do - case "${i}" in - "$1") + case "${cmd},${i}" in + ",$1") cmd="doh__client" ;; *) @@ -19,7 +23,7 @@ _doh-client() { case "${cmd}" in doh__client) - opts="-h -V -l -r -d -t -p -g -c --help --version --listen-addr --listen-activation --remote-host --domain --retries --timeout --path --get --cache-size --cache-fallback --client-auth-certs --client-auth-key --proxy-host --proxy-scheme --proxy-credentials --proxy-https-cafile --proxy-https-domain " + opts="-l -r -d -t -p -g -c -h -V --listen-addr --listen-activation --remote-host --domain --retries --timeout --path --get --cache-size --cache-fallback --client-auth-certs --client-auth-key --proxy-host --proxy-scheme --proxy-credentials --proxy-https-cafile --proxy-https-domain --help --version [CAFILE]" if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) return 0 @@ -90,7 +94,7 @@ _doh-client() { return 0 ;; --proxy-scheme) - COMPREPLY=($(compgen -W "" -- "${cur}")) + COMPREPLY=($(compgen -W "socks5 socks5h http https" -- "${cur}")) return 0 ;; --proxy-credentials) @@ -115,4 +119,8 @@ _doh-client() { esac } -complete -F _doh-client -o bashdefault -o default doh-client +if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then + complete -F _doh-client -o nosort -o bashdefault -o default doh-client +else + complete -F _doh-client -o bashdefault -o default doh-client +fi diff --git a/completions/doh-client.elv b/completions/doh-client.elv index f3e53ae..99f0f6f 100644 --- a/completions/doh-client.elv +++ b/completions/doh-client.elv @@ -29,26 +29,23 @@ set edit:completion:arg-completer[doh-client] = {|@words| cand --timeout 'The time in seconds after that the connection would be closed if no response is received from the server' cand -p 'The path of the URI' cand --path 'The path of the URI' - cand -c 'The size of the private HTTP cache -If the size is 0 then the private HTTP cache is not used (ignores cache-control)' - cand --cache-size 'The size of the private HTTP cache -If the size is 0 then the private HTTP cache is not used (ignores cache-control)' + cand -c 'The size of the private HTTP cache If the size is 0 then the private HTTP cache is not used (ignores cache-control)' + cand --cache-size 'The size of the private HTTP cache If the size is 0 then the private HTTP cache is not used (ignores cache-control)' cand --client-auth-certs 'The path to the pem file, which contains the certificates for the client authentication' cand --client-auth-key 'The path to the pem file, which contains the key for the client authentication' cand --proxy-host 'Socks5 or HTTP CONNECT proxy host (see below)' cand --proxy-scheme 'The protocol of the proxy' cand --proxy-credentials 'The credentials for the proxy' - cand --proxy-https-cafile 'The path to the pem file, which contains the trusted CA certificates for the https proxy -If no path is given then the platform''s native certificate store will be used' + cand --proxy-https-cafile 'The path to the pem file, which contains the trusted CA certificates for the https proxy If no path is given then the platform''s native certificate store will be used' cand --proxy-https-domain 'The domain name of the https proxy' - cand -h 'Print help information' - cand --help 'Print help information' - cand -V 'Print version information' - cand --version 'Print version information' cand --listen-activation 'Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() under Mac OS' cand -g 'Use the GET method for the HTTP/2.0 request' cand --get 'Use the GET method for the HTTP/2.0 request' cand --cache-fallback 'Use expired cache entries if no response is received from the server' + cand -h 'Print help' + cand --help 'Print help' + cand -V 'Print version' + cand --version 'Print version' } ] $completions[$command] diff --git a/completions/doh-client.fish b/completions/doh-client.fish index 761d90a..06afd3e 100644 --- a/completions/doh-client.fish +++ b/completions/doh-client.fish @@ -4,18 +4,19 @@ complete -c doh-client -s d -l domain -d 'The domain name of the remote server' complete -c doh-client -l retries -d 'The number of retries to connect to the remote server' -r complete -c doh-client -s t -l timeout -d 'The time in seconds after that the connection would be closed if no response is received from the server' -r complete -c doh-client -s p -l path -d 'The path of the URI' -r -complete -c doh-client -s c -l cache-size -d 'The size of the private HTTP cache -If the size is 0 then the private HTTP cache is not used (ignores cache-control)' -r +complete -c doh-client -s c -l cache-size -d 'The size of the private HTTP cache If the size is 0 then the private HTTP cache is not used (ignores cache-control)' -r complete -c doh-client -l client-auth-certs -d 'The path to the pem file, which contains the certificates for the client authentication' -r complete -c doh-client -l client-auth-key -d 'The path to the pem file, which contains the key for the client authentication' -r complete -c doh-client -l proxy-host -d 'Socks5 or HTTP CONNECT proxy host (see below)' -r -complete -c doh-client -l proxy-scheme -d 'The protocol of the proxy' -r -f -a "{socks5 ,socks5h ,http ,https }" +complete -c doh-client -l proxy-scheme -d 'The protocol of the proxy' -r -f -a "socks5\t'' +socks5h\t'' +http\t'' +https\t''" complete -c doh-client -l proxy-credentials -d 'The credentials for the proxy' -r -complete -c doh-client -l proxy-https-cafile -d 'The path to the pem file, which contains the trusted CA certificates for the https proxy -If no path is given then the platform\'s native certificate store will be used' -r +complete -c doh-client -l proxy-https-cafile -d 'The path to the pem file, which contains the trusted CA certificates for the https proxy If no path is given then the platform\'s native certificate store will be used' -r complete -c doh-client -l proxy-https-domain -d 'The domain name of the https proxy' -r -complete -c doh-client -s h -l help -d 'Print help information' -complete -c doh-client -s V -l version -d 'Print version information' complete -c doh-client -l listen-activation -d 'Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() under Mac OS' complete -c doh-client -s g -l get -d 'Use the GET method for the HTTP/2.0 request' complete -c doh-client -l cache-fallback -d 'Use expired cache entries if no response is received from the server' +complete -c doh-client -s h -l help -d 'Print help' +complete -c doh-client -s V -l version -d 'Print version' diff --git a/src/cmd/app.rs b/src/cmd/app.rs index e99a38d..513fca4 100644 --- a/src/cmd/app.rs +++ b/src/cmd/app.rs @@ -1,4 +1,7 @@ -use clap::{crate_authors, crate_description, crate_version, Arg, Command}; +use std::net::SocketAddr; + +use clap::value_parser; +use clap::{crate_authors, crate_description, crate_version, Arg, ArgAction, Command}; const ABOUT: &str = "Open a local UDP (DNS) port and forward DNS queries to a remote HTTP/2.0 server.\n\ @@ -13,56 +16,48 @@ const AFTER_HELP: &str = always use an IP address for values.\n"; #[cfg(any(feature = "socks5", feature = "http-proxy"))] -fn proxy_args(app: Command<'static>) -> Command<'static> { - let (proxy_host_help, proxy_scheme_possible_values) = - if cfg!(all(feature = "socks5", feature = "http-proxy")) { - ( - "Socks5 or HTTP CONNECT proxy host (see below)", - &["socks5", "socks5h", "http", "https"][..], - ) - } else if cfg!(all(feature = "socks5", not(feature = "http-proxy"))) { - ("Socks5 proxy host (see below)", &["socks5", "socks5h"][..]) - } else { - ( - "HTTP CONNECT proxy host (see below)", - &["http", "https"][..], - ) - }; +fn proxy_args(app: Command) -> Command { + use clap::ArgAction; - let command = app - .arg( - Arg::new("proxy-host") - .long("proxy-host") - .takes_value(true) - .value_name("Addr/Domain:Port") - .help(proxy_host_help) - .required(false) - .requires("proxy-scheme"), - ) - .arg( - Arg::new("proxy-scheme") - .long("proxy-scheme") - .takes_value(true) - .possible_values(proxy_scheme_possible_values) - .help("The protocol of the proxy") - .required(false) - .requires("proxy-host"), - ) - .arg( - Arg::new("proxy-credentials") - .long("proxy-credentials") - .takes_value(true) - .value_name("Username:Password") - .help("The credentials for the proxy") - .requires_all(&["proxy-host", "proxy-scheme"][..]), - ); + let mut proxy_host = Arg::new("proxy-host") + .long("proxy-host") + .action(ArgAction::Set) + .value_name("Addr/Domain:Port") + .required(false) + .requires("proxy-scheme"); + + let mut proxy_scheme = Arg::new("proxy-scheme") + .long("proxy-scheme") + .action(ArgAction::Set) + .help("The protocol of the proxy") + .required(false) + .requires("proxy-host"); + + if cfg!(all(feature = "socks5", feature = "http-proxy")) { + proxy_host = proxy_host.help("Socks5 or HTTP CONNECT proxy host (see below)"); + proxy_scheme = proxy_scheme.value_parser(["socks5", "socks5h", "http", "https"]); + } else if cfg!(all(feature = "socks5", not(feature = "http-proxy"))) { + proxy_host = proxy_host.help("Socks5 proxy host (see below)"); + proxy_scheme = proxy_scheme.value_parser(["socks5", "socks5h"]); + } else { + proxy_host = proxy_host.help("HTTP CONNECT proxy host (see below)"); + proxy_scheme = proxy_scheme.value_parser(["http", "https"]); + } + + let command = app.arg(proxy_host).arg(proxy_scheme).arg( + Arg::new("proxy-credentials") + .long("proxy-credentials") + .action(ArgAction::Set) + .value_name("Username:Password") + .help("The credentials for the proxy") + .requires_all(&["proxy-host", "proxy-scheme"][..]), + ); if cfg!(feature = "http-proxy") { let arg = Arg::new("proxy-https-cafile") - .takes_value(true) .value_name("CAFILE") .long("proxy-https-cafile") - .takes_value(true); + .action(ArgAction::Set); let arg = if cfg!(feature = "native-certs") { arg.help( "The path to the pem file, which contains the trusted CA \ @@ -80,7 +75,7 @@ fn proxy_args(app: Command<'static>) -> Command<'static> { }; command.arg(arg).arg( Arg::new("proxy-https-domain") - .takes_value(true) + .action(ArgAction::Set) .value_name("Domain") .long("proxy-https-domain") .help("The domain name of the https proxy") @@ -91,8 +86,10 @@ fn proxy_args(app: Command<'static>) -> Command<'static> { } } -fn cafile(command: Command<'static>) -> Command<'static> { - let arg = Arg::new("cafile").takes_value(true).value_name("CAFILE"); +fn cafile(command: Command) -> Command { + let arg = Arg::new("cafile") + .action(ArgAction::Set) + .value_name("CAFILE"); let arg = if cfg!(feature = "native-certs") { arg.help( "The path to the pem file, which contains the trusted CA certificates\n\ @@ -108,7 +105,7 @@ fn cafile(command: Command<'static>) -> Command<'static> { } /// Get the `clap::App` object for the argument parsing. -pub fn get_command() -> Command<'static> { +pub fn get_command() -> Command { let command = Command::new(crate_description!()) .version(crate_version!()) .author(crate_authors!()) @@ -116,10 +113,11 @@ pub fn get_command() -> Command<'static> { .after_help(AFTER_HELP) .arg( Arg::new("listen-addr") + .value_parser(value_parser!(SocketAddr)) .short('l') .long("listen-addr") .conflicts_with("listen-activation") - .takes_value(true) + .action(ArgAction::Set) .value_name("Addr:Port") .help("Listen address [default: 127.0.0.1:53]") .required(false), @@ -127,6 +125,7 @@ pub fn get_command() -> Command<'static> { .arg( Arg::new("listen-activation") .long("listen-activation") + .action(ArgAction::SetTrue) .conflicts_with("listen-addr") .help( "Use file descriptor 3 under Unix as UDP socket or launch_activate_socket() \ @@ -138,7 +137,7 @@ pub fn get_command() -> Command<'static> { Arg::new("remote-host") .short('r') .long("remote-host") - .takes_value(true) + .action(ArgAction::Set) .value_name("Addr/Domain:Port") .help("Remote address/domain to the DOH server (see below)") .default_value("1.1.1.1:443") @@ -148,7 +147,7 @@ pub fn get_command() -> Command<'static> { Arg::new("domain") .short('d') .long("domain") - .takes_value(true) + .action(ArgAction::Set) .value_name("Domain") .help("The domain name of the remote server") .default_value("cloudflare-dns.com") @@ -156,7 +155,8 @@ pub fn get_command() -> Command<'static> { ) .arg( Arg::new("retries") - .takes_value(true) + .value_parser(value_parser!(u32)) + .action(ArgAction::Set) .long("retries") .value_name("UNSIGNED INT") .help("The number of retries to connect to the remote server") @@ -165,7 +165,8 @@ pub fn get_command() -> Command<'static> { ) .arg( Arg::new("timeout") - .takes_value(true) + .value_parser(value_parser!(u64)) + .action(ArgAction::Set) .short('t') .long("timeout") .value_name("UNSIGNED LONG") @@ -180,7 +181,7 @@ pub fn get_command() -> Command<'static> { Arg::new("path") .short('p') .long("path") - .takes_value(true) + .action(ArgAction::Set) .value_name("STRING") .help("The path of the URI") .default_value("dns-query") @@ -191,13 +192,15 @@ pub fn get_command() -> Command<'static> { .short('g') .long("get") .help("Use the GET method for the HTTP/2.0 request") + .action(ArgAction::SetTrue) .required(false), ) .arg( Arg::new("cache-size") + .value_parser(value_parser!(usize)) .long("cache-size") .short('c') - .takes_value(true) + .action(ArgAction::Set) .value_name("UNSIGNED LONG") .help( "The size of the private HTTP cache\n\ @@ -209,6 +212,7 @@ pub fn get_command() -> Command<'static> { ) .arg( Arg::new("cache-fallback") + .action(ArgAction::SetTrue) .long("cache-fallback") .help("Use expired cache entries if no response is received from the server") .required(false), @@ -216,7 +220,7 @@ pub fn get_command() -> Command<'static> { .arg( Arg::new("client-auth-certs") .long("client-auth-certs") - .takes_value(true) + .action(ArgAction::Set) .value_name("CERTSFILE") .help( "The path to the pem file, which contains the certificates for the client \ @@ -228,7 +232,7 @@ pub fn get_command() -> Command<'static> { .arg( Arg::new("client-auth-key") .long("client-auth-key") - .takes_value(true) + .action(ArgAction::Set) .value_name("KEYFILE") .help( "The path to the pem file, which contains the key for the client \ diff --git a/src/cmd/listen_config.rs b/src/cmd/listen_config.rs index e8306bc..805dba0 100644 --- a/src/cmd/listen_config.rs +++ b/src/cmd/listen_config.rs @@ -1,13 +1,12 @@ use crate::ListenConfig; use clap::ArgMatches; -use std::net::AddrParseError; +use std::net::{AddrParseError, SocketAddr}; pub fn get_listen_config(arg_matches: &ArgMatches) -> Result { - let listen_config = if arg_matches.is_present("listen-activation") { + let listen_config = if arg_matches.get_flag("listen-activation") { ListenConfig::Activation - } else if arg_matches.is_present("listen-addr") { - let addr = arg_matches.value_of("listen-addr").unwrap().parse()?; - ListenConfig::Addr(addr) + } else if let Some(addr) = arg_matches.get_one::("listen-addr") { + ListenConfig::Addr(addr.to_owned()) } else { ListenConfig::Addr("127.0.0.1:53".parse()?) }; diff --git a/src/cmd/remote_host.rs b/src/cmd/remote_host.rs index ded04a0..100a2ce 100644 --- a/src/cmd/remote_host.rs +++ b/src/cmd/remote_host.rs @@ -2,14 +2,14 @@ use crate::helper::load_root_store; use crate::RemoteHost; use clap::ArgMatches; -#[cfg(feature = "http-proxy")] -use rustls::ClientConfig; use std::io::Error as IoError; #[cfg(feature = "socks5")] use std::net::{IpAddr, SocketAddr}; #[cfg(feature = "http-proxy")] use std::sync::Arc; use thiserror::Error as ThisError; +#[cfg(feature = "http-proxy")] +use tokio_rustls::rustls::ClientConfig; #[derive(Debug, ThisError)] pub enum RemoteHostError { @@ -41,7 +41,7 @@ fn parse_host_port(host_port: &str) -> Result<(&str, u16), RemoteHostError> { } fn get_remote_host_port(arg_matches: &ArgMatches) -> Result<(String, u16), RemoteHostError> { - let remote_host_port = arg_matches.value_of("remote-host").unwrap(); + let remote_host_port = arg_matches.get_one::("remote-host").unwrap(); let (remote_host, remote_port) = parse_host_port(remote_host_port)?; Ok((remote_host.to_owned(), remote_port)) } @@ -54,7 +54,7 @@ fn get_direct(arg_matches: &ArgMatches) -> Result { #[cfg(any(feature = "socks5", feature = "http-proxy"))] async fn get_proxy_host_port(arg_matches: &ArgMatches) -> Result<(String, u16), RemoteHostError> { - let proxy_host_port = arg_matches.value_of("proxy-host").unwrap(); + let proxy_host_port = arg_matches.get_one::("proxy-host").unwrap(); let (proxy_host, proxy_port) = parse_host_port(proxy_host_port)?; Ok((proxy_host.to_owned(), proxy_port)) } @@ -63,7 +63,7 @@ async fn get_proxy_host_port(arg_matches: &ArgMatches) -> Result<(String, u16), async fn get_proxy_remote_addrs( arg_matches: &ArgMatches, ) -> Result, RemoteHostError> { - let remote_host = arg_matches.value_of("remote-host").unwrap(); + let remote_host = arg_matches.get_one::("remote-host").unwrap(); let (host, port) = parse_host_port(remote_host)?; match host.parse::() { Ok(host) => { @@ -82,7 +82,7 @@ async fn get_proxy_remote_addrs( fn get_proxy_credentials( arg_matches: &ArgMatches, ) -> Result, RemoteHostError> { - if let Some(proxy_credentials) = arg_matches.value_of("proxy-credentials") { + if let Some(proxy_credentials) = arg_matches.get_one::("proxy-credentials") { let proxy_credentials_vec: Vec<&str> = proxy_credentials.splitn(2, ':').collect(); if proxy_credentials_vec.len() == 2 { let username = proxy_credentials_vec[0].to_owned(); @@ -102,10 +102,9 @@ fn get_proxy_credentials( fn get_proxy_https_client_config( arg_matches: &ArgMatches, ) -> Result { - let https_cafile = arg_matches.value_of("proxy-https-cafile"); + let https_cafile = arg_matches.get_one::("proxy-https-cafile"); let root_store = load_root_store(https_cafile)?; let mut config = ClientConfig::builder() - .with_safe_defaults() .with_root_certificates(root_store) .with_no_client_auth(); config @@ -115,20 +114,17 @@ fn get_proxy_https_client_config( } #[cfg(feature = "http-proxy")] -fn get_proxy_https_domain(arg_matches: &ArgMatches) -> String { - arg_matches - .value_of("proxy-https-domain") - .unwrap() - .to_owned() +fn get_proxy_https_domain(arg_matches: &ArgMatches) -> &String { + arg_matches.get_one::("proxy-https-domain").unwrap() } #[cfg(any(feature = "socks5", feature = "http-proxy"))] async fn get_proxy(arg_matches: &ArgMatches) -> Result { - let proxy_scheme = arg_matches.value_of("proxy-scheme"); + let proxy_scheme = arg_matches.get_one::("proxy-scheme"); if let Some(proxy_scheme) = proxy_scheme { let (proxy_host, proxy_port) = get_proxy_host_port(arg_matches).await?; let credentials = get_proxy_credentials(arg_matches)?; - match proxy_scheme { + match proxy_scheme.as_str() { #[cfg(feature = "socks5")] "socks5" => { let remote_addrs = get_proxy_remote_addrs(arg_matches).await?; @@ -174,7 +170,7 @@ async fn get_proxy(arg_matches: &ArgMatches) -> Result Err(RemoteHostError::ProxyScheme(scheme.to_string())), diff --git a/src/config.rs b/src/config.rs index d052a3a..87a1b08 100644 --- a/src/config.rs +++ b/src/config.rs @@ -7,22 +7,20 @@ use crate::{ }; use clap::ArgMatches; use futures::lock::Mutex; -use rustls::ClientConfig; use std::{io::Result as IoResult, num::NonZeroUsize, sync::Arc}; use tokio::net::UdpSocket; +use tokio_rustls::rustls::ClientConfig; fn create_client_config( - cafile: Option<&str>, - client_auth: Option<(&str, &str)>, + cafile: Option<&String>, + client_auth: Option<(&String, &String)>, ) -> DohResult { let root_store = load_root_store(cafile)?; - let config_builder = ClientConfig::builder() - .with_safe_defaults() - .with_root_certificates(root_store); + let config_builder = ClientConfig::builder().with_root_certificates(root_store); let mut config = if let Some((certs, key)) = client_auth { let cert_chain = load_certs(certs)?; let key_der = load_private_key(key)?; - config_builder.with_single_cert(cert_chain, key_der)? + config_builder.with_client_auth_cert(cert_chain, key_der)? } else { config_builder.with_no_client_auth() }; @@ -50,8 +48,8 @@ impl Config { listen_config: ListenConfig, remote_host: RemoteHost, domain: &str, - cafile: Option<&str>, - client_auth: Option<(&str, &str)>, + cafile: Option<&String>, + client_auth: Option<(&String, &String)>, path: &str, retries: u32, timeout: u64, @@ -84,17 +82,17 @@ impl Config { pub async fn try_from(matches: ArgMatches) -> DohResult { let listen_config = get_listen_config(&matches)?; let remote_host = get_remote_host(&matches).await?; - let domain = matches.value_of("domain").unwrap(); - let cafile = matches.value_of("cafile"); + let domain = matches.get_one::("domain").unwrap(); + let cafile = matches.get_one::("cafile"); let client_auth = matches - .value_of("client-auth-certs") - .map(|certs| (certs, matches.value_of("client-auth-key").unwrap())); - let path = matches.value_of("path").unwrap(); - let retries: u32 = matches.value_of_t("retries").unwrap_or(3); - let timeout: u64 = matches.value_of_t("timeout").unwrap_or(2); - let post: bool = !matches.is_present("get"); - let cache_size: usize = matches.value_of_t("cache-size").unwrap_or(1024); - let cache_fallback: bool = matches.is_present("cache-fallback"); + .get_one::("client-auth-certs") + .map(|certs| (certs, matches.get_one::("client-auth-key").unwrap())); + let path = matches.get_one::("path").unwrap(); + let retries: u32 = *matches.get_one::("retries").unwrap_or(&3); + let timeout: u64 = *matches.get_one::("timeout").unwrap_or(&2); + let post: bool = !matches.get_flag("get"); + let cache_size: usize = *matches.get_one::("cache-size").unwrap_or(&1024); + let cache_fallback: bool = matches.get_flag("cache-fallback"); Config::new( listen_config, remote_host, diff --git a/src/helper.rs b/src/helper.rs index 1198ec6..cc49850 100644 --- a/src/helper.rs +++ b/src/helper.rs @@ -1,32 +1,30 @@ -use rustls::{Certificate, PrivateKey, RootCertStore}; +use rustls::RootCertStore; use rustls_pemfile::{certs, read_one, Item}; +use rustls_pki_types::{CertificateDer, PrivateKeyDer}; use std::{ fs::File, io::{BufReader, Error as IoError, ErrorKind as IoErrorKind, Result as IoResult}, }; -pub(super) fn load_certs_as_bytes(path: &str) -> IoResult>> { +pub(super) fn load_certs(path: &str) -> IoResult>> { + let mut result = Vec::new(); let cafile = File::open(path)?; let mut cafile_buf_reader = BufReader::new(cafile); - certs(&mut cafile_buf_reader) -} - -pub(super) fn load_certs(path: &str) -> IoResult> { - let certs = load_certs_as_bytes(path)? - .iter() - .map(|v| rustls::Certificate(v.clone())) - .collect(); - Ok(certs) + for cert_result in certs(&mut cafile_buf_reader) { + result.push(cert_result?); + } + Ok(result) } -pub(super) fn load_private_key(path: &str) -> IoResult { +pub(super) fn load_private_key(path: &str) -> IoResult> { let private_key = File::open(path)?; let mut reader = BufReader::new(private_key); while let Some(item) = read_one(&mut reader)? { match item { - Item::RSAKey(private_key) => return Ok(PrivateKey(private_key)), - Item::PKCS8Key(private_key) => return Ok(PrivateKey(private_key)), + Item::Pkcs1Key(private_key) => return Ok(PrivateKeyDer::Pkcs1(private_key)), + Item::Pkcs8Key(private_key) => return Ok(PrivateKeyDer::Pkcs8(private_key)), + Item::Sec1Key(private_key) => return Ok(PrivateKeyDer::Sec1(private_key)), _ => {} } } @@ -38,33 +36,30 @@ pub(super) fn load_private_key(path: &str) -> IoResult { } #[cfg(feature = "native-certs")] -fn load_native_certs() -> IoResult> { - Ok(rustls_native_certs::load_native_certs()? - .into_iter() - .map(|cert| Certificate(cert.0)) - .collect()) +fn load_native_certs() -> (Vec>, usize) { + let result = rustls_native_certs::load_native_certs(); + (result.certs, result.errors.len()) } #[cfg(not(feature = "native-certs"))] -fn load_native_certs() -> IoResult> { - Err(IoError::new( - IoErrorKind::Other, - "Feature native-certs is not enabled", - )) +fn load_native_certs() -> (Vec>, usize) { + (Vec::new(), 1) } -pub(super) fn load_root_store(cafile: Option<&str>) -> IoResult { +pub(super) fn load_root_store(cafile: Option<&String>) -> IoResult { let mut root_store = RootCertStore::empty(); let mut added = 0; let mut ignored = 0; if let Some(cafile) = cafile { - let certs = load_certs_as_bytes(cafile)?; - let result = root_store.add_parsable_certificates(&certs); + let certs = load_certs(cafile)?; + let result = root_store.add_parsable_certificates(certs); added = result.0; ignored = result.1; } else { - for cert in load_native_certs()? { - match root_store.add(&cert) { + let (certs, errors) = load_native_certs(); + ignored += errors; + for cert in certs { + match root_store.add(cert) { Ok(_) => added += 1, Err(_) => ignored += 1, } diff --git a/src/remote/config.rs b/src/remote/config.rs index 005e54a..ccddae7 100644 --- a/src/remote/config.rs +++ b/src/remote/config.rs @@ -1,5 +1,5 @@ -use rustls::ClientConfig; use std::sync::Arc; +use tokio_rustls::rustls::ClientConfig; pub(super) struct Config { pub(super) domain: String, diff --git a/src/remote/helper.rs b/src/remote/helper.rs index 2fc1c9e..98a192c 100644 --- a/src/remote/helper.rs +++ b/src/remote/helper.rs @@ -3,16 +3,13 @@ use crate::DohResult; use async_http_proxy::{http_connect_tokio, http_connect_tokio_with_basic_auth, HttpError}; use bytes::Bytes; use h2::client::{handshake, SendRequest}; -use rustls::ClientConfig; -use rustls::ServerName; -use std::convert::TryFrom; +use rustls_pki_types::ServerName; use std::io::Result as IoResult; use std::sync::Arc; use tokio::io::{AsyncRead, AsyncWrite}; use tokio::net::TcpStream; use tokio::spawn; -use tokio_rustls::client::TlsStream; -use tokio_rustls::TlsConnector; +use tokio_rustls::{client::TlsStream, rustls::ClientConfig, TlsConnector}; #[cfg(feature = "socks5")] use tokio_socks::tcp::Socks5Stream; #[cfg(feature = "socks5")] @@ -42,7 +39,7 @@ where { let tls_connector = TlsConnector::from(config.clone()); tls_connector - .connect(ServerName::try_from(domain).unwrap(), connection) + .connect(ServerName::try_from(domain.to_owned()).unwrap(), connection) .await } diff --git a/src/remote/host.rs b/src/remote/host.rs index 5ff796f..1361afe 100644 --- a/src/remote/host.rs +++ b/src/remote/host.rs @@ -6,9 +6,9 @@ use super::{try_socks5_connect, try_socks5h_connect}; use crate::DohResult; use bytes::Bytes; use h2::client::SendRequest; -use rustls::ClientConfig; use std::fmt::{Display, Formatter, Result}; use std::sync::Arc; +use tokio_rustls::rustls::ClientConfig; pub enum Host { Direct(String, u16), diff --git a/src/remote/session.rs b/src/remote/session.rs index 313c6bd..211f032 100644 --- a/src/remote/session.rs +++ b/src/remote/session.rs @@ -1,14 +1,14 @@ use super::{response_handler, Config, Host}; use crate::{DohError, DohResult}; -use base64::{encode_config, URL_SAFE_NO_PAD}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; use bytes::Bytes; use dns_message_parser::Dns; use h2::client::SendRequest; use http::Request; -use rustls::ClientConfig; use std::future::Future; use std::sync::Arc; use std::time::Duration; +use tokio_rustls::rustls::ClientConfig; pub(crate) struct Session { config: Config, @@ -86,11 +86,7 @@ impl Session { .body(()) .unwrap() } else { - let uri = format!( - "{}?dns={}", - config.uri, - encode_config(&data[..], URL_SAFE_NO_PAD) - ); + let uri = format!("{}?dns={}", config.uri, URL_SAFE_NO_PAD.encode(&data[..])); Request::builder() .method("GET") .uri(uri) diff --git a/tests/base64url.rs b/tests/base64url.rs index dcabc37..908abad 100644 --- a/tests/base64url.rs +++ b/tests/base64url.rs @@ -1,4 +1,4 @@ -use base64::{encode_config, URL_SAFE_NO_PAD}; +use base64::{engine::general_purpose::URL_SAFE_NO_PAD, Engine}; #[test] fn www_example_com() { @@ -9,7 +9,7 @@ fn www_example_com() { ]; let result = "AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB"; - assert_eq!(result, encode_config(&msg[..], URL_SAFE_NO_PAD)); + assert_eq!(result, URL_SAFE_NO_PAD.encode(&msg[..])); } #[test] @@ -26,5 +26,5 @@ fn a_62characterlabel_makes_base64url_distinct_from_standard_base64_example_com( let result = "AAABAAABAAAAAAAAAWE-NjJjaGFyYWN0ZXJsYWJlbC1tYWtlcy1iYXNlNjR1cmwtZGlzdGluY3Q\ tZnJvbS1zdGFuZGFyZC1iYXNlNjQHZXhhbXBsZQNjb20AAAEAAQ"; - assert_eq!(result, encode_config(&msg[..], URL_SAFE_NO_PAD)); + assert_eq!(result, URL_SAFE_NO_PAD.encode(&msg[..])); } From 972a2e4694fc9e34625ed211d3a36df6ab622bdb Mon Sep 17 00:00:00 2001 From: LinkTed Date: Sun, 31 Aug 2025 14:43:25 +0000 Subject: [PATCH 8/9] refactor: fix warning `clippy::io_other_error` --- src/helper.rs | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/helper.rs b/src/helper.rs index cc49850..bf9cf13 100644 --- a/src/helper.rs +++ b/src/helper.rs @@ -3,7 +3,7 @@ use rustls_pemfile::{certs, read_one, Item}; use rustls_pki_types::{CertificateDer, PrivateKeyDer}; use std::{ fs::File, - io::{BufReader, Error as IoError, ErrorKind as IoErrorKind, Result as IoResult}, + io::{BufReader, Error as IoError, Result as IoResult}, }; pub(super) fn load_certs(path: &str) -> IoResult>> { @@ -29,10 +29,10 @@ pub(super) fn load_private_key(path: &str) -> IoResult> { } } - Err(IoError::new( - IoErrorKind::Other, - format!("Could not found any private key: {}", path), - )) + Err(IoError::other(format!( + "Could not found any private key: {}", + path + ))) } #[cfg(feature = "native-certs")] @@ -67,10 +67,7 @@ pub(super) fn load_root_store(cafile: Option<&String>) -> IoResult Date: Sun, 31 Aug 2025 15:28:13 +0000 Subject: [PATCH 9/9] chore: bump to version 3.1.3 --- Cargo.lock | 2 +- Cargo.toml | 2 +- completions/Cargo.lock | 2 +- package/linux/PKGBUILD | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b9b89ca..f1848ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -336,7 +336,7 @@ dependencies = [ [[package]] name = "doh-client" -version = "3.1.2" +version = "3.1.3" dependencies = [ "async-http-proxy", "base64 0.22.1", diff --git a/Cargo.toml b/Cargo.toml index 11cd2d5..b822a22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "doh-client" -version = "3.1.2" +version = "3.1.3" edition = "2021" authors = ["LinkTed "] license = "BSD-3-Clause" diff --git a/completions/Cargo.lock b/completions/Cargo.lock index 0d49bbe..7e8b62c 100644 --- a/completions/Cargo.lock +++ b/completions/Cargo.lock @@ -311,7 +311,7 @@ dependencies = [ [[package]] name = "doh-client" -version = "3.1.2" +version = "3.1.3" dependencies = [ "async-http-proxy", "base64 0.22.1", diff --git a/package/linux/PKGBUILD b/package/linux/PKGBUILD index 05e2909..0bb9cec 100644 --- a/package/linux/PKGBUILD +++ b/package/linux/PKGBUILD @@ -2,7 +2,7 @@ # Maintainer: LinkTed pkgname=doh-client -pkgver=3.1.2 +pkgver=3.1.3 pkgrel=1 pkgdesc="doh-client is a DNS over HTTPS client" arch=("x86_64" "armv7h")