From 4f12ded4e0f9c328cb4aff892e996039a1b3b984 Mon Sep 17 00:00:00 2001 From: Ximon Eighteen <3304436+ximon18@users.noreply.github.com> Date: Wed, 4 Jun 2025 10:34:56 +0200 Subject: [PATCH] Package `dnst` as DEB & RPM packages, and Docker images. (#22) Note: - Man pages have to be generated via `make man` and committed to Git to be included in the generated packages. - Docker images are built but not yet published to Docker Hub as the required automation credentials have not yet been provisioned. --- .dockerignore | 2 + .github/workflows/pkg.yml | 24 +- Cargo.lock | 1471 ++++++++++-------------- Cargo.toml | 64 +- Dockerfile | 155 +++ doc/manual/build/man/dnst-key2ds.1 | 80 ++ doc/manual/build/man/dnst-keygen.1 | 164 +++ doc/manual/build/man/dnst-notify.1 | 92 ++ doc/manual/build/man/dnst-nsec3-hash.1 | 74 ++ doc/manual/build/man/dnst-signzone.1 | 208 ++++ doc/manual/build/man/dnst-update.1 | 83 ++ doc/manual/build/man/dnst.1 | 71 ++ doc/manual/build/man/ldns-key2ds.1 | 77 ++ doc/manual/build/man/ldns-keygen.1 | 92 ++ doc/manual/build/man/ldns-notify.1 | 98 ++ doc/manual/build/man/ldns-nsec3-hash.1 | 65 ++ doc/manual/build/man/ldns-signzone.1 | 240 ++++ doc/manual/build/man/ldns-update.1 | 83 ++ pkg/debian/postinst | 13 + pkg/debian/prerm | 8 + pkg/rpm/scriptlets.toml | 40 + pkg/rules/docker-images-to-build.yml | 36 + pkg/rules/packages-to-build.yml | 32 + pkg/rules/packages-to-test.yml | 60 + pkg/test-scripts/test-dnst.sh | 29 + src/commands/nsec3hash.rs | 1 - 26 files changed, 2512 insertions(+), 850 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 doc/manual/build/man/dnst-key2ds.1 create mode 100644 doc/manual/build/man/dnst-keygen.1 create mode 100644 doc/manual/build/man/dnst-notify.1 create mode 100644 doc/manual/build/man/dnst-nsec3-hash.1 create mode 100644 doc/manual/build/man/dnst-signzone.1 create mode 100644 doc/manual/build/man/dnst-update.1 create mode 100644 doc/manual/build/man/dnst.1 create mode 100644 doc/manual/build/man/ldns-key2ds.1 create mode 100644 doc/manual/build/man/ldns-keygen.1 create mode 100644 doc/manual/build/man/ldns-notify.1 create mode 100644 doc/manual/build/man/ldns-nsec3-hash.1 create mode 100644 doc/manual/build/man/ldns-signzone.1 create mode 100644 doc/manual/build/man/ldns-update.1 create mode 100644 pkg/debian/postinst create mode 100644 pkg/debian/prerm create mode 100644 pkg/rpm/scriptlets.toml create mode 100644 pkg/rules/docker-images-to-build.yml create mode 100644 pkg/rules/packages-to-build.yml create mode 100644 pkg/rules/packages-to-test.yml create mode 100644 pkg/test-scripts/test-dnst.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cf2c04e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +/target +.git diff --git a/.github/workflows/pkg.yml b/.github/workflows/pkg.yml index c4b1489..33fc900 100644 --- a/.github/workflows/pkg.yml +++ b/.github/workflows/pkg.yml @@ -2,8 +2,6 @@ name: Packaging on: push: - branches: - - "main" tags: - v* @@ -14,10 +12,22 @@ on: jobs: package: - # - # Set @vN to the latest released version. - # For more information see: https://github.com/NLnetLabs/ploutos/blob/main/README.md - # uses: NLnetLabs/ploutos/.github/workflows/pkg-rust.yml@v7 + # secrets: + # DOCKER_HUB_ID: ${{ secrets.DOCKER_HUB_ID }} + # DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }} + with: + docker_org: nlnetlabs + docker_repo: dnst + docker_build_rules: pkg/rules/docker-images-to-build.yml + docker_sanity_check_command: --version - # TODO + package_build_rules: pkg/rules/packages-to-build.yml + package_test_rules: pkg/rules/packages-to-test.yml + package_test_scripts_path: pkg/test-scripts/test-.sh + + cross_build_args: --features static-openssl + + deb_extra_build_packages: libssl-dev + rpm_extra_build_packages: make openssl-devel + rpm_scriptlets_path: pkg/rpm/scriptlets.toml \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index fa20b0d..69b2ea3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,33 +4,33 @@ version = 3 [[package]] name = "addr2line" -version = "0.14.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "0.2.1" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aa100a6f6f525226719f8de3f70076be4f4191801ebd92621450d1c51e9053d" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aho-corasick" -version = "1.0.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bce8d450891e3b36f85a2230cec441fddd60e0c455b61b15bb3ffba955ca85" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "allocator-api2" -version = "0.2.9" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52f4a9cf8f3ff707b4eb1acd0136efd8b3bec6b345ed32fcab47c0a5c99b800" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -49,155 +49,117 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.0" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e579a7752471abc2a8268df8b20005e3eadd975f585398f17efcfd8d4927371" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", + "is_terminal_polyfill", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.0" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.0" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.0.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "1.0.0" +version = "3.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcd8291a340dd8ac70e18878bc4501dd7b4ff970cfa21c207d36ece51ea88fd" +checksum = "6680de5231bd6ee4c6191b8a1325daa282b415391ec9d3a37bd34f2060dc73fa" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "once_cell_polyfill", + "windows-sys 0.59.0", ] [[package]] name = "arc-swap" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3d0060af21e8d11a926981cc00c6c1541aa91dd64b9f881985c3da1094425f" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] name = "async-lock" -version = "2.4.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ "event-listener", -] - -[[package]] -name = "async-trait" -version = "0.1.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.96", + "event-listener-strategy", + "pin-project-lite", ] [[package]] name = "autocfg" -version = "1.0.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.58" +version = "0.3.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88fb5a785d6b44fd9d6700935608639af1b8356de1e55d5f7c2740f4faa15d82" +checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] name = "bitflags" -version = "1.0.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5cde24d1b2e2216a726368b2363a273739c91f4e3eb4e0dd12d672d396ad989" - -[[package]] -name = "bitflags" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytecount" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0017894339f586ccb943b01b9555de56770c11cda818e7e3d8bd93f4ed7f46e" - -[[package]] -name = "byteorder" -version = "1.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f88df23a25417badc922ab0f5716cc1330e87f71ddd9203b3a3ccd9cedf75d" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytes" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" - -[[package]] -name = "cargo_metadata" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8de60b887edf6d74370fc8eb177040da4847d971d6234c7b13a6da324ef0caf" -dependencies = [ - "semver 0.9.0", - "serde", - "serde_derive", - "serde_json", -] +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.0.83" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" dependencies = [ - "libc", + "shlex", ] [[package]] @@ -208,90 +170,87 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", - "num-traits 0.2.0", + "num-traits", "wasm-bindgen", - "windows-targets 0.52.0", + "windows-link", ] [[package]] name = "clap" -version = "4.3.10" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384e169cc618c613d5e3ca6404dda77a8685a63e08660dcc64abaf7da7cb0c7a" +checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" dependencies = [ "clap_builder", "clap_derive", - "once_cell", ] [[package]] name = "clap_builder" -version = "4.3.10" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef137bbe35aab78bdb468ccfba75a5f4d8321ae011d34063770780545176af2d" +checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" dependencies = [ "anstream", "anstyle", "clap_lex", - "once_cell", "strsim", ] [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.52", + "syn", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" - -[[package]] -name = "codespan-reporting" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6ce42b8998a383572e0a802d859b1f00c79b7b7474e62fff88ee5c2845d9c13" -dependencies = [ - "termcolor", - "unicode-width", -] +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" -version = "1.0.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] [[package]] name = "const_format" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" dependencies = [ "const_format_proc_macros", ] [[package]] name = "const_format_proc_macros" -version = "0.2.33" +version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" dependencies = [ "proc-macro2", "quote", @@ -300,108 +259,62 @@ 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 = "crossbeam-channel" -version = "0.5.8" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.1" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.9" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "once_cell", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.9" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978" -dependencies = [ - "cfg-if", - "once_cell", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] -name = "cxx" -version = "1.0.34" +name = "deranged" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c53d75fe543215ca091d792e13351dcb940842dd2829b2a2dd43ab4bd1a015" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618f85c8f132bd8912aab124e15a38adc762bb7e3cef84524adde1692ef3e8bc" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn 1.0.96", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca21461be76a23df4f63a2107a0bb406ef41548e635ff7edcbd1ab5a6bb997e2" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee8da0a2c0697647b5824844a5d2dedcd97a2d7b75e6e4d0b8dd183e4081e1cf" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.96", + "powerfmt", ] [[package]] name = "diff" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" [[package]] name = "dnst" -version = "0.1.0" +version = "0.1.0-rc1" dependencies = [ "bytes", "chrono", @@ -462,63 +375,66 @@ source = "git+https://github.com/NLnetLabs/domain.git?branch=main#29f52db7c215ac dependencies = [ "proc-macro2", "quote", - "syn 2.0.52", + "syn", ] -[[package]] -name = "dtoa" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5edd69c67b2f8e0911629b7e6b8a34cb3956613cd7c6e6414966dee349c2db4f" - [[package]] name = "either" -version = "1.0.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5845bf77d497f79416df39462df26d4a8b71dd6440246848ee63709476dbb9a6" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "errno" -version = "0.3.10" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] -name = "error-chain" -version = "0.12.0" +name = "event-listener" +version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e791d3be96241c77c43846b665ef1384606da2cd2a48730abe606a12906e02" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] [[package]] -name = "event-listener" -version = "2.5.1" +name = "event-listener-strategy" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] [[package]] name = "fastrand" -version = "2.1.1" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "foreign-types" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21b40436003b2a1e22483c5ed6c3d25e755b6b3120f601cc22aa57e25dc9065" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ "foreign-types-shared", ] [[package]] name = "foreign-types-shared" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baa1839fc3c5487b5e129ea4f774e3fd84e6c4607127315521bc014a722ebc9e" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "futures-core" @@ -534,7 +450,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.52", + "syn", ] [[package]] @@ -558,10 +474,24 @@ dependencies = [ ] [[package]] -name = "getrandom" -version = "0.2.10" +name = "generator" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", @@ -570,174 +500,147 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.3.0" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71393ecc86efbf00e4ca13953979ba8b94cfe549a4b74cc26d8b62f4d8feac2b" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" dependencies = [ "cfg-if", "libc", - "wasi 0.13.0+wasi-0.2.0", - "windows-targets 0.52.0", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] name = "gimli" -version = "0.23.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" - -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "allocator-api2", ] [[package]] name = "heck" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "iana-time-zone" -version = "0.1.54" +version = "0.1.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] name = "iana-time-zone-haiku" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "is-terminal" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb" -dependencies = [ - "hermit-abi", - "rustix 0.38.0", - "windows-sys 0.48.0", -] - -[[package]] -name = "itoa" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91fd9dc2c587067de817fec4ad355e3818c3d893a78cab32a0a474c7a15bb8d5" - -[[package]] -name = "itoa" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" - -[[package]] -name = "jiff" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db69f08d4fb10524cacdb074c10b296299d71274ddbc830a8ee65666867002e9" - -[[package]] -name = "js-sys" -version = "0.3.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d99f9e3e84b8f67f846ef5b4cbbc3b1c29f6c759fcbce6f01aa0e73d932a24c" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "kernel32-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1ca084b49bfd975182288e1a5f1d27ea34ff2d6ae084ae5e66e1652427eada" -dependencies = [ - "winapi 0.2.4", - "winapi-build", -] - -[[package]] -name = "lazy_static" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb497c35d362b6a331cfd94956a07fc2c78a4604cdbee844a81170386b996dd3" - -[[package]] -name = "lexopt" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baff4b617f7df3d896f97fe922b64817f6cd9a756bb81d40f8883f2f66dcb401" - -[[package]] -name = "libc" -version = "0.2.168" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" - -[[package]] -name = "link-cplusplus" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dfb9f65d9966f6ca6522043978030b564f3291af987fbf1dd55b6a064ba1b36" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" dependencies = [ "cc", ] [[package]] -name = "linux-raw-sys" -version = "0.4.3" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jiff" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c04ef77ae73f3cf50510712722f0c4e8b46f5aaa1bf5ffad2ae213e6495e78e5" +dependencies = [ + "log", + "portable-atomic", + "portable-atomic-util", + "serde", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "lexopt" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa0e2a1fcbe2f6be6c42e342259976206b383122fc152e872795338b5a3f3a7" + +[[package]] +name = "libc" +version = "0.2.172" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "linux-raw-sys" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" [[package]] name = "lock_api" -version = "0.4.6" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b" +checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" dependencies = [ + "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] [[package]] name = "matchers" @@ -745,66 +648,54 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata 0.1.0", + "regex-automata 0.1.10", ] [[package]] name = "memchr" -version = "2.6.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76fc44e2588d5b436dbc3c6cf62aef290f90dab6235744a93dfe1cc18f451e2c" - -[[package]] -name = "memoffset" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87" -dependencies = [ - "autocfg", -] +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.4.0" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be0f75932c1f6cfae3c04000e40114adf955636e19040f9c0a2c380702aa1c7f" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" dependencies = [ - "hermit-abi", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "moka" -version = "0.12.3" +version = "0.12.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cebde309854872ea4fcaf4d7c870ad8d5873091c6bfb7ce91fd08ea648f20b0" +checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" dependencies = [ "async-lock", - "async-trait", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", + "event-listener", "futures-util", - "once_cell", + "loom", "parking_lot", - "quanta", + "portable-atomic", "rustc_version", - "skeptic", "smallvec", "tagptr", "thiserror", - "triomphe", "uuid", ] @@ -815,26 +706,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" dependencies = [ "overload", - "winapi 0.3.4", + "winapi", ] [[package]] -name = "num-traits" -version = "0.1.32" +name = "num-conv" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51eab148f171aefad295f8cece636fc488b9b392ef544da31ea4b8ef6b9e9c39" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] name = "num-traits" -version = "0.2.0" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7de20f146db9d920c45ee8ed8f71681fd9ade71909b48c3acbd766aa504cf10" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] [[package]] name = "object" -version = "0.23.0" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] [[package]] name = "octseq" @@ -849,17 +746,23 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "once_cell_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" [[package]] name = "openssl" -version = "0.10.72" +version = "0.10.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" +checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" dependencies = [ - "bitflags 2.4.2", + "bitflags", "cfg-if", "foreign-types", "libc", @@ -876,17 +779,27 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.52", + "syn", +] + +[[package]] +name = "openssl-src" +version = "300.5.0+3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ce546f549326b0e6052b649198487d91320875da901e7bd11a06d1ee3f9c2f" +dependencies = [ + "cc", ] [[package]] name = "openssl-sys" -version = "0.9.107" +version = "0.9.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07" +checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -898,10 +811,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] -name = "parking_lot" -version = "0.12.0" +name = "parking" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" dependencies = [ "lock_api", "parking_lot_core", @@ -909,22 +828,22 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.10" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.0", + "windows-targets", ] [[package]] name = "pin-project-lite" -version = "0.2.11" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c516611246607d0c04186886dbb3a754368ef82c79e9827a802c6d836dd111c" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -934,15 +853,39 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.9" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + +[[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 = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.8" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] [[package]] name = "pretty_assertions" @@ -956,63 +899,44 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.75" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "907a61bd0f64c2f29cd1cf1dc34d05176426a3f504a78010f08416ddb7b13708" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] -[[package]] -name = "pulldown-cmark" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eef52fac62d0ea7b9b4dc7da092aa64ea7ec3d90af6679422d3d7e0e14b6ee15" -dependencies = [ - "bitflags 1.0.0", -] - -[[package]] -name = "quanta" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca0b7bac0b97248c40bb77288fc52029cf1459c0461ea1b05ee32ccf011de2c" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi 0.11.0+wasi-snapshot-preview1", - "web-sys", - "winapi 0.3.4", -] - [[package]] name = "quote" -version = "1.0.35" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] -name = "rand" -version = "0.8.0" +name = "r-efi" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76330fb486679b4ace3670f117bbc9e16204005c4bde9c4bd372f45bed34f12" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core", - "rand_hc", ] [[package]] name = "rand_chacha" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", "rand_core", @@ -1020,29 +944,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.2" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", -] - -[[package]] -name = "rand_hc" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" -dependencies = [ - "rand_core", -] - -[[package]] -name = "raw-cpuid" -version = "11.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1782673f85471a9985c2210df529a11853c89567511fab7ebf14e10853cba849" -dependencies = [ - "bitflags 2.4.2", + "getrandom 0.2.16", ] [[package]] @@ -1067,11 +973,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.0" +version = "0.5.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c178f952cc7eac391f3124bd9851d1ac0bdbc4c9de2d892ccd5f0d8b160e96" +checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af" dependencies = [ - "bitflags 2.4.2", + "bitflags", ] [[package]] @@ -1082,26 +988,24 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.8", + "regex-automata 0.4.9", "regex-syntax 0.8.5", ] [[package]] name = "regex-automata" -version = "0.1.0" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72457500f2cf948feb4efccaeb460570c8f66ee5ba33c936bb4bfaa628d71853" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" dependencies = [ - "byteorder", - "regex-syntax 0.6.4", - "utf8-ranges", + "regex-syntax 0.6.29", ] [[package]] name = "regex-automata" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1110,12 +1014,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.4" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e47a2ed29da7a9e1960e1639e7a982e6edc6d49be308a3b02daf511504a16d1" -dependencies = [ - "ucd-util", -] +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" @@ -1125,236 +1026,156 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "ring" -version = "0.17.8" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.10", + "getrandom 0.2.16", "libc", - "spin", "untrusted", "windows-sys 0.52.0", ] [[package]] name = "rustc-demangle" -version = "0.1.4" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3058a43ada2c2d0b92b3ae38007a2d0fa5e9db971be260e0171408a4ff471c95" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.0", + "semver", ] [[package]] name = "rustix" -version = "0.38.0" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8865954e9c990b996e5b366fad94b8d467ae530daf5f8496edd7cf75e76987d" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" dependencies = [ - "bitflags 2.4.2", + "bitflags", "errno", "libc", - "linux-raw-sys 0.4.3", - "windows-sys 0.48.0", -] - -[[package]] -name = "rustix" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f8dcd64f141950290e45c99f7710ede1b600297c91818bb30b3667c0f45dc0" -dependencies = [ - "bitflags 2.4.2", - "errno", - "libc", - "linux-raw-sys 0.9.2", - "windows-sys 0.52.0", + "linux-raw-sys", + "windows-sys 0.59.0", ] [[package]] name = "rustversion" -version = "1.0.0" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f91977f4ef3be5358c15d131d3f663f6b4d7a112555bf3bf52ad23b6659e5" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.96", -] +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" [[package]] -name = "same-file" -version = "1.0.0" +name = "scoped-tls" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70a18720d745fb9ca6a041b37cb36d0b21066006b6cff8b5b360142d4b81fb60" -dependencies = [ - "kernel32-sys", - "winapi 0.2.4", -] +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e114536316b51a5aa7a0e59fc49661fd263c5507dd08bd28de052e57626ce69" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "secrecy" -version = "0.10.0" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1f662a494cd3c8dd64a16514bdcd4ebf7d76558fad96392500ea5e0b72b8b68" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" dependencies = [ "zeroize", ] [[package]] name = "semver" -version = "0.9.0" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", - "serde", -] - -[[package]] -name = "semver" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b5842e81eb9bbea19276a9dbbda22ac042532f390a67ab08b895617978abf3" - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.130" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.130" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn 1.0.96", -] - -[[package]] -name = "serde_json" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c62115693d0a9ed8c32d1c760f0fdbe7d4b05cb13c135b9b54137ac0d59fccb" -dependencies = [ - "dtoa", - "itoa 0.3.0", - "num-traits 0.1.32", - "serde", + "syn", ] [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] [[package]] -name = "siphasher" -version = "1.0.0" +name = "shlex" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ac45299ccbd390721be55b412d41931911f654fa99e2cb8bfb57184b2061fe" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] -name = "skeptic" -version = "0.13.5" +name = "siphasher" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6deb8efaf3ad8fd784139db8bbd51806bfbcee87c7be7578e9c930981fb808" -dependencies = [ - "bytecount", - "cargo_metadata", - "error-chain", - "glob", - "pulldown-cmark", - "tempfile", - "walkdir", -] +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" [[package]] name = "slab" -version = "0.4.2" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.9.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" - [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "1.0.96" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -1374,19 +1195,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1" dependencies = [ "fastrand", - "getrandom 0.3.0", + "getrandom 0.3.3", "once_cell", - "rustix 1.0.0", - "windows-sys 0.52.0", -] - -[[package]] -name = "termcolor" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a52c023823933499250b43960b272e25336c6e2ab8684672edc34489f049ccdd" -dependencies = [ - "wincolor", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -1397,48 +1209,70 @@ checksum = "8e7a7de15468c6e65dd7db81cf3822c1ec94c71b2a3c1a976ea8e4696c91115c" [[package]] name = "thiserror" -version = "1.0.0" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d032db01164196ffdea5d016aa5cacd9d163a4fb00b85e9fc3ad18c5b1a3951d" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.0" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d53f5a0d2bd66d1d841e69a4beb74a226216b3f158ff0c534578f76e7beac9" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 1.0.96", + "syn", ] [[package]] name = "thread_local" -version = "1.1.4" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ + "cfg-if", "once_cell", ] [[package]] name = "time" -version = "0.3.1" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a776787d9c5d455bec3db044586ccdd8a9c74d5da5dc319fb80f3db08808fe6" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ - "itoa 0.4.7", - "libc", + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", ] [[package]] name = "tokio" -version = "1.40.0" +version = "1.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" dependencies = [ "backtrace", "bytes", @@ -1452,20 +1286,20 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.52", + "syn", ] [[package]] name = "tokio-stream" -version = "0.1.1" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4cdeb73537e63f98adcd73138af75e3f368ccaecffaa29d7eb61b9f5a440457" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -1492,7 +1326,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.52", + "syn", ] [[package]] @@ -1534,38 +1368,17 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "triomphe" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bddb80ec09585c58022a2c55e6e7c11e713d9bb26895f1b56cd945c4040c54" -dependencies = [ - "memoffset", -] - -[[package]] -name = "ucd-util" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ac9567e27ca9fc45bac22f987fd62547b0ac65d2e6502dfc09cdab7dbdba31f" - [[package]] name = "unicode-ident" -version = "1.0.0" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" - -[[package]] -name = "unicode-width" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc85732b6d55a0d520aaf765536a188d9d993770c28633422f85bb646da61335" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-xid" -version = "0.2.0" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" @@ -1573,48 +1386,34 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "utf8-ranges" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" - [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.1.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93bbc61e655a4833cf400d0d15bf3649313422fa7572886ad6dab16d79886365" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.3.3", + "js-sys", + "wasm-bindgen", ] [[package]] name = "valuable" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "vcpkg" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" - -[[package]] -name = "walkdir" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b768ba943161a9226ccd59b26bcd901e5d60e6061f4fcad3034784e0c7372b" -dependencies = [ - "same-file", - "winapi 0.3.4", -] +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "wasi" @@ -1624,44 +1423,44 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasi" -version = "0.13.0+wasi-0.2.0" +version = "0.14.2+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "652cd73449d0b957a2743b70c72d79d34a5fa505696488f4ca90b46f6da94118" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" dependencies = [ - "bitflags 2.4.2", "wit-bindgen-rt", ] [[package]] name = "wasm-bindgen" -version = "0.2.73" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83240549659d187488f91f33c0f8547cbfef0b2088bc470c116d1d260ef623d9" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.73" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae70622411ca953215ca6d06d3ebeb1e915f0f6613e3b495122878d7ebec7dae" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", - "lazy_static", "log", "proc-macro2", "quote", - "syn 1.0.96", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.73" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e734d91443f177bfdb41969de821e15c516931c3c3db3d318fa1b68975d0f6f" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1669,55 +1468,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.73" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53739ff08c8a68b0fdbcd54c372b8ab800b1449ab3c9d706503bc7dd1621b2c" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 1.0.96", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.73" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9a543ae66aa233d14bb765ed9af4a33e81b8b58d1584cf1b47ff8cd0b9e4489" - -[[package]] -name = "web-sys" -version = "0.3.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721c6263e2c66fd44501cc5efbfa2b7dfa775d13e4ea38c46299646ed1f9c70a" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" dependencies = [ - "js-sys", - "wasm-bindgen", + "unicode-ident", ] [[package]] name = "winapi" -version = "0.2.4" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5350e40d908c7e8b9e5c9edb541ca47cc617c6229d3575a46da6f550f36c96fd" - -[[package]] -name = "winapi" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ "winapi-i686-pc-windows-gnu", "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -1730,31 +1510,106 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "wincolor" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9dc3aa9dcda98b5a16150c54619c1ead22e3d3a5d458778ae914be760aa981a" -dependencies = [ - "winapi 0.3.4", -] - [[package]] name = "windows" -version = "0.46.0" +version = "0.61.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419" dependencies = [ - "windows-targets 0.42.2", + "windows-collections", + "windows-core", + "windows-future", + "windows-link", + "windows-numerics", ] [[package]] -name = "windows-sys" -version = "0.48.0" +name = "windows-collections" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ - "windows-targets 0.48.0", + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", ] [[package]] @@ -1763,185 +1618,99 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] -name = "windows-targets" -version = "0.48.0" +name = "windows-threading" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", -] - -[[package]] -name = "windows-targets" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" -dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows-link", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "windows_i686_gnu" -version = "0.48.0" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "wit-bindgen-rt" -version = "0.21.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026d24a27f6712541fa534f2954bd9e0eb66172f033c2157c0f31d106255c497" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] [[package]] name = "yansi" @@ -1950,7 +1719,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" [[package]] -name = "zeroize" -version = "1.6.0" +name = "zerocopy" +version = "0.8.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[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 088c062..e3b491a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dnst" -version = "0.1.0" +version = "0.1.0-rc1" edition = "2021" default-run = "dnst" readme = "README.md" @@ -23,6 +23,10 @@ default = ["openssl", "ring"] openssl = ["domain/openssl"] ring = ["domain/ring"] +# For building in a cargo cross container that lacks openssl-dev so cannot +# successfully compile the Rust OpenSSL crate. +static-openssl = ["domain/static-openssl"] + [dependencies] bytes = "1.8.0" chrono = "0.4.38" @@ -64,3 +68,61 @@ domain = { git = "https://github.com/NLnetLabs/domain.git", branch = "main", fea "unstable-stelline", ] } pretty_assertions = "1.4.1" + +# Related reading: https://wiki.debian.org/Teams/RustPackaging/Policy +[package.metadata.deb] +depends = "$auto" +section = "net" +priority = "optional" +assets = [ + ["target/release/dnst", "usr/bin/", "755"], + ["README.md", "usr/share/doc/dnst/", "644"], + # TODO: Extend Ploutos to generate the man pages from sources. + ["doc/manual/build/man/dnst.1", "/usr/share/man/man1/dnst.1", "644"], + ["doc/manual/build/man/dnst-key2ds.1", "/usr/share/man/man1/dnst-key2ds.1", "644"], + ["doc/manual/build/man/dnst-keygen.1", "/usr/share/man/man1/dnst-keygen.1", "644"], + ["doc/manual/build/man/dnst-notify.1", "/usr/share/man/man1/dnst-notify.1", "644"], + ["doc/manual/build/man/dnst-nsec3-hash.1", "/usr/share/man/man1/dnst-nsec3-hash.1", "644"], + ["doc/manual/build/man/dnst-signzone.1", "/usr/share/man/man1/dnst-signzone.1", "644"], + ["doc/manual/build/man/dnst-update.1", "/usr/share/man/man1/dnst-update.1", "644"], + ["doc/manual/build/man/ldns-key2ds.1", "/usr/share/man/man1/ldns-key2ds.1", "644"], + ["doc/manual/build/man/ldns-keygen.1", "/usr/share/man/man1/ldns-keygen.1", "644"], + ["doc/manual/build/man/ldns-notify.1", "/usr/share/man/man1/ldns-notify.1", "644"], + ["doc/manual/build/man/ldns-nsec3-hash.1", "/usr/share/man/man1/ldns-nsec3-hash.1", "644"], + ["doc/manual/build/man/ldns-signzone.1", "/usr/share/man/man1/ldns-signzone.1", "644"], + ["doc/manual/build/man/ldns-update.1", "/usr/share/man/man1/ldns-update.1", "644"], +] +changelog = "target/debian/changelog" # this will be generated by the pkg workflow +copyright = "Copyright (c) 2024, NLnet Labs. All rights reserved." +maintainer-scripts = "pkg/debian" +# See: https://www.debian.org/doc/debian-policy/ch-relationships.html#replacing-whole-packages-forcing-their-removal +conflicts = "ldnsutils" +replaces = "ldnsutils" + +# Related reading: https://docs.fedoraproject.org/en-US/packaging-guidelines/Rust/ +[package.metadata.generate-rpm] +assets = [ + { source = "target/release/dnst", dest = "/usr/bin/dnst", mode = "755" }, + # TODO: Extend Ploutos to generate the man pages from sources. + { source = "doc/manual/build/man/dnst.1", dest = "/usr/share/man/man1/dnst.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/dnst-key2ds.1", dest = "/usr/share/man/man1/dnst-key2ds.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/dnst-keygen.1", dest = "/usr/share/man/man1/dnst-keygen.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/dnst-notify.1", dest = "/usr/share/man/man1/dnst-notify.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/dnst-nsec3-hash.1", dest = "/usr/share/man/man1/dnst-nsec3-hash.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/dnst-signzone.1", dest = "/usr/share/man/man1/dnst-signzone.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/dnst-update.1", dest = "/usr/share/man/man1/dnst-update.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/ldns-key2ds.1", dest = "/usr/share/man/man1/ldns-key2ds.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/ldns-keygen.1", dest = "/usr/share/man/man1/ldns-keygen.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/ldns-notify.1", dest = "/usr/share/man/man1/ldns-notify.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/ldns-nsec3-hash.1", dest = "/usr/share/man/man1/ldns-nsec3-hash.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/ldns-signzone.1", dest = "/usr/share/man/man1/ldns-signzone.1", mode = "644", doc = true }, + { source = "doc/manual/build/man/ldns-update.1", dest = "/usr/share/man/man1/ldns-update.1", mode = "644", doc = true }, +] + +# These get set using cargo-generate-rpm --set-metadata at package build time. +#post_trans_script = ... +#post_uninstall_script = ... + +# Set Obsoletes per https://docs.fedoraproject.org/en-US/packaging-guidelines/#renaming-or-replacing-existing-packages. +[package.metadata.generate-rpm.obsoletes] +ldns-utils = "< 0:1.8.4-2" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..603041e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,155 @@ +# This is a multi-stage Dockerfile, with a selectable first stage. With this +# approach we get: +# +# 1. Separation of dependencies needed to build our app in the 'build' stage +# and those needed to run our app in the 'final' stage, as we don't want +# the build-time dependencies to be included in the final Docker image. +# +# 2. Support for either building our app for the architecture of the base +# image using MODE=build (the default) or for externally built app +# binaries (e.g. cross-compiled) using MODE=copy. +# +# In total there are four stages consisting of: +# - Two possible first stages: 'build' or 'copy'. +# - A special 'source' stage which selects either 'build' or 'copy' as the +# source of binaries to be used by ... +# - The 'final' stage. + + +### +### ARG DEFINITIONS ########################################################### +### + +# This section defines arguments that can be overriden on the command line +# when invoking `docker build` using the argument form: +# +# `--build-arg =`. + +# MODE +# ==== +# Supported values: build (default), copy +# +# By default this Dockerfile will build our app from sources. If the sources +# have already been (cross) compiled by some external process and you wish to +# use the resulting binaries from that process, then: +# +# 1. Create a directory on the host called 'dockerbin/$TARGETPLATFORM' +# containing the already compiled app binaries (where $TARGETPLATFORM +# is a special variable set by Docker BuiltKit). +# 2. Supply arguments `--build-arg MODE=copy` to `docker build`. +ARG MODE=build + + +# BASE_IMG +# ======== +# +# Only used when MODE=build. +ARG BASE_IMG=alpine:3.21 + + +# CARGO_ARGS +# ========== +# +# Only used when MODE=build. +# +# This ARG can be used to control the features enabled when compiling the app +# or other compilation settings as necessary. +ARG CARGO_ARGS + + +### +### BUILD STAGES ############################################################## +### + + +# ----------------------------------------------------------------------------- +# Docker stage: build +# ----------------------------------------------------------------------------- +# +# Builds our app binaries from sources. +FROM ${BASE_IMG} AS build +ARG CARGO_ARGS + +RUN apk add --no-cache openssl-dev rust cargo + +WORKDIR /tmp/build +COPY . . + +# `CARGO_HTTP_MULTIPLEXING` forces Cargo to use HTTP/1.1 without pipelining +# instead of HTTP/2 with multiplexing. This seems to help with various +# "spurious network error" warnings when Cargo attempts to fetch from crates.io +# when building this image on Docker Hub and GitHub Actions build machines. +# +# `cargo install` is used instead of `cargo build` because it places just the +# binaries we need into a predictable output directory. We can't control this +# with arguments to cargo build as `--out-dir` is unstable and contentious and +# `--target-dir` still requires us to know which profile and target the +# binaries were built for. By using `cargo install` we can also avoid needing +# to hard-code the set of binary names to copy so that if we add or remove +# built binaries in future this will "just work". Note that `--root /tmp/out` +# actually causes the binaries to be placed in `/tmp/out/bin/`. `cargo install` +# will create the output directory for us. +RUN CARGO_HTTP_MULTIPLEXING=false cargo install \ + --locked \ + --path . \ + --root /tmp/out/ \ + ${CARGO_ARGS} + + +# ----------------------------------------------------------------------------- +# Docker stage: copy +# ----------------------------------------------------------------------------- +# Only used when MODE=copy. +# +# Copy binaries from the host directory 'dockerbin/$TARGETPLATFORM' directory +# into this build stage to the same predictable location that binaries would be +# in if MODE were 'build'. +# +# Requires that `docker build` be invoked with variable `DOCKER_BUILDKIT=1` set +# in the environment. This is necessary so that Docker will skip the unused +# 'build' stage and so that the magic $TARGETPLATFORM ARG will be set for us. +FROM ${BASE_IMG} AS copy +ARG TARGETPLATFORM +ONBUILD COPY dockerbin/$TARGETPLATFORM /tmp/out/bin/ + + +# ----------------------------------------------------------------------------- +# Docker stage: source +# ----------------------------------------------------------------------------- +# This is a "magic" build stage that "labels" a chosen prior build stage as the +# one that the build stage after this one should copy application binaries +# from. It also causes the ONBUILD COPY command from the 'copy' stage to be run +# if needed. Finally, we ensure binaries have the executable flag set because +# when copied in from outside they may not have the flag set, especially if +# they were uploaded as a GH actions artifact then downloaded again which +# causes file permissions to be lost. +# See: https://github.com/actions/upload-artifact#permission-loss +FROM ${MODE} AS source +RUN chmod a+x /tmp/out/bin/* + + +# ----------------------------------------------------------------------------- +# Docker stage: final +# ----------------------------------------------------------------------------- +# Create an image containing just the binaries, configs & scripts needed to run +# our app, and not the things needed to build it. +# +# The previous build stage from which binaries are copied is controlled by the +# MODE ARG (see above). +FROM ${BASE_IMG} AS final + +# Copy binaries from the 'source' build stage into the image we are building +COPY --from=source /tmp/out/bin/* /usr/local/bin/ + +# Install required runtime dependencies +RUN apk add --no-cache libgcc tini + +# Set the working directory so that users can easily mount a host filesystem +# path where the dnst commands can read from and write to, e.g. via docker +# run -v /tmp/:/data. +WORKDIR /data + +# Use Tini to ensure that our application responds to CTRL-C when run in the +# foreground without the Docker argument "--init" (which is actually another +# way of activating Tini, but cannot be enabled from inside the Docker image). +ENTRYPOINT ["/sbin/tini", "--", "dnst"] diff --git a/doc/manual/build/man/dnst-key2ds.1 b/doc/manual/build/man/dnst-key2ds.1 new file mode 100644 index 0000000..64de0f6 --- /dev/null +++ b/doc/manual/build/man/dnst-key2ds.1 @@ -0,0 +1,80 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "DNST-KEY2DS" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +dnst-key2ds \- Generate DS RRs from the DNSKEYs in a keyfile +.SH SYNOPSIS +.sp +\fBdnst key2ds\fP \fB[OPTIONS]\fP \fB\fP +.SH DESCRIPTION +.sp +\fBdnst key2ds\fP generates a DS RR for each DNSKEY in \fB\fP\&. +.sp +The following file will be created for each key: \fBK++.ds\fP\&. The +base name \fBK++\fP will be printed to stdout. +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-a , \-\-algorithm +Use the given algorithm for the digest. Defaults to the digest algorithm +used for the DNSKEY, and if it can\(aqt be determined SHA\-1. +.UNINDENT +.INDENT 0.0 +.TP +.B \-f, \-\-force +Overwrite existing \fB\&.ds\fP files. +.UNINDENT +.INDENT 0.0 +.TP +.B \-\-ignore\-sep +Ignore the SEP flag and make DS records for any key. +.UNINDENT +.INDENT 0.0 +.TP +.B \-n +Write the generated DS records to stdout instead of a file. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h, \-\-help +Print the help text (short summary with \fB\-h\fP, long help with +\fB\-\-help\fP). +.UNINDENT +.INDENT 0.0 +.TP +.B \-V, \-\-version +Print the version. +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/dnst-keygen.1 b/doc/manual/build/man/dnst-keygen.1 new file mode 100644 index 0000000..6453752 --- /dev/null +++ b/doc/manual/build/man/dnst-keygen.1 @@ -0,0 +1,164 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "DNST-KEYGEN" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +dnst-keygen \- Generate a new key pair for a domain name +.SH SYNOPSIS +.sp +\fBdnst keygen\fP \fB[OPTIONS]\fP \fB\-a \fP \fB\fP +.SH DESCRIPTION +.sp +\fBdnst keygen\fP generates a new key pair for a given domain name. +.sp +The following files will be created: +.INDENT 0.0 +.IP \(bu 2 +\fBK++.key\fP: The public key file containing a DNSKEY RR in +zone file format. +.IP \(bu 2 +\fBK++.private\fP: The private key file containing the private +key data fields in BIND\(aqs \fIPrivate\-key\-format\fP\&. +.IP \(bu 2 +\fBK++.ds\fP: The public key digest file containing the DS RR +in zone file format. It is only created for key signing keys. +.UNINDENT +.nf +\fB\fP is the fully\-qualified owner name for the key (with a trailing dot). +\fB\fP is the algorithm number of the key, zero\-padded to 3 digits. +\fB\fP is the 16\-bit tag of the key, zero\-padded to 5 digits. +.fi +.sp +.sp +Upon completion, \fBK++\fP will be printed. +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-a +Use the given signing algorithm. +.sp +Possible values are: +.TS +center; +|l|l|l|. +_ +T{ +\fBMnemonic\fP +T} T{ +\fBNumber\fP +T} T{ +\fBDescription\fP +T} +_ +T{ +\fBlist\fP +T} T{ +T} T{ +List available algorithms +T} +_ +T{ +\fBRSASHA256\fP +T} T{ +8 +T} T{ +RSA with SHA\-256 +T} +_ +T{ +\fBECDSAP256SHA256\fP +T} T{ +13 +T} T{ +ECDSA P\-256 with SHA\-256 +T} +_ +T{ +\fBECDSAP384SHA384\fP +T} T{ +14 +T} T{ +ECDSA P\-384 with SHA\-384 +T} +_ +T{ +\fBED25519\fP +T} T{ +15 +T} T{ +ED25519 +T} +_ +T{ +\fBED448\fP +T} T{ +16 +T} T{ +ED448 +T} +_ +.TE +.UNINDENT +.INDENT 0.0 +.TP +.B \-k +Generate a key signing key (KSK) instead of a zone signing key (ZSK). +.UNINDENT +.INDENT 0.0 +.TP +.B \-b +The length of the key (for RSA keys only). Defaults to 2048. +.UNINDENT +.INDENT 0.0 +.TP +.B \-r +The randomness source to use for generation. Defaults to \fB/dev/urandom\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-s +Create symlinks \fB\&.key\fP and \fB\&.private\fP to the generated keys. +.UNINDENT +.INDENT 0.0 +.TP +.B \-f +Overwrite existing symlinks (for use with \fB\-s\fP). +.UNINDENT +.INDENT 0.0 +.TP +.B \-h, \-\-help +Print the help text (short summary with \fB\-h\fP, long help with +\fB\-\-help\fP). +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/dnst-notify.1 b/doc/manual/build/man/dnst-notify.1 new file mode 100644 index 0000000..a4b0976 --- /dev/null +++ b/doc/manual/build/man/dnst-notify.1 @@ -0,0 +1,92 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "DNST-NOTIFY" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +dnst-notify \- Send a NOTIFY message to a list of name servers +.SH SYNOPSIS +.sp +\fBdnst notify\fP \fB[OPTIONS]\fP \fB\-z \fP \fB...\fP +.SH DESCRIPTION +.sp +\fBdnst notify\fP sends a NOTIFY message to the specified name servers. A name +server can be specified as a domain name or IP address. +.sp +This tells them that an updated zone is available at the primaries. It can +perform TSIG signatures, and it can add a SOA serial number of the updated +zone. If a server already has that serial number it will disregard the message. +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-z +The zone to send the NOTIFY for. +.UNINDENT +.INDENT 0.0 +.TP +.B \-I
+Source IP to send the message from. +.UNINDENT +.INDENT 0.0 +.TP +.B \-s +SOA version number to include in the NOTIFY message. +.UNINDENT +.INDENT 0.0 +.TP +.B \-y, \-\-tsig +A base64 TSIG key and optional algorithm to use for the NOTIFY message. +The algorithm defaults to \fBhmac\-sha512\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-p, \-\-port +Destination port to send the UDP packet to. Defaults to 53. +.UNINDENT +.INDENT 0.0 +.TP +.B \-d, \-\-debug +Print debug information. +.UNINDENT +.INDENT 0.0 +.TP +.B \-r, \-\-retries +Max number of retries. Defaults to 15. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h, \-\-help +Print the help text (short summary with \fB\-h\fP, long help with +\fB\-\-help\fP). +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/dnst-nsec3-hash.1 b/doc/manual/build/man/dnst-nsec3-hash.1 new file mode 100644 index 0000000..8f94c25 --- /dev/null +++ b/doc/manual/build/man/dnst-nsec3-hash.1 @@ -0,0 +1,74 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "DNST-NSEC3-HASH" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +dnst-nsec3-hash \- Print out the NSEC3 hash of a domain name +.SH SYNOPSIS +.sp +\fBdnst nsec3\-hash\fP \fB[OPTIONS]\fP \fB\fP +.SH DESCRIPTION +.sp +\fBdnst nsec3\-hash\fP prints the NSEC3 hash of a given domain name. +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-a , \-\-algorithm +Use the given algorithm number for the hash calculation. Defaults to +1 (SHA\-1). +.UNINDENT +.INDENT 0.0 +.TP +.B \-i , \-t , \-\-iterations +Use the given number of additional iterations for the hash +calculation. Defaults to 0. +.UNINDENT +.INDENT 0.0 +.TP +.B \-s , \-\-salt +Use the given salt for the hash calculation. The salt value should be +in hexadecimal format. Defaults to an empty salt. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h, \-\-help +Print the help text (short summary with \fB\-h\fP, long help with +\fB\-\-help\fP). +.UNINDENT +.INDENT 0.0 +.TP +.B \-V, \-\-version +Print the version. +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/dnst-signzone.1 b/doc/manual/build/man/dnst-signzone.1 new file mode 100644 index 0000000..f8dde18 --- /dev/null +++ b/doc/manual/build/man/dnst-signzone.1 @@ -0,0 +1,208 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "DNST-SIGNZONE" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +dnst-signzone \- Sign the zone with the given key(s) +.SH SYNOPSIS +.sp +\fBdnst signzone\fP \fB[OPTIONS]\fP \fB\fP \fB...\fP +.SH DESCRIPTION +.sp +\fBdnst signzone\fP signs the zonefile with the given key(s). +.sp +Keys must be specified by their base name (usually \fBK++\fP), +i.e. WITHOUT the \fB\&.private\fP or \fB\&.key\fP extension. Both \fB\&.private\fP and +\fB\&.key\fP files are required. +.SH ARGUMENTS +.INDENT 0.0 +.TP +.B +The zonefile to sign. Any existing NSEC(3) and/or RRSIG resource records +will be skipped when loading the file. +.UNINDENT +.INDENT 0.0 +.TP +.B ... +The keys to sign the zonefile with. +.UNINDENT +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-d +Do not add used keys to the resulting zonefile. +.UNINDENT +.INDENT 0.0 +.TP +.B \-e +Set the expiration date of signatures to this date (see +\fI\%DATES\fP). Defaults to 4 weeks from now. +.UNINDENT +.INDENT 0.0 +.TP +.B \-f +Write signed zone to file. Use \fB\-f \-\fP to output to stdout. Defaults to +\fB.signed\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-i +Set the inception date of signatures to this date (see +\fI\%DATES\fP). Defaults to now. +.UNINDENT +.INDENT 0.0 +.TP +.B \-o +Set the origin for the zone. Mandatory. +.UNINDENT +.INDENT 0.0 +.TP +.B \-u +Set SOA serial to the number of seconds since Jan 1st 1970. +.sp +If this would NOT result in the SOA serial increasing it will be +incremented instead. +.UNINDENT +.INDENT 0.0 +.TP +.B \-n +Use NSEC3 instead of NSEC. By default, RFC 9276 best practice settings +are used: SHA\-1, no extra iterations, empty salt. To use different NSEC3 +settings see \fI\%NSEC3 options\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-A +Sign DNSKEYs with all keys instead of the minimal set. +.UNINDENT +.INDENT 0.0 +.TP +.B \-U +Sign with every unique algorithm in the provided keys. +.UNINDENT +.INDENT 0.0 +.TP +.B \-z <[SCHEME:]HASH> +Add a ZONEMD resource record. Accepts both mnemonics and numbers. +This option can be provided more than once to add multiple ZONEMD RRs. +However, only one per scheme\-hash tuple will be added. +.nf +HASH supports \fBSHA384\fP (1) and \fBSHA512\fP (2). +SCHEME supports \fBSIMPLE\fP (1), the default. +.fi +.sp +.UNINDENT +.INDENT 0.0 +.TP +.B \-Z +Allow adding ZONEMD RRs without signing the zone. With this option, the +... argument becomes optional and determines whether to sign the +zone. +.UNINDENT +.INDENT 0.0 +.TP +.B \-H +Hash only, don\(aqt sign. With this option, the normally mandatory ... +argument can be omitted. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h, \-\-help +Print the help text (short summary with \fB\-h\fP, long help with +\fB\-\-help\fP). +.UNINDENT +.SH OUTPUT FORMATTING OPTIONS +.sp +The following options can be used to affect the format of the output. +.INDENT 0.0 +.TP +.B \-b +Add comments on DNSSEC records. Without this option only DNSKEY RRs +will have their key tag annotated in the comment. +.UNINDENT +.INDENT 0.0 +.TP +.B \-L +Preceed the zone output by a list that contains the NSEC3 hashes of the +original ownernames. +.UNINDENT +.INDENT 0.0 +.TP +.B \-O +Order NSEC3 RRs by unhashed owner name. +.UNINDENT +.INDENT 0.0 +.TP +.B \-R +Order RRSIG RRs by the record type that they cover. +.UNINDENT +.INDENT 0.0 +.TP +.B \-T +Output YYYYMMDDHHmmSS RRSIG timestamps instead of seconds since epoch. +.UNINDENT +.SH NSEC3 OPTIONS +.sp +The following options can be used with \fB\-n\fP to override the default NSEC3 +settings used. +.INDENT 0.0 +.TP +.B \-a +Specify the hashing algorithm. Defaults to SHA\-1. +.UNINDENT +.INDENT 0.0 +.TP +.B \-s +Specify the salt as a hex string. Defaults to \fB\-\fP, meaning empty salt. +.UNINDENT +.INDENT 0.0 +.TP +.B \-t +Set the number of extra hash iterations. Defaults to 0. +.UNINDENT +.INDENT 0.0 +.TP +.B \-p +Set the opt\-out flag on all NSEC3 RRs. +.UNINDENT +.INDENT 0.0 +.TP +.B \-P +Set the opt\-out flag on all NSEC3 RRs and skip unsigned delegations. +.UNINDENT +.SH DATES +.sp +A date can be a UNIX timestamp as seconds since the Epoch (1970\-01\-01 +00:00 UTC), or of the form \fB\fP\&. +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/dnst-update.1 b/doc/manual/build/man/dnst-update.1 new file mode 100644 index 0000000..298376c --- /dev/null +++ b/doc/manual/build/man/dnst-update.1 @@ -0,0 +1,83 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "DNST-UPDATE" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +dnst-update \- Send a dynamic update packet to update an IP (or delete all existing IPs) for a domain name +.SH SYNOPSIS +.sp +\fBdnst update\fP \fB\fP \fB[ZONE]\fP \fB\fP +\fB[ ]\fP +.SH DESCRIPTION +.sp +\fBdnst update\fP sends a dynamic update packet to update an IP (or delete all +existing IPs) for a domain name. +.SH ARGUMENTS +.INDENT 0.0 +.TP +.B +The domain name to update the IP address of +.UNINDENT +.INDENT 0.0 +.TP +.B +The zone to send the update to (if omitted, derived from SOA record) +.UNINDENT +.INDENT 0.0 +.TP +.B +The IP to update the domain with (\fBnone\fP to remove any existing IPs) +.UNINDENT +.INDENT 0.0 +.TP +.B +TSIG key name +.UNINDENT +.INDENT 0.0 +.TP +.B +TSIG algorithm (e.g. \(dqhmac\-sha256\(dq) +.UNINDENT +.INDENT 0.0 +.TP +.B +Base64 encoded TSIG key data. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h, \-\-help +Print the help text (short summary with \fB\-h\fP, long help with +\fB\-\-help\fP). +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/dnst.1 b/doc/manual/build/man/dnst.1 new file mode 100644 index 0000000..390b0b6 --- /dev/null +++ b/doc/manual/build/man/dnst.1 @@ -0,0 +1,71 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "DNST" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +dnst \- DNS Management Tools +.SH SYNOPSIS +.sp +\fBdnst\fP \fB[OPTIONS]\fP \fB\fP \fB[ARGS]\fP +.SH DESCRIPTION +.sp +Manage various aspects of the Domain Name System (DNS). +.sp +\fBdnst\fP provides a number of commands that perform various tasks related to +managing DNS servers and DNS zones. +.sp +Please consult the manual pages for these individual commands for more +information. +.SH DNST COMMANDS +.INDENT 0.0 +.TP +.B \fI\%dnst\-key2ds\fP (1) +Generate DS RRs from the DNSKEYs in a keyfile. +.TP +.B \fI\%dnst\-keygen\fP (1) +Generate a new key pair for a domain name. +.TP +.B \fI\%dnst\-notify\fP (1) +Send a NOTIFY message to a list of name servers. +.TP +.B \fI\%dnst\-nsec3\-hash\fP (1) +Print out the NSEC3 hash of a domain name. +.TP +.B \fI\%dnst\-signzone\fP (1) +Sign the zone with the given key(s). +.TP +.B \fI\%dnst\-update\fP (1) +Send a dynamic update packet to update an IP (or delete all existing IPs) for a domain name. +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/ldns-key2ds.1 b/doc/manual/build/man/ldns-key2ds.1 new file mode 100644 index 0000000..cedbf6e --- /dev/null +++ b/doc/manual/build/man/ldns-key2ds.1 @@ -0,0 +1,77 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "LDNS-KEY2DS" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +ldns-key2ds \- Generate DS RRs from the DNSKEYs in a keyfile +.SH SYNOPSIS +.sp +\fBldns\-key2ds\fP \fB[OPTIONS]\fP \fB\fP +.SH DESCRIPTION +.sp +\fBldns\-key2ds\fP is used to transform a public DNSKEY RR to a DS RR. When run +it will read \fB\fP with a DNSKEY RR in it, and it will create a .ds +file with the DS RR in it. +.sp +It prints out the basename for this file (\fBK++\fP). +.sp +By default, it takes a pick of algorithm similar to the key algorithm, +SHA1 for RSASHA1, and so on. +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-f +Ignore SEP flag (i.e. make DS records for any key) +.UNINDENT +.INDENT 0.0 +.TP +.B \-n +Write the result DS Resource Record to stdout instead of a file +.UNINDENT +.INDENT 0.0 +.TP +.B \-1 +Use SHA1 as the hash function. +.UNINDENT +.INDENT 0.0 +.TP +.B \-2 +Use SHA256 as the hash function +.UNINDENT +.INDENT 0.0 +.TP +.B \-4 +Use SHA383 as the hash function +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/ldns-keygen.1 b/doc/manual/build/man/ldns-keygen.1 new file mode 100644 index 0000000..ff5156f --- /dev/null +++ b/doc/manual/build/man/ldns-keygen.1 @@ -0,0 +1,92 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "LDNS-KEYGEN" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +ldns-keygen \- Generate a new key pair for a domain name +.SH SYNOPSIS +.sp +\fBldns\-keygen\fP \fB[OPTIONS]\fP \fB\fP +.SH DESCRIPTION +.sp +\fBldns\-keygen\fP is used to generate a private/public keypair. When run, it will +create 3 files; a \fB\&.key\fP file with the public DNSKEY, a \fB\&.private\fP file +with the private keydata and a \fB\&.ds\fP file with the DS record of the DNSKEY +record. +.sp +ldns\-keygen prints the basename for the key files: \fBK++\fP +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-a +Create a key with this algorithm. Specifying \(aqlist\(aq here gives a list of +supported algorithms. Several alias names are also accepted (from older +versions and other software), the list gives names from the RFC. Also the +plain algorithm number is accepted. +.UNINDENT +.INDENT 0.0 +.TP +.B \-b +Use this many bits for the key length. +.UNINDENT +.INDENT 0.0 +.TP +.B \-k +When given, generate a key signing key. This just sets the flag field to +257 instead of 256 in the DNSKEY RR in the .key file. +.UNINDENT +.INDENT 0.0 +.TP +.B \-r +Make ldns\-keygen use this file to seed the random generator with. This +will default to /dev/random. +.UNINDENT +.INDENT 0.0 +.TP +.B \-s +ldns\-keygen will create symbolic links named \fB\&.private\fP to the new +generated private key, \fB\&.key\fP to the public DNSKEY and \fB\&.ds\fP to the +file containing DS record data. +.UNINDENT +.INDENT 0.0 +.TP +.B \-f +Force symlinks to be overwritten if they exist. +.UNINDENT +.INDENT 0.0 +.TP +.B \-v +Show the version and exit +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/ldns-notify.1 b/doc/manual/build/man/ldns-notify.1 new file mode 100644 index 0000000..ec29d6e --- /dev/null +++ b/doc/manual/build/man/ldns-notify.1 @@ -0,0 +1,98 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "LDNS-NOTIFY" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +ldns-notify \- Send a NOTIFY message to a list of name servers +.SH SYNOPSIS +.sp +\fBldns\-notify\fP \fB[OPTIONS]\fP \fB\-z \fP \fB...\fP +.SH DESCRIPTION +.sp +\fBldns\-notify\fP sends a NOTIFY packet to the specified name servers. A name +server can be specified as a domain name or IP address. +.sp +This tells them that an updated zone is available at the primaries. It can +perform TSIG signatures, and it can add a SOA serial number of the updated +zone. If a server already has that serial number it will disregard the message. +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-z +The zone that is updated. +.UNINDENT +.INDENT 0.0 +.TP +.B \-I
+Source IP to send the message from. +.UNINDENT +.INDENT 0.0 +.TP +.B \-s +Append a SOA record indicating the serial number of the updated zone. +.UNINDENT +.INDENT 0.0 +.TP +.B \-p +Destination port to send the UDP packet to. Defaults to 53. +.UNINDENT +.INDENT 0.0 +.TP +.B \-y +A base64 TSIG key and optional algorithm to use for the NOTIFY message. +The algorithm defaults to hmac\-sha512. +.UNINDENT +.INDENT 0.0 +.TP +.B \-d +Print verbose debug information. The query that is sent and the query +that is received. +.UNINDENT +.INDENT 0.0 +.TP +.B \-r +Specify the maximum number of retries before notify gives up trying to +send the UDP packet. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h +Print the help text and exit. +.UNINDENT +.INDENT 0.0 +.TP +.B \-v +Print the version and exit. +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/ldns-nsec3-hash.1 b/doc/manual/build/man/ldns-nsec3-hash.1 new file mode 100644 index 0000000..7122223 --- /dev/null +++ b/doc/manual/build/man/ldns-nsec3-hash.1 @@ -0,0 +1,65 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "LDNS-NSEC3-HASH" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +ldns-nsec3-hash \- Print out the NSEC3 hash of a domain name +.SH SYNOPSIS +.sp +\fBldns\-nsec3\-hash\fP \fB[OPTIONS]\fP \fB\fP +.SH DESCRIPTION +.sp +\fBldns\-nsec3\-hash\fP is used to print out the NSEC3 hash for the given domain name. +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-a +Use the given algorithm number for the hash calculation. Defaults to +1 (SHA\-1). +.UNINDENT +.INDENT 0.0 +.TP +.B \-s +Use the given salt for the hash calculation. The salt value should be +in hexadecimal format. Defaults to an empty salt. +.UNINDENT +.INDENT 0.0 +.TP +.B \-t +Use the given number of additional iterations for the hash +calculation. Defaults to 0. Note that this differs to the default value +used by the original \fIldns\-nsec3\-hash\fP command to comply with latest +best practice per RFC 9276. +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/ldns-signzone.1 b/doc/manual/build/man/ldns-signzone.1 new file mode 100644 index 0000000..e62f6de --- /dev/null +++ b/doc/manual/build/man/ldns-signzone.1 @@ -0,0 +1,240 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "LDNS-SIGNZONE" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +ldns-signzone \- Sign the zone with the given key(s) +.SH SYNOPSIS +.sp +\fBldns\-signzone\fP \fB[OPTIONS]\fP \fB\fP \fB...\fP +.SH DESCRIPTION +.sp +\fBldns\-signzone\fP is used to generate a DNSSEC signed zone. When run it will +create a new zonefile that contains RRSIG and NSEC(3) resource records, as +specified in RFC 4033, RFC 4034, RFC 4035 and RFC 5155. +.sp +This is a re\-implementation of the original \fBldns\-signzone\fP which is largely +compatible with the original with some exceptions which are noted below. +.SH ARGUMENTS +.INDENT 0.0 +.TP +.B +The zonefile to sign. +.sp +Note: Unlike the original LDNS, any existing NSEC(3), NSEC3PARAM and/or +RRSIG resource records will be skipped when loading the zonefile. +.sp +Note: Unlike the original LDNS, the origin must be explicitly specified +either via an \fB$ORIGIN\fP directive in the zonefile or using the \fB\-o\fP +command line argument. +.UNINDENT +.INDENT 0.0 +.TP +.B ... +The keys to sign the zonefile with. +.sp +Keys must be specified by their base file name (usually +\fBK++\fP), i.e. WITHOUT the \fB\&.private\fP or \fB\&.key\fP +extension, with an optional path prefix. The \fB\&.private\fP file is +required to exist. The \fB\&.key\fP file will be used if a \fBDNSKEY\fP record +corresponding to the \fB\&.private\fP key cannot be found. +.sp +Multiple keys can be specified. Key Signing Keys are used as such when +they are either already present in the zone, or specified in a \fB\&.key\fP +file, and have the Secure Entry Point flag set. +.INDENT 7.0 +.TP +.B Note: Unlike the original LDNS: +.INDENT 7.0 +.IP \(bu 2 +Public keys corresponding to \fB\&.private\fP key MUST be supplied, +either as DNSKEY RRs in the given zone or as \fB\&.key\fP files. This +Implementation is not able to generate missing public keys. +.IP \(bu 2 +Supported DNSKEY algorithms are the ones supported by the +domain crate. Supported algorithms include RSASHA256, +ECDSAP256SHA256, and ED25519 but exclude RSHASHA1 and +RSASHA1\-NSEC3\-SHA1. +.UNINDENT +.UNINDENT +.UNINDENT +.SH OPTIONS +.INDENT 0.0 +.TP +.B \-a +Sign the DNSKEY records with all keys. By default it is signed with a +minimal number of keys, to keep the response size for the DNSKEY query +small, only the SEP keys that are passed are used. If there are no +SEP keys, the DNSKEY RRset is signed with the non\-SEP keys. This option +turns off the default and all keys are used to sign the DNSKEY RRset. +.UNINDENT +.INDENT 0.0 +.TP +.B \-b +Augments the zone and the RR\(aqs with extra comment texts for a more +readable layout, easier to debug. NSEC3 records will have the unhashed +owner names in the comment text. +.sp +Without this option, only DNSKEY RR\(aqs will have their Key Tag annotated +in the comment text. +.sp +Note: This option is ignored if the \fB\-f \-\fP is used. +.sp +Note: Unlike the original LDNS, DS records are printed without a +bubblebabble version of the data in the comment text, and some ordering +for easier consumption by humans is ONLY done if \fB\-b\fP is in effect, +e.g. ordering RRSIGs after the record they cover, and ordering NSEC3 +hashes by unhashed owner name rather than by hashed owner name. +.UNINDENT +.INDENT 0.0 +.TP +.B \-d +Do not add used keys to the resulting zonefile. +.UNINDENT +.INDENT 0.0 +.TP +.B \-e +Set the expiration timestamp of signatures to the given date (and time, +optionally, see \fI\%Engine Options\fP for details about acceptable +formats for the given \fB\fP value). Defaults to 4 weeks from now. +.UNINDENT +.INDENT 0.0 +.TP +.B \-f +Write signed zone to file. Use \fB\-f \-\fP to output to stdout. Defaults to +\fB.signed\fP\&. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h +Print the help text. +.UNINDENT +.INDENT 0.0 +.TP +.B \-i +Set the inception timestamp of signatures to the given date (and time, +optionally, see \fI\%Engine Options\fP for details about acceptable +formats for the given \fB\fP value). Defaults to now. +.UNINDENT +.INDENT 0.0 +.TP +.B \-n +Use NSEC3 instead of NSEC. If specified, you can use extra options (see +\fI\%NSEC3 options\fP). +.UNINDENT +.INDENT 0.0 +.TP +.B \-o +Use this as the origin for the zone (only necessary for zonefiles with +relative names and no $ORIGIN). +.UNINDENT +.INDENT 0.0 +.TP +.B \-u +Set the SOA serial in the resulting zonefile to the given number of +seconds since Jan 1st 1970. +.UNINDENT +.INDENT 0.0 +.TP +.B \-u +Sign with every unique algorithm in the provided keys. The DNSKEY set is +signed with all the SEP keys, plus all the non\-SEP keys that have an +algorithm that was not present in the SEP key set. +.UNINDENT +.INDENT 0.0 +.TP +.B \-v +Print the version and exit. +.UNINDENT +.INDENT 0.0 +.TP +.B \-z <[SCHEME:]HASH> +Add a ZONEMD resource record. Accepts both mnemonics and numbers. +This option can be provided more than once to add multiple ZONEMD RRs. +However, only one per scheme\-hash tuple will be added. +.nf +HASH supports \fBsha384\fP (1) and \fBsha512\fP (2). +SCHEME supports \fBsimple\fP (1), the default. +.fi +.sp +.UNINDENT +.INDENT 0.0 +.TP +.B \-Z +Allow adding ZONEMD RRs without signing the zone. With this option, the +... argument becomes optional and determines whether to sign the +zone. +.UNINDENT +.SH NSEC3 OPTIONS +.sp +The following options can be used with \fB\-n\fP to override the default NSEC3 +settings used. +.INDENT 0.0 +.TP +.B \-a +Specify the hashing algorithm. Only SHA\-1 is supported. +.UNINDENT +.INDENT 0.0 +.TP +.B \-t +Set the number of extra hash iterations. Defaults to 0. +.sp +Note: The default value differs to that of the original LDNS which has a +default of 1. The new default value is in accordance with RFC 9276 +\(dqGuidance for NSEC3 Parameter Settings\(dq. +.UNINDENT +.INDENT 0.0 +.TP +.B \-s +Specify the salt as a hex string. Defaults to \fB\-\fP, meaning empty salt. +.UNINDENT +.INDENT 0.0 +.TP +.B \-p +Set the opt\-out flag on all NSEC3 RRs. +.UNINDENT +.SH ENGINE OPTIONS +.sp +Unlike the original LDNS, OpenSSL engines and their associated command line +arguments are not supported by this re\-implementation. +.SH DATES +.sp +A date can be a UNIX timestamp as seconds since the Epoch (1970\-01\-01 +00:00 UTC), or of the form \fB\fP\&. +.sp +Note: RRSIG inception and expiration timestamps in the signed output zone will +be in unsigned decimal integer form (indicating seconds since 1 January 1970 +00:00:00 UTC) unlike the original LDNS which produced timestamps in the form +\fBYYYYMMDDHHmmSS\fP\&. +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/doc/manual/build/man/ldns-update.1 b/doc/manual/build/man/ldns-update.1 new file mode 100644 index 0000000..3ae0cfa --- /dev/null +++ b/doc/manual/build/man/ldns-update.1 @@ -0,0 +1,83 @@ +.\" Man page generated from reStructuredText. +. +. +.nr rst2man-indent-level 0 +. +.de1 rstReportMargin +\\$1 \\n[an-margin] +level \\n[rst2man-indent-level] +level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] +- +\\n[rst2man-indent0] +\\n[rst2man-indent1] +\\n[rst2man-indent2] +.. +.de1 INDENT +.\" .rstReportMargin pre: +. RS \\$1 +. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] +. nr rst2man-indent-level +1 +.\" .rstReportMargin post: +.. +.de UNINDENT +. RE +.\" indent \\n[an-margin] +.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] +.nr rst2man-indent-level -1 +.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] +.in \\n[rst2man-indent\\n[rst2man-indent-level]]u +.. +.TH "LDNS-UPDATE" "1" "Jun 02, 2025" "0.1.0-rc1" "dnst" +.SH NAME +ldns-update \- Send a dynamic update packet to update an IP (or delete all existing IPs) for a domain name +.SH SYNOPSIS +.sp +\fBldns\-update\fP \fB\fP \fB[ZONE]\fP \fB\fP +\fB[ ]\fP +.SH DESCRIPTION +.sp +\fBldns\-update\fP sends a dynamic update packet to update an IP (or delete all +existing IPs) for a domain name. +.SH OPTIONS +.INDENT 0.0 +.TP +.B +The domain name to update the IP address of +.UNINDENT +.INDENT 0.0 +.TP +.B +The zone to send the update to (if omitted, derived from SOA record) +.UNINDENT +.INDENT 0.0 +.TP +.B +The IP to update the domain with (\fBnone\fP to remove any existing IPs) +.UNINDENT +.INDENT 0.0 +.TP +.B +TSIG key name +.UNINDENT +.INDENT 0.0 +.TP +.B +TSIG algorithm (e.g. \(dqhmac\-sha256\(dq) +.UNINDENT +.INDENT 0.0 +.TP +.B +Base64 encoded TSIG key data. +.UNINDENT +.INDENT 0.0 +.TP +.B \-h, \-\-help +Print the help text (short summary with \fB\-h\fP, long help with +\fB\-\-help\fP). +.UNINDENT +.SH AUTHOR +NLnet Labs +.SH COPYRIGHT +2024–2025, NLnet Labs +.\" Generated by docutils manpage writer. +. diff --git a/pkg/debian/postinst b/pkg/debian/postinst new file mode 100644 index 0000000..86017a6 --- /dev/null +++ b/pkg/debian/postinst @@ -0,0 +1,13 @@ +#!/bin/sh -e + +case "$1" in +configure) + # Create symbolic links + ln -f -s /usr/bin/dnst /usr/bin/ldns-keygen + ln -f -s /usr/bin/dnst /usr/bin/ldns-key2ds + ln -f -s /usr/bin/dnst /usr/bin/ldns-nsec3-hash + ln -f -s /usr/bin/dnst /usr/bin/ldns-notify + ln -f -s /usr/bin/dnst /usr/bin/ldns-signzone + ln -f -s /usr/bin/dnst /usr/bin/ldns-update + ;; +esac diff --git a/pkg/debian/prerm b/pkg/debian/prerm new file mode 100644 index 0000000..5644fb2 --- /dev/null +++ b/pkg/debian/prerm @@ -0,0 +1,8 @@ +#!/bin/sh -e + +case "$1" in +upgrade|remove) + # Remove symbolic links + rm -f /usr/bin/ldns-nsec3-hash + ;; +esac \ No newline at end of file diff --git a/pkg/rpm/scriptlets.toml b/pkg/rpm/scriptlets.toml new file mode 100644 index 0000000..8aae9b9 --- /dev/null +++ b/pkg/rpm/scriptlets.toml @@ -0,0 +1,40 @@ +post_trans_script = ''' +#!/bin/bash -e + +# This script will be run _after_ upgrade in the presence of an obsoleted ldns-utils +# package. This is useful because the ldns-utils uninstall script will have been run +# _after_ installation of dnst and so the symbolic links that we create will be +# removed, and we have to make sure here that they get put back + +FORCE= +# See: https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax +if [ $1 -eq 2 ]; then + # Upgrade + FORCE=-f +fi + +# Create symbolic links +ln -f -s ${FORCE} /usr/bin/dnst /usr/bin/ldns-keygen +ln -f -s ${FORCE} /usr/bin/dnst /usr/bin/ldns-key2ds +ln -f -s ${FORCE} /usr/bin/dnst /usr/bin/ldns-nsec3-hash +ln -f -s ${FORCE} /usr/bin/dnst /usr/bin/ldns-notify +ln -f -s ${FORCE} /usr/bin/dnst /usr/bin/ldns-signzone +ln -f -s ${FORCE} /usr/bin/dnst /usr/bin/ldns-update +''' + +post_uninstall_script = ''' +#!/bin/bash -e +#RPM_SYSTEMD_MACROS# + +# See: https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_syntax +if [ $1 -eq 0 ] ; then + # Uninstallation + # Remove symbolic links + rm -f /usr/bin/ldns-keygen + rm -f /usr/bin/ldns-key2ds + rm -f /usr/bin/ldns-nsec3-hash + rm -f /usr/bin/ldns-notify + rm -f /usr/bin/ldns-signzone + rm -f /usr/bin/ldns-update +fi +''' diff --git a/pkg/rules/docker-images-to-build.yml b/pkg/rules/docker-images-to-build.yml new file mode 100644 index 0000000..36db497 --- /dev/null +++ b/pkg/rules/docker-images-to-build.yml @@ -0,0 +1,36 @@ +--- +# matrix field notes: +# platform: used by Docker to use the right architecture base image. +# the set of supported values can be seen at: +# https://go.dev/doc/install/source#environment +# from: https://github.com/docker-library/official-images#architectures-other-than-amd64 +# from: https://docs.docker.com/desktop/multi-arch/ +# one must also take any "normalization" into account, e.g. arm64v8 -> arm64, see: +# https://github.com/containerd/containerd/blob/v1.4.3/platforms/database.go#L83 +# see also: +# https://stackoverflow.com/a/70889505 +# shortname: used by us to tag the architecture specific "manifest" image. +# crosstarget: (optional) used to download the correct cross-compiled binary that was produced earlier by the +# 'cross' job above. +# mode: (optional) set to 'copy' for cross-compiled targets. +# cargo_args: (optional) can be used when testing, e.g. set to '--no-default-features' to speed up the Krill +# build. +include: + - platform: 'linux/amd64' + shortname: 'amd64' + mode: 'build' + + - platform: 'linux/arm/v6' + shortname: 'armv6' + crosstarget: 'arm-unknown-linux-musleabihf' + mode: 'copy' + + - platform: 'linux/arm/v7' + shortname: 'armv7' + crosstarget: 'armv7-unknown-linux-musleabihf' + mode: 'copy' + + - platform: 'linux/arm64' + shortname: 'arm64' + crosstarget: 'aarch64-unknown-linux-musl' + mode: 'copy' \ No newline at end of file diff --git a/pkg/rules/packages-to-build.yml b/pkg/rules/packages-to-build.yml new file mode 100644 index 0000000..053b5fa --- /dev/null +++ b/pkg/rules/packages-to-build.yml @@ -0,0 +1,32 @@ +# This matrix definition is used as both the package_build_rules and the package_test_rules Ploutos packaging +# workflow inputs. +--- +pkg: + - 'dnst' +image: + - "ubuntu:focal" # ubuntu/20.04 + - "ubuntu:jammy" # ubuntu/22.04 + - "debian:buster" # debian/10 + - "debian:bullseye" # debian/11 + - "debian:bookworm" # debian/12 + - 'rockylinux:8' # compatible with EOL centos:8 + - 'rockylinux:9' +target: + - 'x86_64' +include: + # package for the Raspberry Pi 4b as an ARMv7 cross compiled variant of the Debian Bullseye upon which + # Raspbian 11 is based. + - pkg: 'dnst' + image: 'debian:bullseye' + target: 'armv7-unknown-linux-musleabihf' + + # package for the Raspberry Pi 1b as an ARMv6 cross compiled variant of the Debian Buster upon which + # Raspbian 10 is based. + - pkg: 'dnst' + image: 'debian:buster' + target: 'arm-unknown-linux-musleabihf' + + # package for the ROCK64 as an AARCH64 cross compiled variant of Debian Buster upon which Armbian 21 is based. + - pkg: 'dnst' + image: 'debian:buster' + target: 'aarch64-unknown-linux-musl' diff --git a/pkg/rules/packages-to-test.yml b/pkg/rules/packages-to-test.yml new file mode 100644 index 0000000..1441b68 --- /dev/null +++ b/pkg/rules/packages-to-test.yml @@ -0,0 +1,60 @@ +# This matrix definition is used as both the package_build_rules and the package_test_rules Ploutos packaging +# workflow inputs. +--- +pkg: + - 'dnst' +image: + - "ubuntu:focal" # ubuntu/20.04 + - "ubuntu:jammy" # ubuntu/22.04 + - "debian:buster" # debian/10 + - "debian:bullseye" # debian/11 + - "debian:bookworm" # debian/12 +published_pkg: + - 'ldnsutils' # correct for Ubuntu/Debian +target: + - 'x86_64' +test-image: + # Set 'test-image' to the empty string for all matrix permutations so that the default ('image') will be used + # to launch an LXC container to test the created packages in. Why explicitly set what is already the default? + # If this isn't present, later entries in the include set below will overwrite earlier entries that differ + # only by their 'test-image' value. If however 'test-image' is present in the original matrix by defining it + # here, then 'included' entries will no longer overwrite each other because they alter a key that is present + # in the original matrix. This is just how GitHub Actions matrix include rules work. + - "" +test-mode: + - 'fresh-install' + - 'upgrade-from-published' +include: + - pkg: 'dnst' + image: 'rockylinux:8' + target: 'x86_64' + test-mode: 'fresh-install' + + - pkg: 'dnst' + image: 'rockylinux:8' + target: 'x86_64' + test-mode: 'upgrade-from-published' + published_pkg: 'ldns-utils' + rpm_yum_extra_args: --enablerepo powertools + + - pkg: 'dnst' + image: 'rockylinux:9' + target: 'x86_64' + test-mode: 'fresh-install' + + - pkg: 'dnst' + image: 'rockylinux:9' + target: 'x86_64' + test-mode: 'upgrade-from-published' + published_pkg: 'ldns-utils' + rpm_yum_extra_args: --enablerepo crb + +# Disable upgrade testing on Rocky Linux 9 and Debian Bookworm as we haven't published any packages for +# those O/S versions yet. +#test-exclude: +# - pkg: 'routinator' +# image: 'rockylinux:9' +# mode: 'upgrade-from-published' +# - pkg: 'routinator' +# image: 'debian:bookworm' +# mode: 'upgrade-from-published' \ No newline at end of file diff --git a/pkg/test-scripts/test-dnst.sh b/pkg/test-scripts/test-dnst.sh new file mode 100644 index 0000000..2738a57 --- /dev/null +++ b/pkg/test-scripts/test-dnst.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -eo pipefail +set -x + +case $1 in + post-install) + # Run some sanity checks + dnst --version + ldns-keygen -v + dnst nsec3-hash nlnetlabs.nl + ldns-nsec3-hash nlnetlabs.nl + man dnst + man dnst-keygen + man ldns-keygen + ;; + + post-upgrade) + # Nothing to do. + # Run some sanity checks + dnst --version + ldns-keygen -v + dnst nsec3-hash nlnetlabs.nl + ldns-nsec3-hash nlnetlabs.nl + man dnst + man dnst-keygen + man ldns-keygen + ;; +esac \ No newline at end of file diff --git a/src/commands/nsec3hash.rs b/src/commands/nsec3hash.rs index 5122101..535c59d 100644 --- a/src/commands/nsec3hash.rs +++ b/src/commands/nsec3hash.rs @@ -158,7 +158,6 @@ impl Nsec3Hash { .map_err(|err| format!("Error creating NSEC3 hash: {err}"))? .to_string() .to_lowercase(); - writeln!(env.stdout(), "{}.", hash); Ok(()) }