From 408d0baca080d1b201cd33e616dc4abd160ef6c0 Mon Sep 17 00:00:00 2001 From: Benjamin Fry Date: Fri, 13 Oct 2023 21:39:28 -0400 Subject: [PATCH] Prepare 0.24 release with branding change to Hickory DNS (#2054) * update all READMEs with notices about the name change * update changelog for 0.24 * bump crate versions to 0.24 * update version notice information * update readmes to back reference trust-dns * rename all crates to hickory counterparts * replace all Trust-DNS references in code and comments with Hickory DNS * rename all Trust-DNS references to Hickory DNS in non-code * rename all trust-dns-resolver references to hickory-resolver * rename all trust-dns-client references to hickory-client * rename all trust-dns-proto references to hickory-proto * rename all trust-dns-server references to hickory-server * rename all trust-dns-compatibility references to hickory-compatability * rename all trust-dns-integration references to hickory-integration * rename all trust-dns-util references to hickory-util * Update MIT licenses to reference Hickory DNS * update all trust-dns references to hickory-dns * update all bluejekyll github references to hickorydns org * Update name in Changelog * make sure hickory-dns logs during tests * add changelogs for recent main additions * fix references to trust-dns and hickory in architecture * update a few trust-dns references in READMEs * fixup some dangling trust_dns references * replace fka with formerly in change log * replace all hickoydns org references to hickory-dns * replace all http links with https * update logos * update hickorydns to hickory-dns for all other org references * fix Notices of Trust-DNS to Hickory in each Readme --- .github/workflows/test.yml | 2 +- ARCHITECTURE.md | 29 +- CHANGELOG.md | 39 +- CONTRIBUTING.md | 12 +- Cargo.lock | 448 +++++++++--------- Cargo.toml | 20 +- LICENSE-APACHE | 4 +- LICENSE-MIT | 2 +- README.md | 82 ++-- bin/Cargo.toml | 112 +++-- bin/LICENSE-APACHE | 4 +- bin/LICENSE-MIT | 2 +- bin/README.md | 14 +- bin/benches/bind_conf/example.conf | 4 +- bin/benches/comparison_benches.rs | 36 +- bin/src/hickory-dns.ascii | 42 ++ bin/src/{trust-dns.rs => hickory-dns.rs} | 64 +-- bin/tests/named_https_tests.rs | 12 +- bin/tests/named_openssl_tests.rs | 14 +- bin/tests/named_quic_tests.rs | 10 +- bin/tests/named_rustls_tests.rs | 14 +- bin/tests/named_test_rsa_dnssec.rs | 21 +- bin/tests/named_tests.rs | 48 +- bin/tests/server_harness/mod.rs | 23 +- .../server_harness/mut_message_client.rs | 8 +- copyright.txt | 4 +- crates/async-std-resolver/Cargo.toml | 32 +- crates/async-std-resolver/LICENSE-APACHE | 4 +- crates/async-std-resolver/LICENSE-MIT | 2 +- crates/async-std-resolver/README.md | 8 +- crates/async-std-resolver/src/lib.rs | 20 +- crates/async-std-resolver/src/net.rs | 8 +- crates/async-std-resolver/src/runtime.rs | 14 +- crates/async-std-resolver/src/tests.rs | 4 +- crates/async-std-resolver/src/time.rs | 6 +- crates/client/Cargo.toml | 73 ++- crates/client/LICENSE-APACHE | 4 +- crates/client/LICENSE-MIT | 2 +- crates/client/README.md | 36 +- crates/client/benches/lower_name_benches.rs | 6 +- crates/client/src/client/async_client.rs | 4 +- .../client/src/client/async_secure_client.rs | 4 +- crates/client/src/client/client.rs | 10 +- crates/client/src/client/client_connection.rs | 2 +- .../src/client/memoize_client_handle.rs | 10 +- crates/client/src/client/mod.rs | 2 +- crates/client/src/client/rc_stream.rs | 4 +- crates/client/src/error/client_error.rs | 8 +- crates/client/src/error/mod.rs | 4 +- crates/client/src/h2_client_connection.rs | 10 +- crates/client/src/lib.rs | 68 +-- .../src/multicast/mdns_client_connection.rs | 6 +- crates/client/src/multicast/mod.rs | 4 +- crates/client/src/op/mod.rs | 4 +- crates/client/src/rr/mod.rs | 4 +- crates/client/src/serialize/binary/mod.rs | 4 +- crates/client/src/serialize/mod.rs | 2 +- crates/client/src/tcp/mod.rs | 2 +- .../client/src/tcp/tcp_client_connection.rs | 6 +- crates/client/src/tests.rs | 4 +- crates/client/src/udp/mod.rs | 2 +- .../client/src/udp/udp_client_connection.rs | 6 +- crates/proto/Cargo.toml | 59 ++- crates/proto/LICENSE-APACHE | 4 +- crates/proto/LICENSE-MIT | 2 +- crates/proto/README.md | 6 +- crates/proto/benches/lib.rs | 6 +- crates/proto/benches/name_benches.rs | 2 +- crates/proto/src/error.rs | 6 +- crates/proto/src/h2/h2_client_stream.rs | 4 +- crates/proto/src/h2/h2_server.rs | 4 +- crates/proto/src/h2/mod.rs | 4 +- crates/proto/src/h3/h3_client_stream.rs | 4 +- crates/proto/src/h3/h3_server.rs | 4 +- crates/proto/src/h3/mod.rs | 4 +- crates/proto/src/http/error.rs | 4 +- crates/proto/src/http/mod.rs | 4 +- crates/proto/src/http/request.rs | 4 +- crates/proto/src/http/response.rs | 4 +- crates/proto/src/lib.rs | 6 +- .../proto/src/multicast/mdns_client_stream.rs | 4 +- crates/proto/src/multicast/mdns_stream.rs | 4 +- crates/proto/src/multicast/mod.rs | 4 +- crates/proto/src/native_tls/mod.rs | 4 +- crates/proto/src/native_tls/tests.rs | 4 +- .../proto/src/native_tls/tls_client_stream.rs | 4 +- crates/proto/src/native_tls/tls_stream.rs | 4 +- crates/proto/src/op/edns.rs | 4 +- crates/proto/src/op/header.rs | 4 +- crates/proto/src/op/lower_query.rs | 4 +- crates/proto/src/op/message.rs | 6 +- crates/proto/src/op/mod.rs | 2 +- crates/proto/src/op/op_code.rs | 8 +- crates/proto/src/op/query.rs | 2 +- crates/proto/src/op/response_code.rs | 6 +- crates/proto/src/op/update_message.rs | 4 +- crates/proto/src/openssl/mod.rs | 4 +- crates/proto/src/openssl/tls_client_stream.rs | 4 +- crates/proto/src/openssl/tls_server.rs | 4 +- crates/proto/src/openssl/tls_stream.rs | 4 +- crates/proto/src/quic/mod.rs | 4 +- crates/proto/src/quic/quic_client_stream.rs | 4 +- crates/proto/src/quic/quic_config.rs | 4 +- crates/proto/src/quic/quic_server.rs | 4 +- crates/proto/src/quic/quic_socket.rs | 4 +- crates/proto/src/quic/quic_stream.rs | 4 +- crates/proto/src/quic/tests.rs | 4 +- crates/proto/src/rr/dns_class.rs | 14 +- crates/proto/src/rr/dnssec/algorithm.rs | 10 +- crates/proto/src/rr/dnssec/digest_type.rs | 6 +- crates/proto/src/rr/dnssec/ec_public_key.rs | 4 +- crates/proto/src/rr/dnssec/keypair.rs | 6 +- crates/proto/src/rr/dnssec/mod.rs | 2 +- crates/proto/src/rr/dnssec/nsec3.rs | 8 +- crates/proto/src/rr/dnssec/public_key.rs | 4 +- crates/proto/src/rr/dnssec/rdata/cdnskey.rs | 4 +- crates/proto/src/rr/dnssec/rdata/cds.rs | 4 +- crates/proto/src/rr/dnssec/rdata/dnskey.rs | 6 +- crates/proto/src/rr/dnssec/rdata/ds.rs | 4 +- crates/proto/src/rr/dnssec/rdata/key.rs | 6 +- crates/proto/src/rr/dnssec/rdata/mod.rs | 4 +- crates/proto/src/rr/dnssec/rdata/nsec.rs | 4 +- crates/proto/src/rr/dnssec/rdata/nsec3.rs | 4 +- .../proto/src/rr/dnssec/rdata/nsec3param.rs | 4 +- crates/proto/src/rr/dnssec/rdata/rrsig.rs | 4 +- crates/proto/src/rr/dnssec/rdata/sig.rs | 4 +- crates/proto/src/rr/dnssec/rdata/tsig.rs | 10 +- crates/proto/src/rr/dnssec/roots/README.md | 4 +- crates/proto/src/rr/dnssec/rsa_public_key.rs | 4 +- crates/proto/src/rr/dnssec/signer.rs | 6 +- .../src/rr/dnssec/supported_algorithm.rs | 2 +- crates/proto/src/rr/dnssec/tbs.rs | 4 +- crates/proto/src/rr/dnssec/trust_anchor.rs | 2 +- crates/proto/src/rr/dnssec/tsig.rs | 6 +- crates/proto/src/rr/dnssec/verifier.rs | 4 +- crates/proto/src/rr/domain/label.rs | 4 +- crates/proto/src/rr/domain/mod.rs | 4 +- crates/proto/src/rr/domain/name.rs | 44 +- crates/proto/src/rr/domain/try_parse_ip.rs | 4 +- crates/proto/src/rr/domain/usage.rs | 4 +- crates/proto/src/rr/lower_name.rs | 14 +- crates/proto/src/rr/mod.rs | 4 +- crates/proto/src/rr/rdata/a.rs | 4 +- crates/proto/src/rr/rdata/aaaa.rs | 4 +- crates/proto/src/rr/rdata/caa.rs | 22 +- crates/proto/src/rr/rdata/csync.rs | 4 +- crates/proto/src/rr/rdata/hinfo.rs | 4 +- crates/proto/src/rr/rdata/https.rs | 4 +- crates/proto/src/rr/rdata/mod.rs | 4 +- crates/proto/src/rr/rdata/mx.rs | 4 +- crates/proto/src/rr/rdata/name.rs | 4 +- crates/proto/src/rr/rdata/naptr.rs | 4 +- crates/proto/src/rr/rdata/null.rs | 4 +- crates/proto/src/rr/rdata/openpgpkey.rs | 4 +- crates/proto/src/rr/rdata/opt.rs | 8 +- crates/proto/src/rr/rdata/soa.rs | 4 +- crates/proto/src/rr/rdata/srv.rs | 4 +- crates/proto/src/rr/rdata/sshfp.rs | 4 +- crates/proto/src/rr/rdata/svcb.rs | 8 +- crates/proto/src/rr/rdata/tlsa.rs | 4 +- crates/proto/src/rr/rdata/txt.rs | 6 +- crates/proto/src/rr/record_data.rs | 6 +- crates/proto/src/rr/record_type.rs | 16 +- crates/proto/src/rr/resource.rs | 4 +- crates/proto/src/rr/rr_key.rs | 4 +- crates/proto/src/rr/rr_set.rs | 4 +- crates/proto/src/rr/type_bit_map.rs | 4 +- crates/proto/src/rustls/mod.rs | 4 +- crates/proto/src/rustls/tests.rs | 4 +- crates/proto/src/rustls/tls_client_stream.rs | 4 +- crates/proto/src/rustls/tls_server.rs | 4 +- crates/proto/src/rustls/tls_stream.rs | 4 +- .../proto/src/serialize/binary/bin_tests.rs | 2 +- crates/proto/src/serialize/binary/decoder.rs | 4 +- crates/proto/src/serialize/binary/encoder.rs | 8 +- crates/proto/src/serialize/binary/mod.rs | 4 +- crates/proto/src/serialize/binary/restrict.rs | 6 +- crates/proto/src/serialize/mod.rs | 2 +- crates/proto/src/serialize/txt/errors.rs | 2 +- crates/proto/src/serialize/txt/mod.rs | 2 +- crates/proto/src/serialize/txt/parse_rdata.rs | 4 +- .../src/serialize/txt/rdata_parsers/a.rs | 2 +- .../src/serialize/txt/rdata_parsers/aaaa.rs | 2 +- .../src/serialize/txt/rdata_parsers/caa.rs | 2 +- .../src/serialize/txt/rdata_parsers/csync.rs | 4 +- .../src/serialize/txt/rdata_parsers/hinfo.rs | 4 +- .../src/serialize/txt/rdata_parsers/mod.rs | 2 +- .../src/serialize/txt/rdata_parsers/mx.rs | 2 +- .../src/serialize/txt/rdata_parsers/name.rs | 2 +- .../src/serialize/txt/rdata_parsers/naptr.rs | 4 +- .../src/serialize/txt/rdata_parsers/null.rs | 2 +- .../serialize/txt/rdata_parsers/openpgpkey.rs | 4 +- .../src/serialize/txt/rdata_parsers/soa.rs | 10 +- .../src/serialize/txt/rdata_parsers/srv.rs | 2 +- .../src/serialize/txt/rdata_parsers/sshfp.rs | 4 +- .../src/serialize/txt/rdata_parsers/svcb.rs | 6 +- .../src/serialize/txt/rdata_parsers/tlsa.rs | 4 +- .../src/serialize/txt/rdata_parsers/txt.rs | 2 +- crates/proto/src/serialize/txt/zone.rs | 8 +- crates/proto/src/serialize/txt/zone_lex.rs | 4 +- crates/proto/src/tcp/mod.rs | 2 +- crates/proto/src/tcp/tcp_client_stream.rs | 6 +- crates/proto/src/tcp/tcp_stream.rs | 4 +- crates/proto/src/udp/mod.rs | 2 +- crates/proto/src/udp/udp_client_stream.rs | 4 +- crates/proto/src/udp/udp_stream.rs | 4 +- crates/proto/src/xfer/dns_exchange.rs | 4 +- crates/proto/src/xfer/dns_handle.rs | 4 +- crates/proto/src/xfer/dns_multiplexer.rs | 4 +- crates/proto/src/xfer/dns_request.rs | 4 +- crates/proto/src/xfer/dns_response.rs | 6 +- crates/proto/src/xfer/dnssec_dns_handle.rs | 4 +- crates/proto/src/xfer/mod.rs | 2 +- crates/proto/src/xfer/retry_dns_handle.rs | 4 +- crates/proto/src/xfer/serial_message.rs | 4 +- .../tests/dnssec_presentation_format_tests.rs | 6 +- crates/proto/tests/openssl_tests.rs | 12 +- crates/recursor/Cargo.toml | 89 +++- crates/recursor/LICENSE-APACHE | 4 +- crates/recursor/LICENSE-MIT | 2 +- crates/recursor/README.md | 6 +- crates/recursor/src/error.rs | 10 +- crates/recursor/src/lib.rs | 12 +- crates/recursor/src/recursor.rs | 8 +- crates/recursor/src/recursor_pool.rs | 14 +- crates/resolver/Cargo.toml | 83 ++-- crates/resolver/LICENSE-APACHE | 4 +- crates/resolver/LICENSE-MIT | 2 +- crates/resolver/README.md | 20 +- crates/resolver/examples/custom_provider.rs | 10 +- crates/resolver/examples/flush_cache.rs | 10 +- crates/resolver/examples/global_resolver.rs | 10 +- .../examples/multithreaded_runtime.rs | 4 +- crates/resolver/src/async_resolver.rs | 8 +- crates/resolver/src/caching_client.rs | 7 +- crates/resolver/src/config.rs | 10 +- crates/resolver/src/dns_lru.rs | 4 +- crates/resolver/src/dns_sd.rs | 4 +- crates/resolver/src/error.rs | 6 +- crates/resolver/src/h2.rs | 4 +- crates/resolver/src/h3.rs | 6 +- crates/resolver/src/lib.rs | 50 +- crates/resolver/src/lookup.rs | 8 +- crates/resolver/src/lookup_ip.rs | 4 +- .../src/name_server/connection_provider.rs | 8 +- crates/resolver/src/name_server/mod.rs | 4 +- .../resolver/src/name_server/name_server.rs | 4 +- .../src/name_server/name_server_pool.rs | 6 +- .../src/name_server/name_server_state.rs | 4 +- .../src/name_server/name_server_stats.rs | 6 +- crates/resolver/src/quic.rs | 8 +- crates/resolver/src/resolver.rs | 6 +- crates/resolver/src/system_conf/mod.rs | 4 +- crates/resolver/src/system_conf/unix.rs | 4 +- crates/resolver/src/system_conf/windows.rs | 4 +- .../resolver/src/tls/dns_over_native_tls.rs | 4 +- crates/resolver/src/tls/dns_over_openssl.rs | 4 +- crates/resolver/src/tls/dns_over_rustls.rs | 4 +- crates/resolver/src/tls/mod.rs | 4 +- crates/resolver/tests/resolv.conf-linux | 4 +- crates/server/Cargo.toml | 107 ++++- crates/server/LICENSE-APACHE | 4 +- crates/server/LICENSE-MIT | 2 +- crates/server/README.md | 8 +- crates/server/src/authority/auth_lookup.rs | 4 +- crates/server/src/authority/authority.rs | 4 +- .../server/src/authority/authority_object.rs | 4 +- crates/server/src/authority/catalog.rs | 4 +- crates/server/src/authority/error.rs | 12 +- .../server/src/authority/message_request.rs | 4 +- .../server/src/authority/message_response.rs | 4 +- crates/server/src/authority/mod.rs | 4 +- crates/server/src/authority/zone_type.rs | 4 +- crates/server/src/config/dnssec.rs | 8 +- crates/server/src/config/mod.rs | 4 +- crates/server/src/error/config_error.rs | 4 +- crates/server/src/error/mod.rs | 4 +- crates/server/src/error/persistence_error.rs | 6 +- crates/server/src/lib.rs | 16 +- crates/server/src/server/h2_handler.rs | 6 +- crates/server/src/server/h3_handler.rs | 10 +- crates/server/src/server/mod.rs | 4 +- crates/server/src/server/protocol.rs | 4 +- crates/server/src/server/quic_handler.rs | 10 +- crates/server/src/server/request_handler.rs | 4 +- crates/server/src/server/response_handler.rs | 8 +- crates/server/src/server/server_future.rs | 8 +- crates/server/src/store/config.rs | 12 +- crates/server/src/store/file/authority.rs | 4 +- crates/server/src/store/file/config.rs | 4 +- crates/server/src/store/file/mod.rs | 4 +- .../server/src/store/forwarder/authority.rs | 8 +- crates/server/src/store/forwarder/config.rs | 4 +- crates/server/src/store/forwarder/mod.rs | 6 +- .../server/src/store/in_memory/authority.rs | 6 +- crates/server/src/store/in_memory/mod.rs | 4 +- crates/server/src/store/mod.rs | 4 +- crates/server/src/store/recursor/authority.rs | 6 +- crates/server/src/store/recursor/config.rs | 4 +- crates/server/src/store/recursor/mod.rs | 6 +- crates/server/src/store/sqlite/authority.rs | 4 +- crates/server/src/store/sqlite/config.rs | 4 +- crates/server/src/store/sqlite/mod.rs | 4 +- crates/server/src/store/sqlite/persistence.rs | 4 +- .../server/tests/authority_battery/basic.rs | 13 +- .../server/tests/authority_battery/dnssec.rs | 13 +- .../tests/authority_battery/dynamic_update.rs | 8 +- crates/server/tests/config_tests.rs | 12 +- crates/server/tests/forwarder.rs | 8 +- crates/server/tests/in_memory.rs | 4 +- crates/server/tests/sqlite_tests.rs | 6 +- crates/server/tests/store_file_tests.rs | 6 +- crates/server/tests/store_sqlite_tests.rs | 4 +- crates/server/tests/timeout_stream_tests.rs | 2 +- crates/server/tests/txt_tests.rs | 10 +- fuzz/Cargo.toml | 4 +- fuzz/fuzz_targets/message.rs | 4 +- justfile | 24 +- logo.png | Bin 0 -> 139322 bytes logo.svg | 88 ---- scripts/docker_ftest.sh | 8 +- scripts/gen_certs.sh | 8 +- scripts/install_openssl_deb.sh | 4 +- scripts/root_key.sh | 4 +- tests/compatibility-tests/Cargo.toml | 16 +- tests/compatibility-tests/src/bind.rs | 6 +- tests/compatibility-tests/src/lib.rs | 4 +- .../tests/conf/bind-example.com.zone | 6 +- .../tests/conf/bind-example.conf | 4 +- .../tests/conf/bind-example.net.zone | 4 +- tests/compatibility-tests/tests/sig0_tests.rs | 26 +- tests/compatibility-tests/tests/tsig_tests.rs | 26 +- .../tests/zone_transfer.rs | 14 +- tests/integration-tests/Cargo.toml | 94 ++-- .../src/example_authority.rs | 12 +- tests/integration-tests/src/lib.rs | 6 +- tests/integration-tests/src/mock_client.rs | 30 +- .../src/tls_client_connection.rs | 20 +- .../integration-tests/tests/catalog_tests.rs | 6 +- .../tests/client_future_tests.rs | 64 +-- tests/integration-tests/tests/client_tests.rs | 36 +- .../tests/dnssec_client_handle_tests.rs | 38 +- tests/integration-tests/tests/lookup_tests.rs | 16 +- tests/integration-tests/tests/mdns_tests.rs | 18 +- .../tests/name_server_pool_tests.rs | 18 +- .../tests/retry_dns_handle_tests.rs | 4 +- .../tests/server_future_tests.rs | 32 +- .../tests/sqlite_authority_tests.rs | 32 +- .../tests/truncation_tests.rs | 20 +- tests/test-data/test_configs/default/0.zone | 6 +- .../test_configs/default/127.0.0.1.zone | 6 +- tests/test-data/test_configs/default/255.zone | 6 +- .../test_configs/default/implicitclass.zone | 4 +- .../test_configs/default/ipv6_1.zone | 6 +- .../test_configs/default/localhost.zone | 6 +- .../test_configs/default/nonewline.zone | 4 +- .../test_configs/dnssec/example.com.zone | 4 +- tests/test-data/test_configs/example.com.zone | 4 +- tests/test-data/test_configs/example.toml | 8 +- tests/test-data/test_configs/sec/gen-keys.sh | 2 +- util/Cargo.toml | 92 +++- util/README.md | 20 +- util/src/bin/dns.rs | 24 +- util/src/bin/dnskey-to-pem.rs | 10 +- util/src/bin/get-root-ksks.rs | 16 +- util/src/bin/pem-to-public-dnskey.rs | 12 +- util/src/bin/recurse.rs | 16 +- util/src/bin/resolve.rs | 22 +- util/src/lib.rs | 16 +- 369 files changed, 2247 insertions(+), 1911 deletions(-) create mode 100644 bin/src/hickory-dns.ascii rename bin/src/{trust-dns.rs => hickory-dns.rs} (93%) create mode 100644 logo.png delete mode 100644 logo.svg diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 569c525030..ffa3dd8acd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -67,7 +67,7 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} verbose: true - #files: target/llvm-cov-target/trust-dns-coverage.json + #files: target/llvm-cov-target/hickory-dns-coverage.json ## Work through all of the variations of the different features, only on linux to save concurrent resources exhaustive-features-matrix: diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index d476102643..c2f3f04088 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -1,6 +1,6 @@ -# Architecture of Trust-DNS +# Architecture of Hickory DNS -The Trust-DNS libraries are built from the ground up to be asynchronous. This project grew from first using non-blocking IO interfaces (before Futures 0.1 or async/await had landed in Rust). There are some artifacts of this history sporadically left around the project. Please feel free to submit PRs that clean up areas that still have hand-written Futures based state-machines. Additionally, much of the project was written by @bluejekyll while he learned the Rust language–this means that there may be patterns or missing common implementations in places where he didn't know better. Feel free to clean that up if you feel open to submitting a PR. +The Hickory DNS libraries are built from the ground up to be asynchronous. This project grew from first using non-blocking IO interfaces (before Futures 0.1 or async/await had landed in Rust). There are some artifacts of this history sporadically left around the project. Please feel free to submit PRs that clean up areas that still have hand-written Futures based state-machines. Additionally, much of the project was written by @bluejekyll while he learned the Rust language–this means that there may be patterns or missing common implementations in places where he didn't know better. Feel free to clean that up if you feel open to submitting a PR. ## Layout @@ -8,27 +8,28 @@ Most of the project is in the form of crates. The crates are all individually pu The project has these high-level crates (to be used as dependencies in other projects): -- **[trust-dns-resolver](crates/resolver)** - implements a stub-resolver with support for CNAME chasing and other things, abstract over runtimes (Tokio supported by default) -- **[async-std-resolver](crates/async-std-resolver)** - an abstraction of trust-dns-resolver using the async-std runtime -- **[trust-dns-client](crates/client)** - a bare-bones client crate, most useful for dynamic DNS updates -- **[trust-dns-server](crates/server)** - implements support for hosted Authorities of various types -- **tokio-resolver** - (under consideration, currently Tokio support is directly in trust-dns-resolver) +- **[hickory-resolver](crates/resolver)** - implements a stub-resolver with support for CNAME chasing and other things, abstract over runtimes (Tokio supported by default) +- **[async-std-resolver](crates/async-std-resolver)** - an abstraction of hickory-resolver using the async-std runtime +- **[hickory-client](crates/client)** - a bare-bones client crate, most useful for dynamic DNS updates +- **[hickory-server](crates/server)** - implements support for hosted Authorities of various types +- **tokio-resolver** - (under consideration, currently Tokio support is directly in hickory-resolver) Low-level crates supporting the above high-level crates: -- **[trust-dns-proto](crates/proto)** - the lowest level crate, implements the basics of DNS +- **[hickory-proto](crates/proto)** - the lowest level crate, implements the basics of DNS Binaries: -- **[trust-dns](bin/)** - server binary, `trust-dns`, for hosting authorities, zones, and/or setting up a forwarder -- **[trust-dns-util](util/)** - helpful utilities, e.g. `resolve` for a CLI resolver, as well as some DNSSEC utilities +- **[hickory-dns](bin/)** - server binary, `hickory-dns`, for hosting authorities, zones, and/or setting up a forwarder +- **[hickory-util](util/)** - helpful utilities, e.g. `resolve` for a CLI resolver, as well as some DNSSEC utilities Old and Outdated crates: -- **[trust-dns-rustls](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/rustls)** - removed in favor of feature in trust-dns-prot0, crate efs in [v0.21.0](https://github.com/bluejekyll/trust-dns/tree/v0.21.0) -- **[trust-dns-openssl](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/openssl)** - removed in favor of feature in trust-dns-prot0, crate efs in [v0.21.0](https://github.com/bluejekyll/trust-dns/tree/v0.21.0) -- **[trust-dns-native-tls](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/native-tls)** - removed in favor of feature in trust-dns-prot0, crate efs in [v0.21.0](https://github.com/bluejekyll/trust-dns/tree/v0.21.0) -- **[trust-dns-https](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/https)** - removed in favor of feature in trust-dns-prot0, crate efs in [v0.21.0](https://github.com/bluejekyll/trust-dns/tree/v0.21.0) +- **[trust-dns-*](https://github.com/bluejekyll/trust-dns/tree/v0.23.1/)** - removed in favor of features in hickory-proto, crate in [v0.24.0](https://github.com/hickory-dns/hickory-dns/tree/v0.24.0) +- **[trust-dns-rustls](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/rustls)** - removed in favor of features in hickory-proto, crate in [v0.21.0](https://github.com/hickory-dns/hickory-dns/tree/v0.21.0) +- **[trust-dns-openssl](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/openssl)** - removed in favor of features in hickory-proto, crate in [v0.21.0](https://github.com/hickory-dns/trust-dns/tree/v0.21.0) +- **[trust-dns-native-tls](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/native-tls)** - removed in favor of features in hickory-proto, crate in [v0.21.0](https://github.com/hickory-dns/trust-dns/tree/v0.21.0) +- **[trust-dns-https](https://github.com/bluejekyll/trust-dns/tree/v0.21.0/crates/https)** - removed in favor of features in hickory-proto, crate in [v0.21.0](https://github.com/hickory-dns/trust-dns/tree/v0.21.0) ## TBD diff --git a/CHANGELOG.md b/CHANGELOG.md index 95da3941d9..6e32289e0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,46 @@ -# Change Log: Trust-DNS +# Change Log: Hickory DNS (formerly, Trust-DNS) All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). All notes should be prepended with the location of the change, e.g. `(proto)` or `(resolver)`. -## 0.23.1 +## 0.24.0 + +**NOTICE** This project has been rebranded to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, from 0.24.0 onward. + +### Changed + +- (proto) Make DnsHandle::send &self instead of &mut self #2018 by ibigbug +- (all) Update dependencies (avoid vulnerability), optional TOML, remove unused dependencies #2028 by djc +- (server) Privatize the Lexer API #2040 by djc +- (server) Use consistent error type for read_system_conf() #2047 by djc +- (server) Optimized shutdown_gracefully() #2041 by caobug + +### Added + +- (server) add register with rustls server config #2004 by yaotthaha +- (all) Add webpki-roots and native-certs crate features #2005 by daxpedda +- (bin) add run-example target to justfile to simply start trust-dns for manual testing #2020 by bluejekyll +- (all) DoH3 support #1987 by daxpedda + +### Fixed + +- (bin) Add root certificates to the binary crate #2059 by daxpedda +- (proto) proto/rr: do not deserialize ClientSubnets with invalid prefixes #2057 by 00xc +- (resolver) Fix the resolver version warning in the workspace #2013 by bluejekyll +- (proto) Forward serde-config feature to the proto crate #2019 by cetanu +- (server) Prevent task reaping from blocking #2023 by lpraneis +- (proto) Dont panic on nsec without dnssec #2025 by bluejekyll +- (server) Spawn H2 Data frame processing into a separate task #2033 by yaroslavros +- (proto) DoQ default configuration #2036 by daxpedda +- (resolver) caching bug when CNAME leads to negative response #2053 by Clendenin + +### Removed + +- (resolver) Remove Copy from ResolverOpts #2029 by daxpedda + +## 0.23.1, NOTE: Before this point the project was formerly known as Trust-DNS ### Changed diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b8edc9594d..eddd4071fa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to Trust-DNS +# Contributing to Hickory DNS Before contributing, please consider the terms of the licenses (Apache License 2.0 or MIT). We chose these licenses for two reasons: @@ -9,7 +9,7 @@ After ensuring the license options are compatible with the aims of the contribut ## Understanding the design -Please read the [Architecture](ARCHITECTURE.md) to understand the general design and layout of the Trust-DNS projects. +Please read the [Architecture](ARCHITECTURE.md) to understand the general design and layout of the Hickory DNS projects. ## Submitting PRs @@ -23,7 +23,7 @@ All PRs *must* be passing all tests. Ideally any PR submitted should have more t ## Releases -Trust-DNS tries to follow semver versioning semantics. Major versions will not break APIs in a current major revision. If changes are being made to the current `main` branch, double check the current status of the Major release. Until `1.x.x`, all `0.x.x` minor releases are treated as major releases with breaking changes allowed. Releases are performed on an ad-hoc/on-demand basis. +Hickory DNS tries to follow semver versioning semantics. Major versions will not break APIs in a current major revision. If changes are being made to the current `main` branch, double check the current status of the Major release. Until `1.x.x`, all `0.x.x` minor releases are treated as major releases with breaking changes allowed. Releases are performed on an ad-hoc/on-demand basis. *Maintainers*: If changes are needed to previous releases, then there should exist a `release/x.x`. If this does not exist, then go to the previous most recent tag (release) and create a new branch at that tag `release/x.x`, for example the branch `release/0.19`: @@ -43,10 +43,10 @@ Releases are somewhat automated. The github action, `publish`, watches for any t 1. Create a new branch like `git checkout -b prepare-0.20.1` 1. Update all Cargo.toml files to the new version, `version = 0.20.1` 1. Update dependencies, `cargo update` -1. Update all inter-dependent crates, i.e. trust-dns-resolver to use `trust-dns-proto = 0.20.1` +1. Update all inter-dependent crates, i.e. hickory-resolver to use `hickory-proto = 0.20.1` 1. Update [CHANGELOG.md](CHANGELOG.md) to include all PR's (of consequence) since the previous release 1. Push to Github, create a PR and merge in `main` or the target release branch. -1. Go to [Releases](https://github.com/bluejekyll/trust-dns/releases) and `Draft a new release` +1. Go to [Releases](https://github.com/hickory-dns/hickory-dns/releases) and `Draft a new release` 1. Give it a `Tag Version` of `vX.x.x`, e.g. `v0.20.1`, *make sure this is tagging the correct branch, e.g. `main` or `release/0.19`* 1. Give it a `Release Title` of something key to the release 1. Copy and pase the part of the CHANGELOG.md for this release into `Describe this release` @@ -78,4 +78,4 @@ Yes! There is no formal process, and generally it's a goal to open up to anyone ## Thank you! -Seriously, thank you for contributing to this project. Trust-DNS would not be where it is today without the support of contributors like you. +Seriously, thank you for contributing to this project. Hickory DNS would not be where it is today without the support of contributors like you. diff --git a/Cargo.lock b/Cargo.lock index 2fb65a4dc7..90d444e836 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -230,15 +230,15 @@ dependencies = [ [[package]] name = "async-std-resolver" -version = "0.23.1" +version = "0.24.0" dependencies = [ "async-std", "async-trait", "futures-io", "futures-util", + "hickory-resolver", "pin-utils", "socket2 0.5.4", - "trust-dns-resolver", ] [[package]] @@ -789,6 +789,228 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +[[package]] +name = "hickory-client" +version = "0.24.0" +dependencies = [ + "cfg-if", + "data-encoding", + "futures", + "futures-channel", + "futures-util", + "hickory-proto", + "once_cell", + "openssl", + "radix_trie", + "rand", + "rustls", + "serde", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "hickory-compatibility" +version = "0.24.0" +dependencies = [ + "data-encoding", + "futures", + "hickory-client", + "openssl", + "rand", + "time", +] + +[[package]] +name = "hickory-dns" +version = "0.24.0" +dependencies = [ + "clap", + "futures-util", + "hickory-client", + "hickory-proto", + "hickory-resolver", + "hickory-server", + "native-tls", + "regex", + "rustls", + "time", + "tokio", + "tracing", + "tracing-subscriber", + "webpki-roots", +] + +[[package]] +name = "hickory-integration" +version = "0.24.0" +dependencies = [ + "async-trait", + "futures", + "hickory-client", + "hickory-proto", + "hickory-resolver", + "hickory-server", + "once_cell", + "openssl", + "rand", + "rusqlite", + "rustls", + "time", + "tokio", + "tracing", + "tracing-subscriber", + "webpki-roots", +] + +[[package]] +name = "hickory-proto" +version = "0.24.0" +dependencies = [ + "async-trait", + "backtrace", + "bytes", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-executor", + "futures-io", + "futures-util", + "h2", + "h3", + "h3-quinn", + "http", + "idna", + "ipnet", + "js-sys", + "native-tls", + "once_cell", + "openssl", + "quinn", + "rand", + "ring", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "serde", + "socket2 0.5.4", + "thiserror", + "tinyvec", + "tokio", + "tokio-native-tls", + "tokio-openssl", + "tokio-rustls", + "tracing", + "tracing-subscriber", + "url", + "wasm-bindgen", + "webpki-roots", +] + +[[package]] +name = "hickory-recursor" +version = "0.24.0" +dependencies = [ + "async-recursion", + "async-trait", + "bytes", + "cfg-if", + "enum-as-inner", + "futures-util", + "hickory-proto", + "hickory-resolver", + "lru-cache", + "parking_lot", + "serde", + "thiserror", + "tokio", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.0" +dependencies = [ + "cfg-if", + "futures-executor", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "rustls", + "rustls-native-certs", + "serde", + "smallvec", + "thiserror", + "tokio", + "tokio-native-tls", + "tokio-openssl", + "tokio-rustls", + "tracing", + "tracing-subscriber", + "webpki-roots", +] + +[[package]] +name = "hickory-server" +version = "0.24.0" +dependencies = [ + "async-trait", + "basic-toml", + "bytes", + "cfg-if", + "enum-as-inner", + "futures-executor", + "futures-util", + "h2", + "h3", + "h3-quinn", + "hickory-proto", + "hickory-recursor", + "hickory-resolver", + "http", + "openssl", + "rusqlite", + "rustls", + "serde", + "thiserror", + "time", + "tokio", + "tokio-openssl", + "tokio-rustls", + "tokio-util", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "hickory-util" +version = "0.24.0" +dependencies = [ + "clap", + "console", + "data-encoding", + "hickory-client", + "hickory-proto", + "hickory-recursor", + "hickory-resolver", + "openssl", + "rustls", + "rustls-native-certs", + "tokio", + "tracing", + "tracing-subscriber", + "webpki-roots", +] + [[package]] name = "hostname" version = "0.3.1" @@ -1886,228 +2108,6 @@ dependencies = [ "tracing-log", ] -[[package]] -name = "trust-dns" -version = "0.23.1" -dependencies = [ - "clap", - "futures-util", - "native-tls", - "regex", - "rustls", - "time", - "tokio", - "tracing", - "tracing-subscriber", - "trust-dns-client", - "trust-dns-proto", - "trust-dns-resolver", - "trust-dns-server", - "webpki-roots", -] - -[[package]] -name = "trust-dns-client" -version = "0.23.1" -dependencies = [ - "cfg-if", - "data-encoding", - "futures", - "futures-channel", - "futures-util", - "once_cell", - "openssl", - "radix_trie", - "rand", - "rustls", - "serde", - "thiserror", - "tokio", - "tracing", - "tracing-subscriber", - "trust-dns-proto", -] - -[[package]] -name = "trust-dns-compatibility" -version = "0.23.1" -dependencies = [ - "data-encoding", - "futures", - "openssl", - "rand", - "time", - "trust-dns-client", -] - -[[package]] -name = "trust-dns-integration" -version = "0.23.1" -dependencies = [ - "async-trait", - "futures", - "once_cell", - "openssl", - "rand", - "rusqlite", - "rustls", - "time", - "tokio", - "tracing", - "tracing-subscriber", - "trust-dns-client", - "trust-dns-proto", - "trust-dns-resolver", - "trust-dns-server", - "webpki-roots", -] - -[[package]] -name = "trust-dns-proto" -version = "0.23.1" -dependencies = [ - "async-trait", - "backtrace", - "bytes", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-executor", - "futures-io", - "futures-util", - "h2", - "h3", - "h3-quinn", - "http", - "idna", - "ipnet", - "js-sys", - "native-tls", - "once_cell", - "openssl", - "quinn", - "rand", - "ring", - "rustls", - "rustls-native-certs", - "rustls-pemfile", - "serde", - "socket2 0.5.4", - "thiserror", - "tinyvec", - "tokio", - "tokio-native-tls", - "tokio-openssl", - "tokio-rustls", - "tracing", - "tracing-subscriber", - "url", - "wasm-bindgen", - "webpki-roots", -] - -[[package]] -name = "trust-dns-recursor" -version = "0.23.1" -dependencies = [ - "async-recursion", - "async-trait", - "bytes", - "cfg-if", - "enum-as-inner", - "futures-util", - "lru-cache", - "parking_lot", - "serde", - "thiserror", - "tokio", - "tracing", - "tracing-subscriber", - "trust-dns-proto", - "trust-dns-resolver", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.23.1" -dependencies = [ - "cfg-if", - "futures-executor", - "futures-util", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot", - "rand", - "resolv-conf", - "rustls", - "rustls-native-certs", - "serde", - "smallvec", - "thiserror", - "tokio", - "tokio-native-tls", - "tokio-openssl", - "tokio-rustls", - "tracing", - "tracing-subscriber", - "trust-dns-proto", - "webpki-roots", -] - -[[package]] -name = "trust-dns-server" -version = "0.23.1" -dependencies = [ - "async-trait", - "basic-toml", - "bytes", - "cfg-if", - "enum-as-inner", - "futures-executor", - "futures-util", - "h2", - "h3", - "h3-quinn", - "http", - "openssl", - "rusqlite", - "rustls", - "serde", - "thiserror", - "time", - "tokio", - "tokio-openssl", - "tokio-rustls", - "tokio-util", - "tracing", - "tracing-subscriber", - "trust-dns-proto", - "trust-dns-recursor", - "trust-dns-resolver", -] - -[[package]] -name = "trust-dns-util" -version = "0.23.1" -dependencies = [ - "clap", - "console", - "data-encoding", - "openssl", - "rustls", - "rustls-native-certs", - "tokio", - "tracing", - "tracing-subscriber", - "trust-dns-client", - "trust-dns-proto", - "trust-dns-recursor", - "trust-dns-resolver", - "webpki-roots", -] - [[package]] name = "unicode-bidi" version = "0.3.13" diff --git a/Cargo.toml b/Cargo.toml index d1df4269f7..3294659cf0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,24 +15,24 @@ members = [ exclude = ["fuzz"] [workspace.package] -version = "0.23.1" -authors = ["The contributors to Trust-DNS"] +version = "0.24.0" +authors = ["The contributors to Hickory DNS"] edition = "2021" rust-version = "1.67.0" -homepage = "https://trust-dns.org/" -repository = "https://github.com/bluejekyll/trust-dns" +homepage = "https://hickory-dns.org/" +repository = "https://github.com/hickory-dns/hickory-dns" keywords = ["DNS", "BIND", "dig", "named", "dnssec"] categories = ["network-programming"] license = "MIT OR Apache-2.0" [workspace.dependencies] -# trustdns -trust-dns-client = { version = "0.23.1", path = "crates/client", default-features = false } -trust-dns-recursor = { version = "0.23.1", path = "crates/recursor", default-features = false } -trust-dns-resolver = { version = "0.23.1", path = "crates/resolver", default-features = false } -trust-dns-server = { version = "0.23.1", path = "crates/server", default-features = false } -trust-dns-proto = { version = "0.23.1", path = "crates/proto", default-features = false } +# hickory +hickory-client = { version = "0.24.0", path = "crates/client", default-features = false } +hickory-recursor = { version = "0.24.0", path = "crates/recursor", default-features = false } +hickory-resolver = { version = "0.24.0", path = "crates/resolver", default-features = false } +hickory-server = { version = "0.24.0", path = "crates/server", default-features = false } +hickory-proto = { version = "0.24.0", path = "crates/proto", default-features = false } # logging diff --git a/LICENSE-APACHE b/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/LICENSE-APACHE +++ b/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/LICENSE-MIT b/LICENSE-MIT index b497b098ee..cc6341a36e 100644 --- a/LICENSE-MIT +++ b/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2015 The trust-dns Developers +Copyright (c) 2015 The Hickory DNS Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/README.md b/README.md index 9a9b663d3b..7e2d3a58c4 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ [![minimum rustc: 1.67](https://img.shields.io/badge/minimum%20rustc-1.67-green?logo=rust)](https://www.whatrustisit.com) -[![Build Status](https://github.com/bluejekyll/trust-dns/workflows/test/badge.svg?branch=main)](https://github.com/bluejekyll/trust-dns/actions?query=workflow%3Atest) -[![codecov](https://codecov.io/gh/bluejekyll/trust-dns/branch/main/graph/badge.svg)](https://codecov.io/gh/bluejekyll/trust-dns) +[![Build Status](https://github.com/hickory-dns/hickory-dns/workflows/test/badge.svg?branch=main)](https://github.com/hickory-dns/hickory-dns/actions?query=workflow%3Atest) +[![codecov](https://codecov.io/gh/hickory-dns/hickory-dns/branch/main/graph/badge.svg)](https://codecov.io/gh/hickory-dns/hickory-dns) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE-MIT) [![License: Apache 2.0](https://img.shields.io/badge/license-Apache_2.0-blue.svg)](LICENSE-APACHE) [![Discord](https://img.shields.io/discord/590067103822774272.svg)](https://discord.gg/89nxE4n) -![Trust-DNS](logo.svg) +![Hickory DNS](logo.png) -# Trust-DNS +# Hickory DNS A Rust based DNS client, server, and Resolver, built to be safe and secure from the ground up. @@ -16,11 +16,13 @@ This repo consists of multiple crates: | Library | Description | | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| **Trust-DNS** | [![](https://img.shields.io/crates/v/trust-dns.svg)](https://crates.io/crates/trust-dns) Binaries for running a DNS authoritative server. | -| **Proto** | [![](https://img.shields.io/crates/v/trust-dns-proto.svg)](https://crates.io/crates/trust-dns-proto) [![trust-dns-proto](https://docs.rs/trust-dns-proto/badge.svg)](https://docs.rs/trust-dns-proto) Raw DNS library, exposes an unstable API and only for use by the other Trust-DNS libraries, not intended for end-user use. | -| **Client** | [![](https://img.shields.io/crates/v/trust-dns-client.svg)](https://crates.io/crates/trust-dns-client) [![trust-dns-client](https://docs.rs/trust-dns-client/badge.svg)](https://docs.rs/trust-dns-client) Used for sending `query`, `update`, and `notify` messages directly to a DNS server. | -| **Server** | [![](https://img.shields.io/crates/v/trust-dns-server.svg)](https://crates.io/crates/trust-dns-server) [![trust-dns-server](https://docs.rs/trust-dns-server/badge.svg)](https://docs.rs/trust-dns-server) Use to host DNS records, this also has a `trust-dns` binary for running in a daemon form. | -| **Resolver** | [![](https://img.shields.io/crates/v/trust-dns-resolver.svg)](https://crates.io/crates/trust-dns-resolver) [![trust-dns-resolver](https://docs.rs/trust-dns-resolver/badge.svg)](https://docs.rs/trust-dns-resolver) Utilizes the client library to perform DNS resolution. Can be used in place of the standard OS resolution facilities. | +| **Hickory DNS** | [![](https://img.shields.io/crates/v/hickory-dns.svg)](https://crates.io/crates/hickory-dns) Binaries for running a DNS authoritative server. | +| **Proto** | [![](https://img.shields.io/crates/v/hickory-proto.svg)](https://crates.io/crates/hickory-proto) [![hickory-proto](https://docs.rs/hickory-proto/badge.svg)](https://docs.rs/hickory-proto) Raw DNS library, exposes an unstable API and only for use by the other Hickory DNS libraries, not intended for end-user use. | +| **Client** | [![](https://img.shields.io/crates/v/hickory-client.svg)](https://crates.io/crates/hickory-client) [![hickory-client](https://docs.rs/hickory-client/badge.svg)](https://docs.rs/hickory-client) Used for sending `query`, `update`, and `notify` messages directly to a DNS server. | +| **Server** | [![](https://img.shields.io/crates/v/hickory-server.svg)](https://crates.io/crates/hickory-server) [![hickory-server](https://docs.rs/hickory-server/badge.svg)](https://docs.rs/hickory-server) Use to host DNS records, this also has a `hickory-dns` binary for running in a daemon form. | +| **Resolver** | [![](https://img.shields.io/crates/v/hickory-resolver.svg)](https://crates.io/crates/hickory-resolver) [![hickory-resolver](https://docs.rs/hickory-resolver/badge.svg)](https://docs.rs/hickory-resolver) Utilizes the client library to perform DNS resolution. Can be used in place of the standard OS resolution facilities. | + +**NOTICE** This project was rebranded from Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo. # Goals @@ -36,13 +38,13 @@ This repo consists of multiple crates: ## Resolver -The Trust-DNS Resolver is a native Rust implementation for stub resolution in Rust applications. The Resolver supports many common query patterns, all of which can be configured when creating the Resolver. It is capable of using system configuration on Unix and Windows. On Windows there is a known issue that relates to a large set of interfaces being registered for use, so might require ignoring the system configuration. +The Hickory DNS Resolver is a native Rust implementation for stub resolution in Rust applications. The Resolver supports many common query patterns, all of which can be configured when creating the Resolver. It is capable of using system configuration on Unix and Windows. On Windows there is a known issue that relates to a large set of interfaces being registered for use, so might require ignoring the system configuration. The Resolver will properly follow CNAME chains as well as SRV record lookups. There is a long term plan to make the Resolver capable of fully recursive queries, but that's not currently possible. ## Client -The Trust-DNS Client is intended to be used for operating against a DNS server directly. It can be used for verifying records or updating records for servers that support SIG0 and dynamic update. The Client is also capable of validating DNSSEC. As of now NSEC3 validation is not yet supported, though NSEC is. There are two interfaces that can be used, the async/await compatible AsyncClient and a blocking Client for ease of use. Today, Tokio is required for the executor Runtime. +The Hickory DNS Client is intended to be used for operating against a DNS server directly. It can be used for verifying records or updating records for servers that support SIG0 and dynamic update. The Client is also capable of validating DNSSEC. As of now NSEC3 validation is not yet supported, though NSEC is. There are two interfaces that can be used, the async/await compatible AsyncClient and a blocking Client for ease of use. Today, Tokio is required for the executor Runtime. ### Unique client side implementations @@ -51,14 +53,14 @@ as high level interfaces, which is a bit more rare. | Feature | Description | | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | -| [SyncDnssecClient](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/struct.SyncDnssecClient.html) | DNSSEC validation | -| [create](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.create) | atomic create of a record, with authenticated request | -| [append](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.append) | verify existence of a record and append to it | -| [compare_and_swap](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.compare_and_swap) | atomic (depends on server) compare and swap | -| [delete_by_rdata](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.delete_by_rdata) | delete a specific record | -| [delete_rrset](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.delete_rrset) | delete an entire record set | -| [delete_all](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.delete_all) | delete all records sets with a given name | -| [notify](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.notify) | notify server that it should reload a zone | +| [SyncDnssecClient](https://docs.rs/hickory-client/latest/hickory_client/client/struct.SyncDnssecClient.html) | DNSSEC validation | +| [create](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.create) | atomic create of a record, with authenticated request | +| [append](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.append) | verify existence of a record and append to it | +| [compare_and_swap](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.compare_and_swap) | atomic (depends on server) compare and swap | +| [delete_by_rdata](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_by_rdata) | delete a specific record | +| [delete_rrset](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_rrset) | delete an entire record set | +| [delete_all](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_all) | delete all records sets with a given name | +| [notify](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.notify) | notify server that it should reload a zone | ## Server @@ -87,7 +89,7 @@ a restart of the server process. ### DNS-over-TLS and DNS-over-HTTPS on the Server -Support of TLS on the Server is managed through a pkcs12 der file. The documentation is captured in the example test config file, [example.toml](https://github.com/bluejekyll/trust-dns/blob/main/tests/test-data/test_configs/example.toml). A registered certificate to the server can be pinned to the Client with the `add_ca()` method. Alternatively, as the client uses the rust-native-tls library, it should work with certificate signed by any standard CA. +Support of TLS on the Server is managed through a pkcs12 der file. The documentation is captured in the example test config file, [example.toml](https://github.com/hickory-dns/hickory-dns/blob/main/tests/test-data/test_configs/example.toml). A registered certificate to the server can be pinned to the Client with the `add_ca()` method. Alternatively, as the client uses the rust-native-tls library, it should work with certificate signed by any standard CA. ## DNS-over-TLS and DNS-over-HTTPS @@ -166,10 +168,10 @@ Zones will be automatically resigned on any record updates via dynamic DNS. To e # Usage This assumes that you have [Rust](https://www.rust-lang.org) stable installed. These -presume that the trust-dns repos have already been synced to the local system: +presume that the hickory-dns repos have already been synced to the local system: - git clone https://github.com/bluejekyll/trust-dns.git - cd trust-dns + git clone https://github.com/hickory-dns/hickory-dns.git + cd hickory-dns ## Prerequisites @@ -197,7 +199,7 @@ presume that the trust-dns repos have already been synced to the local system: ## Testing -Trust-DNS uses `just` for build workflow management. While running `cargo test` at the project root will work, this is not exhaustive. Install `just` with `cargo install just`. +Hickory DNS uses `just` for build workflow management. While running `cargo test` at the project root will work, this is not exhaustive. Install `just` with `cargo install just`. - Default tests @@ -211,7 +213,7 @@ just default - Default feature tests - Trust-DNS has many features, to quickly test with them or without, there are three targets supported, `default`, `no-default-features`, `all-features`: + Hickory DNS has many features, to quickly test with them or without, there are three targets supported, `default`, `no-default-features`, `all-features`: ```shell just all-features @@ -219,7 +221,7 @@ just all-features - Individual feature tests - Trust-DNS has many features, each individual feature can be tested in dependently, see individual crates for all their features, here is a not necessarily up to date list: `dns-over-rustls`, `dns-over-https-rustls`, `dns-over-native-tls`, `dns-over-openssl`, `dns-dnssec-openssl`, `dns-dnssec-openssl`, `dns-dnssec-ring`, `mdns`. Each feature can be tested with itself as the task target for `just`: + Hickory DNS has many features, each individual feature can be tested in dependently, see individual crates for all their features, here is a not necessarily up to date list: `dns-over-rustls`, `dns-over-https-rustls`, `dns-over-native-tls`, `dns-over-openssl`, `dns-dnssec-openssl`, `dns-dnssec-openssl`, `dns-dnssec-ring`, `mdns`. Each feature can be tested with itself as the task target for `just`: ```shell just dns-over-https-rustls @@ -231,36 +233,36 @@ just dns-over-https-rustls ## Building -- Production build, from the `trust-dns` base dir, to get all features, just pass the `--all-features` flag. +- Production build, from the `hickory-dns` base dir, to get all features, just pass the `--all-features` flag. ```shell -cargo build --release -p trust-dns +cargo build --release -p hickory-dns ``` ## Running -Warning: Trust-DNS is still under development, running in production is not +Warning: Hickory DNS is still under development, running in production is not recommended. The server is currently only single-threaded, it is non-blocking so this should allow it to work with most internal loads. - Verify the version ```shell -./target/release/trust-dns --version +./target/release/hickory-dns --version ``` - Get help ```shell -./target/release/trust-dns --help +./target/release/hickory-dns --help ``` -- Launch `trust-dns` server with test config +- Launch `hickory-dns` server with test config -You may want not passing the `-p` parameter will run on default DNS ports. For the tls features, there are also port options for those, see `trust-dns --help` +You may want not passing the `-p` parameter will run on default DNS ports. For the tls features, there are also port options for those, see `hickory-dns --help` ```shell -./target/release/trust-dns -c ./tests/test-data/test_configs/example.toml -z ./tests/test-data/test_configs/ -p 24141 +./target/release/hickory-dns -c ./tests/test-data/test_configs/example.toml -z ./tests/test-data/test_configs/ -p 24141 ``` - Query the just launched server with `dig` @@ -269,15 +271,15 @@ You may want not passing the `-p` parameter will run on default DNS ports. For t dig @127.0.0.1 -p 24141 www.example.com ``` -## Using the trust-dns-resolver CLI +## Using the hickory-resolver CLI Available in `0.20` ```shell -cargo install --bin resolve trust-dns-util +cargo install --bin resolve hickory-util ``` -Or from source, in the trust-dns directory +Or from source, in the hickory-dns directory ```shell cargo install --bin resolve --path util @@ -297,7 +299,7 @@ Success for query name: www.example.com. type: A class: IN The Client has a few features which can be disabled for different reasons when embedding in other software. - `dnssec-openssl` - It is a default feature, so default-features will need to be set to false (this will disable all other default features in trust-dns). Until there are other crypto libraries supported, this will also disable DNSSEC validation. The functions will still exist, but will always return errors on validation. The below example line will disable all default features and enable OpenSSL, remove `"openssl"` to remove the dependency on OpenSSL. + It is a default feature, so default-features will need to be set to false (this will disable all other default features in hickory-dns). Until there are other crypto libraries supported, this will also disable DNSSEC validation. The functions will still exist, but will always return errors on validation. The below example line will disable all default features and enable OpenSSL, remove `"openssl"` to remove the dependency on OpenSSL. - `dnssec-ring` Ring support can be used for RSA and ED25519 DNSSEC validation. @@ -322,7 +324,7 @@ Using custom features in dependencies: ``` [dependencies] ... -trust-dns = { version = "*", default-features = false, features = ["dnssec-openssl"] } +hickory-dns = { version = "*", default-features = false, features = ["dnssec-openssl"] } ``` Using custom features during build: @@ -343,7 +345,7 @@ $> cargo build --release --features dns-over-rustls - What is the MSRV (minimum stable Rust version) policy? - Trust-DNS will work to support backward compatibility with three Rust versions. + Hickory DNS will work to support backward compatibility with three Rust versions. For example, if `1.50` is the current release, then the MSRV will be `1.47`. The version is only increased as necessary, so it's possible that the MSRV is older diff --git a/bin/Cargo.toml b/bin/Cargo.toml index f991457524..30267023f1 100644 --- a/bin/Cargo.toml +++ b/bin/Cargo.toml @@ -1,19 +1,19 @@ [package] -name = "trust-dns" +name = "hickory-dns" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS is a safe and secure DNS server with DNSSEC support. +Hickory DNS is a safe and secure DNS server with DNSSEC support. Eventually this could be a replacement for BIND9. The DNSSEC support allows for live signing of all records, in it does not currently support records signed offline. The server supports dynamic DNS with SIG0 authenticated - requests. Trust-DNS is based on the Tokio and Futures libraries, which means + requests. Hickory DNS is based on the Tokio and Futures libraries, which means it should be easily integrated into other software that also use those libraries. """ -documentation = "https://docs.rs/trust-dns-server" +documentation = "https://docs.rs/hickory-dns" readme = "README.md" version.workspace = true @@ -27,30 +27,63 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] -default = ["sqlite", "resolver", "native-certs"] -dnssec-openssl = ["dnssec", "trust-dns-client/dnssec-openssl", "trust-dns-proto/dnssec-openssl", "trust-dns-server/dnssec-openssl"] -dnssec-ring = ["dnssec", "trust-dns-client/dnssec-ring", "trust-dns-proto/dnssec-ring", "trust-dns-server/dnssec-ring"] +default = ["sqlite", "resolver", "native-certs", "ascii-art"] + +# if enabled, the hickory-dns binary will print ascii-art on start, disable to reduce the binary size +ascii-art = [] + +dnssec-openssl = [ + "dnssec", + "hickory-client/dnssec-openssl", + "hickory-proto/dnssec-openssl", + "hickory-server/dnssec-openssl", +] +dnssec-ring = [ + "dnssec", + "hickory-client/dnssec-ring", + "hickory-proto/dnssec-ring", + "hickory-server/dnssec-ring", +] dnssec = [] -recursor = ["trust-dns-server/recursor"] +recursor = ["hickory-server/recursor"] # Recursive Resolution is Experimental! -resolver = ["trust-dns-server/resolver"] -sqlite = ["trust-dns-server/sqlite"] +resolver = ["hickory-server/resolver"] +sqlite = ["hickory-server/sqlite"] # TODO: Need to figure out how to be consistent with ring/openssl usage... -# dns-over-https-openssl = ["dns-over-openssl", "trust-dns-client/dns-over-https-openssl", "dns-over-https"] -dns-over-https-rustls = ["dns-over-https", "dns-over-rustls", "trust-dns-proto/dns-over-https-rustls", "trust-dns-client/dns-over-https-rustls", "trust-dns-server/dns-over-https-rustls"] -dns-over-https = ["trust-dns-server/dns-over-https"] -dns-over-quic = ["dns-over-rustls", "trust-dns-server/dns-over-quic"] -dns-over-h3 = ["dns-over-rustls", "trust-dns-server/dns-over-h3"] +# dns-over-https-openssl = ["dns-over-openssl", "hickory-client/dns-over-https-openssl", "dns-over-https"] +dns-over-https-rustls = [ + "dns-over-https", + "dns-over-rustls", + "hickory-proto/dns-over-https-rustls", + "hickory-client/dns-over-https-rustls", + "hickory-server/dns-over-https-rustls", +] +dns-over-https = ["hickory-server/dns-over-https"] +dns-over-quic = ["dns-over-rustls", "hickory-server/dns-over-quic"] +dns-over-h3 = ["dns-over-rustls", "hickory-server/dns-over-h3"] # TODO: migrate all tls and tls-openssl features to dns-over-tls, et al -dns-over-openssl = ["dns-over-tls", "dnssec-openssl", "trust-dns-proto/dns-over-openssl", "trust-dns-client/dns-over-openssl", "trust-dns-server/dns-over-openssl"] -dns-over-rustls = ["dns-over-tls", "dnssec-ring", "rustls", "trust-dns-proto/dns-over-rustls", "trust-dns-client/dns-over-rustls", "trust-dns-server/dns-over-rustls"] +dns-over-openssl = [ + "dns-over-tls", + "dnssec-openssl", + "hickory-proto/dns-over-openssl", + "hickory-client/dns-over-openssl", + "hickory-server/dns-over-openssl", +] +dns-over-rustls = [ + "dns-over-tls", + "dnssec-ring", + "rustls", + "hickory-proto/dns-over-rustls", + "hickory-client/dns-over-rustls", + "hickory-server/dns-over-rustls", +] dns-over-tls = [] # This is a deprecated feature... @@ -58,34 +91,49 @@ tls-openssl = ["dns-over-openssl"] tls = ["dns-over-openssl"] # WARNING: there is a bug in the mutual tls auth code at the moment see issue #100 -# mtls = ["trust-dns-client/mtls"] +# mtls = ["hickory-client/mtls"] -webpki-roots = ["trust-dns-client/webpki-roots"] -native-certs = ["trust-dns-client/native-certs"] +webpki-roots = ["hickory-client/webpki-roots"] +native-certs = ["hickory-client/native-certs"] [[bin]] -name = "trust-dns" -path = "src/trust-dns.rs" +name = "hickory-dns" +path = "src/hickory-dns.rs" [dependencies] # clap features: # - suggestion for advanced help with error in cli # - derive for clap derive api # - help to generate --help -clap = { workspace = true, default-features = false, features = ["std", "cargo", "help", "derive", "suggestions"] } -futures-util = { workspace = true, default-features = false, features = ["std"] } +clap = { workspace = true, default-features = false, features = [ + "std", + "cargo", + "help", + "derive", + "suggestions", +] } +futures-util = { workspace = true, default-features = false, features = [ + "std", +] } rustls = { workspace = true, optional = true } time.workspace = true tracing.workspace = true -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } tokio = { workspace = true, features = ["time", "rt"] } -trust-dns-client.workspace = true -trust-dns-proto.workspace = true -trust-dns-server = { workspace = true, features = ["toml"] } +hickory-client.workspace = true +hickory-proto.workspace = true +hickory-server = { workspace = true, features = ["toml"] } [dev-dependencies] native-tls.workspace = true regex.workspace = true -trust-dns-proto = { workspace = true, features = ["testing", "dns-over-native-tls"] } -trust-dns-resolver.workspace = true +hickory-proto = { workspace = true, features = [ + "testing", + "dns-over-native-tls", +] } +hickory-resolver.workspace = true webpki-roots.workspace = true diff --git a/bin/LICENSE-APACHE b/bin/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/bin/LICENSE-APACHE +++ b/bin/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/bin/LICENSE-MIT b/bin/LICENSE-MIT index b497b098ee..cc6341a36e 100644 --- a/bin/LICENSE-MIT +++ b/bin/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2015 The trust-dns Developers +Copyright (c) 2015 The Hickory DNS Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/bin/README.md b/bin/README.md index 46e7893f37..76e0026700 100644 --- a/bin/README.md +++ b/bin/README.md @@ -1,22 +1,26 @@ # Overview -Trust-DNS provides a binary for hosting or forwarding DNS zones. +Hickory DNS provides a binary for hosting or forwarding DNS zones. -This a named implementation for DNS zone hosting. It is capable of performing signing all records in the zone for server DNSSEC RRSIG records associated with all records in a zone. There is also a `trust-dns` binary that can be generated from the library with `cargo install trust-dns`. Dynamic updates are supported via `SIG0` (an mTLS authentication method is under development). +This a named implementation for DNS zone hosting. It is capable of performing signing all records in the zone for server DNSSEC RRSIG records associated with all records in a zone. There is also a `hickory-dns` binary that can be generated from the library with `cargo install hickory-dns`. Dynamic updates are supported via `SIG0` (an mTLS authentication method is under development). + +**NOTICE** This project was rebranded fromt Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, this crate/binary has been moved to [hickory-dns](https://crates.io/crates/hickory-dns), from `0.24` and onward, for prior versions see [trust-dns](https://crates.io/crates/trust-dns). ## Features - Dynamic Update with sqlite journaling backend (SIG0) - DNSSEC online signing (NSEC not NSEC3) - DNS over TLS (DoT) -- DNS over HTTPS (DoH) +- DNS over HTTPS/2 (DoH) +- DNS over HTTPS/3 (DoH3) +- DNS over Quic (DoQ) - Forwarding stub resolver - ANAME resolution, for zone mapping aliass to A and AAAA records - Additionals section generation for aliasing record types ## DNS-over-TLS and DNS-over-HTTPS -Support of TLS on the Server is managed through a pkcs12 der file. The documentation is captured in the example test config file, [example.toml](https://github.com/bluejekyll/trust-dns/blob/main/tests/test-data/test_configs/example.toml). A registered certificate to the server can be pinned to the Client with the `add_ca()` method. Alternatively, as the client uses the rust-native-tls library, it should work with certificate signed by any standard CA. +Support of TLS on the Server is managed through a pkcs12 der file. The documentation is captured in the example test config file, [example.toml](https://github.com/hickory-dns/hickory-dns/blob/main/tests/test-data/test_configs/example.toml). A registered certificate to the server can be pinned to the Client with the `add_ca()` method. Alternatively, as the client uses the rust-native-tls library, it should work with certificate signed by any standard CA. DoT and DoH are supported. This is accomplished through the use of one of `native-tls`, `openssl`, or `rustls` (only `rustls` is currently supported for DoH). The Resolver requires only requires valid DoT or DoH resolvers being registered in order to be used. @@ -48,4 +52,4 @@ The current minimum rustc version for this project is `1.67` ## Versioning -Trust-DNS does it's best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does it's best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/bin/benches/bind_conf/example.conf b/bin/benches/bind_conf/example.conf index 7d6018fa8e..31baba72fd 100644 --- a/bin/benches/bind_conf/example.conf +++ b/bin/benches/bind_conf/example.conf @@ -1,6 +1,6 @@ /* - Trust-DNS bench setup: - this is meant to mimic the trust-dns-server config + Hickory DNS bench setup: + this is meant to mimic the hickory-server config which is in tests/test-data/test_configs/example.toml */ diff --git a/bin/benches/comparison_benches.rs b/bin/benches/comparison_benches.rs index da2d9c0ea7..e6197c8a65 100644 --- a/bin/benches/comparison_benches.rs +++ b/bin/benches/comparison_benches.rs @@ -20,15 +20,15 @@ use tokio::net::TcpStream; use tokio::net::UdpSocket; use tokio::runtime::Runtime; -use trust_dns_client::client::*; -use trust_dns_client::op::*; -use trust_dns_client::rr::*; -use trust_dns_client::tcp::*; -use trust_dns_client::udp::*; -use trust_dns_proto::error::*; -use trust_dns_proto::iocompat::AsyncIoTokioAsStd; -use trust_dns_proto::op::NoopMessageFinalizer; -use trust_dns_proto::xfer::*; +use hickory_client::client::*; +use hickory_client::op::*; +use hickory_client::rr::*; +use hickory_client::tcp::*; +use hickory_client::udp::*; +use hickory_proto::error::*; +use hickory_proto::iocompat::AsyncIoTokioAsStd; +use hickory_proto::op::NoopMessageFinalizer; +use hickory_proto::xfer::*; fn find_test_port() -> u16 { let server = std::net::UdpSocket::bind(("0.0.0.0", 0)).unwrap(); @@ -81,12 +81,12 @@ fn wrap_process(named: Child, server_port: u16) -> NamedProcess { /// Returns a NamedProcess (cleans the process up on drop), and a socket addr for connecting /// to the server. -fn trust_dns_process() -> (NamedProcess, u16) { +fn hickory_process() -> (NamedProcess, u16) { // find a random port to listen on let test_port = find_test_port(); let ws_root = env::var("WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned()); - let named_path = format!("{}/target/release/trust-dns", ws_root); + let named_path = format!("{}/target/release/hickory-dns", ws_root); let config_path = format!("{}/tests/test-data/test_configs/example.toml", ws_root); let zone_dir = format!("{}/tests/test-data/test_configs", ws_root); @@ -101,7 +101,7 @@ fn trust_dns_process() -> (NamedProcess, u16) { .arg(&format!("--zonedir={}", zone_dir)) .arg(&format!("--port={}", test_port)) .spawn() - .expect("failed to start trust-dns"); + .expect("failed to start hickory-dns"); // let process = wrap_process(named, test_port); @@ -143,8 +143,8 @@ where } #[bench] -fn trust_dns_udp_bench(b: &mut Bencher) { - let (named, server_port) = trust_dns_process(); +fn hickory_udp_bench(b: &mut Bencher) { + let (named, server_port) = hickory_process(); let addr: SocketAddr = ("127.0.0.1", server_port) .to_socket_addrs() @@ -160,7 +160,7 @@ fn trust_dns_udp_bench(b: &mut Bencher) { #[bench] #[ignore] -fn trust_dns_udp_bench_prof(b: &mut Bencher) { +fn hickory_udp_bench_prof(b: &mut Bencher) { let server_port = 6363; let addr: SocketAddr = ("127.0.0.1", server_port) @@ -173,8 +173,8 @@ fn trust_dns_udp_bench_prof(b: &mut Bencher) { } #[bench] -fn trust_dns_tcp_bench(b: &mut Bencher) { - let (named, server_port) = trust_dns_process(); +fn hickory_tcp_bench(b: &mut Bencher) { + let (named, server_port) = hickory_process(); let addr: SocketAddr = ("127.0.0.1", server_port) .to_socket_addrs() @@ -217,7 +217,7 @@ fn bind_process() -> (NamedProcess, u16) { .arg("../../server/benches/bind_conf/example.conf") //.arg("-d").arg("0") .arg("-D") - .arg("Trust-DNS cmp bench") + .arg("Hickory DNS cmp bench") .arg("-g") .arg("-p") .arg(&format!("{}", test_port)) diff --git a/bin/src/hickory-dns.ascii b/bin/src/hickory-dns.ascii new file mode 100644 index 0000000000..21d3e8638a --- /dev/null +++ b/bin/src/hickory-dns.ascii @@ -0,0 +1,42 @@ + ------ + --------- + +---------- + ++++++------- + ++++++++++++++ + +++++++++++++++ + +++++++++++++++ + ++++++++++++++++ + ++++++++++++++++ #### + ++++++++++++++++ ######## + ####++++++++++++ ########### + ################ ############ + ################ ############## + ################ ############## + ################ ############### + ################ ###########++++ + ################ ######++++++++++ + ################ ++++++++++++++++ + ############### ++++++++++++++++ + ############### +++++++++++++++ + ############## +++++++++----- + ############# +++++-------- + ++++++##### +---------- + +++++++++ --------- + +++++ ----- + + ## ### +### ### #### ### +### ### ### +### ### ### +### ### #### ########## ### #### ########## ####### #### #### +############### #### #### #### ### #### #### #### ### ### ### +### ### #### ### ####### #### #### ### ### ### +### ### #### ### ######## ### #### ### #### ### +### ### #### ### ### ### ### ### ### ### ####### +### ### #### ########## ### #### ########## ### ##### +### ### #### ###### ### #### ###### ### ### + ### + +++++ + + ++++ ####### + ++ + +++ + ++ ##### + ++ + + +++ ++ + +++++ + + +++++ \ No newline at end of file diff --git a/bin/src/trust-dns.rs b/bin/src/hickory-dns.rs similarity index 93% rename from bin/src/trust-dns.rs rename to bin/src/hickory-dns.rs index 41d4c1a2d5..f61cdd4885 100644 --- a/bin/src/trust-dns.rs +++ b/bin/src/hickory-dns.rs @@ -1,21 +1,21 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. -//! The `trust-dns` binary for running a DNS server +//! The `hickory-dns` binary for running a DNS server //! //! ```text -//! Usage: trust-dns [options] -//! trust-dns (-h | --help | --version) +//! Usage: hickory-dns [options] +//! hickory-dns (-h | --help | --version) //! //! Options: //! -q, --quiet Disable INFO messages, WARN and ERROR will remain //! -d, --debug Turn on DEBUG messages (default is only INFO) //! -h, --help Show this message -//! -v, --version Show the version of trust-dns +//! -v, --version Show the version of hickory-dns //! -c FILE, --config=FILE Path to configuration file, default is /etc/named.toml //! -z DIR, --zonedir=DIR Path to the root directory for all zone files, see also config toml //! -p PORT, --port=PORT Override the listening port @@ -57,16 +57,16 @@ use tracing_subscriber::{ util::SubscriberInitExt, }; -use trust_dns_client::rr::Name; +use hickory_client::rr::Name; #[cfg(feature = "dns-over-tls")] -use trust_dns_server::config::dnssec::{self, TlsCertConfig}; +use hickory_server::config::dnssec::{self, TlsCertConfig}; #[cfg(feature = "resolver")] -use trust_dns_server::store::forwarder::ForwardAuthority; +use hickory_server::store::forwarder::ForwardAuthority; #[cfg(feature = "recursor")] -use trust_dns_server::store::recursor::RecursiveAuthority; +use hickory_server::store::recursor::RecursiveAuthority; #[cfg(feature = "sqlite")] -use trust_dns_server::store::sqlite::{SqliteAuthority, SqliteConfig}; -use trust_dns_server::{ +use hickory_server::store::sqlite::{SqliteAuthority, SqliteConfig}; +use hickory_server::{ authority::{AuthorityObject, Catalog, ZoneType}, config::{Config, ZoneConfig}, server::ServerFuture, @@ -77,7 +77,7 @@ use trust_dns_server::{ }; #[cfg(feature = "dnssec")] -use {trust_dns_client::rr::rdata::key::KeyUsage, trust_dns_server::authority::DnssecAuthority}; +use {hickory_client::rr::rdata::key::KeyUsage, hickory_server::authority::DnssecAuthority}; #[cfg(feature = "dnssec")] async fn load_keys( @@ -271,7 +271,7 @@ async fn load_zone( /// Cli struct for all options managed with clap derive api. #[derive(Debug, Parser)] -#[clap(name = "Trust-DNS named server", version, about)] +#[clap(name = "Hickory DNS named server", version, about)] struct Cli { /// Disable INFO messages, WARN and ERROR will remain #[clap(short = 'q', long = "quiet", conflicts_with = "debug")] @@ -333,7 +333,7 @@ fn main() { default(); } - info!("Trust-DNS {} starting", trust_dns_client::version()); + info!("Hickory DNS {} starting", hickory_client::version()); // start up the server for listening let config = args.config.clone(); @@ -352,7 +352,7 @@ fn main() { let mut runtime = runtime::Builder::new_multi_thread() .enable_all() .worker_threads(4) - .thread_name("trust-dns-server-runtime") + .thread_name("hickory-server-runtime") .build() .expect("failed to initialize Tokio Runtime"); let mut catalog: Catalog = Catalog::new(); @@ -485,12 +485,12 @@ fn main() { match runtime.block_on(server.block_until_done()) { Ok(()) => { // we're exiting for some reason... - info!("Trust-DNS {} stopping", trust_dns_client::version()); + info!("Hickory DNS {} stopping", hickory_client::version()); } Err(e) => { let error_msg = format!( - "Trust-DNS {} has encountered an error: {}", - trust_dns_client::version(), + "Hickory DNS {} has encountered an error: {}", + hickory_client::version(), e ); @@ -686,12 +686,16 @@ fn config_quic( } fn banner() { + #[cfg(feature = "ascii-art")] + const HICKORY_DNS_LOGO: &str = include_str!("hickory-dns.ascii"); + + #[cfg(not(feature = "ascii-art"))] + const HICKORY_DNS_LOGO: &str = "Hickory DNS"; + info!(""); - info!(" o o o "); - info!(" | | | "); - info!(" --O-- o-o o o o-o --O-- o-o o-O o-o o-o "); - info!(" | | | | \\ | | | | | \\ "); - info!(" o o o--o o-o o o-o o o o-o "); + for line in HICKORY_DNS_LOGO.lines() { + info!(" {line}"); + } info!(""); } @@ -754,25 +758,25 @@ fn get_env() -> String { env::var("RUST_LOG").unwrap_or_default() } -fn all_trust_dns(level: impl ToString) -> String { +fn all_hickory_dns(level: impl ToString) -> String { format!( - "named={level},trust_dns={level},{env}", + "hickory_dns={level},{env}", level = level.to_string().to_lowercase(), env = get_env() ) } -/// appends trust-dns-server debug to RUST_LOG +/// appends hickory-server debug to RUST_LOG pub fn debug() { logger(tracing::Level::DEBUG); } -/// appends trust-dns-server info to RUST_LOG +/// appends hickory-server info to RUST_LOG pub fn default() { logger(tracing::Level::INFO); } -/// appends trust-dns-server error to RUST_LOG +/// appends hickory-server error to RUST_LOG pub fn quiet() { logger(tracing::Level::ERROR); } @@ -782,7 +786,7 @@ fn logger(level: tracing::Level) { // Setup tracing for logging based on input let filter = tracing_subscriber::EnvFilter::builder() .with_default_directive(tracing::Level::WARN.into()) - .parse(all_trust_dns(level)) + .parse(all_hickory_dns(level)) .expect("failed to configure tracing/logging"); let formatter = tracing_subscriber::fmt::layer().event_format(TdnsFormatter); diff --git a/bin/tests/named_https_tests.rs b/bin/tests/named_https_tests.rs index 321d07ff9d..b6908fa342 100644 --- a/bin/tests/named_https_tests.rs +++ b/bin/tests/named_https_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(not(windows))] @@ -16,12 +16,12 @@ use std::io::*; use std::net::*; use std::sync::Arc; +use hickory_client::client::*; +use hickory_proto::h2::HttpsClientStreamBuilder; +use hickory_proto::iocompat::AsyncIoTokioAsStd; use rustls::{Certificate, ClientConfig, OwnedTrustAnchor, RootCertStore}; use tokio::net::TcpStream as TokioTcpStream; use tokio::runtime::Runtime; -use trust_dns_client::client::*; -use trust_dns_proto::h2::HttpsClientStreamBuilder; -use trust_dns_proto::iocompat::AsyncIoTokioAsStd; use server_harness::{named_test_harness, query_a}; @@ -84,7 +84,7 @@ fn test_example_https_toml_startup() { // ipv4 should succeed let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); diff --git a/bin/tests/named_openssl_tests.rs b/bin/tests/named_openssl_tests.rs index 9044996644..4edbf17040 100644 --- a/bin/tests/named_openssl_tests.rs +++ b/bin/tests/named_openssl_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(not(windows))] @@ -22,11 +22,11 @@ use native_tls::Certificate; use tokio::net::TcpStream as TokioTcpStream; use tokio::runtime::Runtime; -use trust_dns_client::client::*; -use trust_dns_proto::native_tls::TlsClientStreamBuilder; +use hickory_client::client::*; +use hickory_proto::native_tls::TlsClientStreamBuilder; +use hickory_proto::iocompat::AsyncIoTokioAsStd; use server_harness::{named_test_harness, query_a}; -use trust_dns_proto::iocompat::AsyncIoTokioAsStd; #[test] fn test_example_tls_toml_startup() { @@ -65,7 +65,7 @@ fn test_startup(toml: &'static str) { let (stream, sender) = tls_conn_builder.build(addr, "ns.example.com".to_string()); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); @@ -81,7 +81,7 @@ fn test_startup(toml: &'static str) { let (stream, sender) = tls_conn_builder.build(addr, "ns.example.com".to_string()); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // ipv6 should succeed query_a(&mut io_loop, &mut client); diff --git a/bin/tests/named_quic_tests.rs b/bin/tests/named_quic_tests.rs index 344b986588..c8eb22d4b7 100644 --- a/bin/tests/named_quic_tests.rs +++ b/bin/tests/named_quic_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(not(windows))] @@ -12,10 +12,10 @@ mod server_harness; use std::{env, fs::File, io::*, net::*}; +use hickory_client::client::*; +use hickory_proto::quic::QuicClientStream; use rustls::{Certificate, ClientConfig, OwnedTrustAnchor, RootCertStore}; use tokio::runtime::Runtime; -use trust_dns_client::client::*; -use trust_dns_proto::quic::QuicClientStream; use server_harness::{named_test_harness, query_a}; @@ -70,7 +70,7 @@ fn test_example_quic_toml_startup() { // ipv4 should succeed let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); diff --git a/bin/tests/named_rustls_tests.rs b/bin/tests/named_rustls_tests.rs index 4732db37df..82eca168f6 100644 --- a/bin/tests/named_rustls_tests.rs +++ b/bin/tests/named_rustls_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(not(windows))] @@ -22,9 +22,9 @@ use rustls::RootCertStore; use tokio::net::TcpStream as TokioTcpStream; use tokio::runtime::Runtime; -use trust_dns_client::client::*; -use trust_dns_proto::iocompat::AsyncIoTokioAsStd; -use trust_dns_proto::rustls::tls_client_connect; +use hickory_client::client::*; +use hickory_proto::iocompat::AsyncIoTokioAsStd; +use hickory_proto::rustls::tls_client_connect; use server_harness::{named_test_harness, query_a}; @@ -70,7 +70,7 @@ fn test_example_tls_toml_startup() { let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // ipv4 should succeed query_a(&mut io_loop, &mut client); @@ -88,7 +88,7 @@ fn test_example_tls_toml_startup() { let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // ipv6 should succeed query_a(&mut io_loop, &mut client); diff --git a/bin/tests/named_test_rsa_dnssec.rs b/bin/tests/named_test_rsa_dnssec.rs index a07e0e631c..df51d20371 100644 --- a/bin/tests/named_test_rsa_dnssec.rs +++ b/bin/tests/named_test_rsa_dnssec.rs @@ -12,12 +12,12 @@ use std::path::Path; use tokio::net::TcpStream as TokioTcpStream; use tokio::runtime::Runtime; -use trust_dns_client::client::{Signer, *}; -use trust_dns_client::proto::tcp::TcpClientStream; -use trust_dns_client::proto::DnssecDnsHandle; -use trust_dns_proto::rr::dnssec::*; -use trust_dns_proto::xfer::{DnsExchangeBackground, DnsMultiplexer}; -use trust_dns_proto::{iocompat::AsyncIoTokioAsStd, TokioTime}; +use hickory_client::client::{Signer, *}; +use hickory_client::proto::tcp::TcpClientStream; +use hickory_client::proto::DnssecDnsHandle; +use hickory_proto::rr::dnssec::*; +use hickory_proto::xfer::{DnsExchangeBackground, DnsMultiplexer}; +use hickory_proto::{iocompat::AsyncIoTokioAsStd, TokioTime}; use server_harness::*; @@ -75,9 +75,8 @@ async fn standard_tcp_conn( fn generic_test(config_toml: &str, key_path: &str, key_format: KeyFormat, algorithm: Algorithm) { // TODO: look into the `test-log` crate for enabling logging during tests - // use trust_dns_client::logger; + // use hickory_client::logger; // use tracing::LogLevel; - // logger::TrustDnsLogger::enable_logging(LogLevel::Debug); let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned()); let server_path = Path::new(&server_path); @@ -88,18 +87,18 @@ fn generic_test(config_toml: &str, key_path: &str, key_format: KeyFormat, algori // verify all records are present let client = standard_tcp_conn(tcp_port.expect("no tcp port")); let (client, bg) = io_loop.block_on(client); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_all_dnssec_with_rfc6975(&mut io_loop, client, algorithm); let client = standard_tcp_conn(tcp_port.expect("no tcp port")); let (client, bg) = io_loop.block_on(client); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_all_dnssec_wo_rfc6975(&mut io_loop, client, algorithm); // test that request with Dnssec client is successful, i.e. validates chain let trust_anchor = trust_anchor(&server_path.join(key_path), key_format, algorithm); let client = standard_tcp_conn(tcp_port.expect("no tcp port")); let (client, bg) = io_loop.block_on(client); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let mut client = DnssecDnsHandle::with_trust_anchor(client, trust_anchor); query_a(&mut io_loop, &mut client); diff --git a/bin/tests/named_tests.rs b/bin/tests/named_tests.rs index 9c40a70565..186bfffeff 100644 --- a/bin/tests/named_tests.rs +++ b/bin/tests/named_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. mod server_harness; @@ -15,18 +15,18 @@ use tokio::net::TcpStream as TokioTcpStream; use tokio::net::UdpSocket as TokioUdpSocket; use tokio::runtime::Runtime; -use trust_dns_client::client::*; -use trust_dns_client::op::ResponseCode; -use trust_dns_client::rr::*; -use trust_dns_client::tcp::TcpClientStream; -use trust_dns_client::udp::UdpClientStream; +use hickory_client::client::*; +use hickory_client::op::ResponseCode; +use hickory_client::rr::*; +use hickory_client::tcp::TcpClientStream; +use hickory_client::udp::UdpClientStream; // TODO: Needed for when TLS tests are added back // #[cfg(feature = "dns-over-openssl")] -// use trust_dns_proto::openssl::TlsClientStreamBuilder; +// use hickory_proto::openssl::TlsClientStreamBuilder; +use hickory_proto::iocompat::AsyncIoTokioAsStd; use server_harness::{named_test_harness, query_a}; -use trust_dns_proto::iocompat::AsyncIoTokioAsStd; #[test] fn test_example_toml_startup() { @@ -40,7 +40,7 @@ fn test_example_toml_startup() { let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); @@ -53,7 +53,7 @@ fn test_example_toml_startup() { let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); }) @@ -71,7 +71,7 @@ fn test_ipv4_only_toml_startup() { let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // ipv4 should succeed query_a(&mut io_loop, &mut client); @@ -85,7 +85,7 @@ fn test_ipv4_only_toml_startup() { assert!(io_loop.block_on(client).is_err()); //let (client, bg) = io_loop.block_on(client).expect("client failed to connect"); - //trust_dns_proto::spawn_bg(&io_loop, bg); + //hickory_proto::spawn_bg(&io_loop, bg); // ipv6 should fail // FIXME: probably need to send something for proper test... maybe use JoinHandle in tokio 0.2 @@ -134,7 +134,7 @@ fn test_ipv4_and_ipv6_toml_startup() { let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // ipv4 should succeed query_a(&mut io_loop, &mut client); @@ -145,7 +145,7 @@ fn test_ipv4_and_ipv6_toml_startup() { let (stream, sender) = TcpClientStream::>::new(addr); let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // ipv6 should succeed query_a(&mut io_loop, &mut client); @@ -163,7 +163,7 @@ fn test_nodata_where_name_exists() { let (stream, sender) = TcpClientStream::>::new(addr); let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let msg = io_loop .block_on(client.query( @@ -188,7 +188,7 @@ fn test_nxdomain_where_no_name_exists() { let (stream, sender) = TcpClientStream::>::new(addr); let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let msg = io_loop .block_on(client.query( @@ -213,7 +213,7 @@ fn test_server_continues_on_bad_data_udp() { let stream = UdpClientStream::::new(addr); let client = AsyncClient::connect(stream); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); @@ -234,7 +234,7 @@ fn test_server_continues_on_bad_data_udp() { let client = AsyncClient::connect(stream); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); }) @@ -252,7 +252,7 @@ fn test_server_continues_on_bad_data_tcp() { let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); @@ -271,7 +271,7 @@ fn test_server_continues_on_bad_data_tcp() { let (stream, sender) = TcpClientStream::>::new(addr); let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); query_a(&mut io_loop, &mut client); }) @@ -280,8 +280,8 @@ fn test_server_continues_on_bad_data_tcp() { #[test] #[cfg(feature = "resolver")] fn test_forward() { + use hickory_proto::rr::rdata::A; use server_harness::query_message; - use trust_dns_proto::rr::rdata::A; //env_logger::init(); @@ -295,7 +295,7 @@ fn test_forward() { let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let response = query_message( &mut io_loop, @@ -317,7 +317,7 @@ fn test_forward() { let client = AsyncClient::new(Box::new(stream), sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let response = query_message( &mut io_loop, diff --git a/bin/tests/server_harness/mod.rs b/bin/tests/server_harness/mod.rs index d63f940dab..020abc8e8a 100644 --- a/bin/tests/server_harness/mod.rs +++ b/bin/tests/server_harness/mod.rs @@ -11,13 +11,13 @@ use std::{ time::*, }; +use hickory_client::{client::*, proto::xfer::DnsResponse}; +#[cfg(feature = "dnssec")] +use hickory_proto::rr::dnssec::*; +use hickory_proto::rr::{rdata::A, *}; use regex::Regex; use tokio::runtime::Runtime; use tracing::{info, warn}; -use trust_dns_client::{client::*, proto::xfer::DnsResponse}; -#[cfg(feature = "dnssec")] -use trust_dns_proto::rr::dnssec::*; -use trust_dns_proto::rr::{rdata::A, *}; #[cfg(feature = "dnssec")] use self::mut_message_client::MutMessageHandle; @@ -41,18 +41,21 @@ where let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "..".to_owned()); println!("using server src path: {server_path}"); - let mut command = Command::new(format!("{server_path}/target/debug/trust-dns")); + let mut command = Command::new(format!("{server_path}/target/debug/hickory-dns")); command .stdout(Stdio::piped()) .env( "RUST_LOG", - "trust_dns_client=debug,trust_dns_proto=debug,trust_dns_resolver=debug,trust_dns_server=debug", - ).arg("-d") + "hickory_dns=debug,hickory_client=debug,hickory_proto=debug,hickory_resolver=debug,hickory_server=debug", + ) + .arg("-d") .arg(&format!( "--config={server_path}/tests/test-data/test_configs/{toml}" - )).arg(&format!( + )) + .arg(&format!( "--zonedir={server_path}/tests/test-data/test_configs" - )).arg(&format!("--port={}", 0)) + )) + .arg(&format!("--port={}", 0)) .arg(&format!("--tls-port={}", 0)) .arg(&format!("--https-port={}", 0)) .arg(&format!("--quic-port={}", 0)); @@ -264,7 +267,7 @@ pub fn query_all_dnssec( algorithm: Algorithm, with_rfc6975: bool, ) { - use trust_dns_client::rr::rdata::{DNSKEY, RRSIG}; + use hickory_client::rr::rdata::{DNSKEY, RRSIG}; let name = Name::from_str("example.com.").unwrap(); let mut client = MutMessageHandle::new(client); diff --git a/bin/tests/server_harness/mut_message_client.rs b/bin/tests/server_harness/mut_message_client.rs index 7a738651ba..b9cdb6781d 100644 --- a/bin/tests/server_harness/mut_message_client.rs +++ b/bin/tests/server_harness/mut_message_client.rs @@ -1,8 +1,8 @@ -use trust_dns_client::client::*; -use trust_dns_client::proto::xfer::{DnsHandle, DnsRequest}; +use hickory_client::client::*; +use hickory_client::proto::xfer::{DnsHandle, DnsRequest}; #[cfg(feature = "dnssec")] -use trust_dns_client::{op::Edns, rr::rdata::opt::EdnsOption}; -use trust_dns_server::authority::LookupOptions; +use hickory_client::{op::Edns, rr::rdata::opt::EdnsOption}; +use hickory_server::authority::LookupOptions; #[derive(Clone)] pub struct MutMessageHandle { diff --git a/copyright.txt b/copyright.txt index 354eda2042..886772b3fc 100644 --- a/copyright.txt +++ b/copyright.txt @@ -1,6 +1,6 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. diff --git a/crates/async-std-resolver/Cargo.toml b/crates/async-std-resolver/Cargo.toml index 375d571e2b..69d3f39683 100644 --- a/crates/async-std-resolver/Cargo.toml +++ b/crates/async-std-resolver/Cargo.toml @@ -4,7 +4,7 @@ name = "async-std-resolver" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS is a safe and secure DNS library, for async-std. This Resolver library uses the trust-dns-proto library to perform all DNS queries. The Resolver is intended to be a high-level library for any DNS record resolution see Resolver and AsyncResolver for supported resolution types. The Client can be used for other queries. +Hickory DNS is a safe and secure DNS library, for async-std. This Resolver library uses the hickory-proto library to perform all DNS queries. The Resolver is intended to be a high-level library for any DNS record resolution see Resolver and AsyncResolver for supported resolution types. The Client can be used for other queries. """ # These URLs point to more information about the repository @@ -25,32 +25,32 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] default = ["system-config"] # resolver configuration -system-config = ["trust-dns-resolver/system-config"] +system-config = ["hickory-resolver/system-config"] #### -# TODO: These next features are common across the trust-dns crates, but they are not ready for use here +# TODO: These next features are common across the hickory crates, but they are not ready for use here #### -#dns-over-native-tls = ["dns-over-tls", "trust-dns-resolver/dns-over-native-tls"] +#dns-over-native-tls = ["dns-over-tls", "hickory-resolver/dns-over-native-tls"] # DNS over TLS with OpenSSL currently needs a good way to set default CAs, use rustls or native-tls -#dns-over-openssl = ["dns-over-tls", "trust-dns-resolver/dns-over-openssl"] -#dns-over-rustls = ["dns-over-tls", "trust-dns-resolver/dns-over-rustls"] +#dns-over-openssl = ["dns-over-tls", "hickory-resolver/dns-over-openssl"] +#dns-over-rustls = ["dns-over-tls", "hickory-resolver/dns-over-rustls"] #dns-over-tls = [] # This requires some TLS library, currently only rustls is supported -#dns-over-https-rustls = ["trust-dns-resolver/dns-over-https-rustls"] +#dns-over-https-rustls = ["hickory-resolver/dns-over-https-rustls"] #dns-over-https = [] -#dnssec-openssl = ["dnssec", "trust-dns-resolver/dnssec-openssl"] -#dnssec-ring = ["dnssec", "trust-dns-resolver/dnssec-ring"] +#dnssec-openssl = ["dnssec", "hickory-resolver/dnssec-openssl"] +#dnssec-ring = ["dnssec", "hickory-resolver/dnssec-ring"] #dnssec = [] [lib] @@ -61,11 +61,15 @@ path = "src/lib.rs" async-std = { workspace = true, features = ["unstable"] } async-trait.workspace = true futures-io = { workspace = true, default-features = false, features = ["std"] } -futures-util = { workspace = true, default-features = false, features = ["std"] } +futures-util = { workspace = true, default-features = false, features = [ + "std", +] } pin-utils.workspace = true -trust-dns-resolver = { workspace = true, default-features = false } +hickory-resolver = { workspace = true, default-features = false } socket2.workspace = true [dev-dependencies] async-std = { workspace = true, features = ["attributes"] } -trust-dns-resolver = { workspace = true, default-features = false, features = ["testing"] } +hickory-resolver = { workspace = true, default-features = false, features = [ + "testing", +] } diff --git a/crates/async-std-resolver/LICENSE-APACHE b/crates/async-std-resolver/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/crates/async-std-resolver/LICENSE-APACHE +++ b/crates/async-std-resolver/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/async-std-resolver/LICENSE-MIT b/crates/async-std-resolver/LICENSE-MIT index b497b098ee..cc6341a36e 100644 --- a/crates/async-std-resolver/LICENSE-MIT +++ b/crates/async-std-resolver/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2015 The trust-dns Developers +Copyright (c) 2015 The Hickory DNS Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/crates/async-std-resolver/README.md b/crates/async-std-resolver/README.md index 6deda75c63..783e1be434 100644 --- a/crates/async-std-resolver/README.md +++ b/crates/async-std-resolver/README.md @@ -1,8 +1,10 @@ # Overview -Trust-DNS Async-Std Resolver is a library which implements the DNS resolver using the Trust-DNS Resolver library. +Hickory DNS Async-Std Resolver is a library which implements the DNS resolver using the Hickory DNS Resolver library. -This library contains implementations for IPv4 (A) and IPv6 (AAAA) resolution, more features are in the works. It is built on top of the [async-std](https://async.rs) async-io project, this allows it to be integrated into other systems using the async-std and futures libraries. The Trust-DNS [project](https://github.com/bluejekyll/trust-dns) contains other libraries for DNS: a [client library](https://crates.io/crates/trust-dns-client) for raw protocol usage, a [server library](https://crates.io/crates/trust-dns-server) for hosting zones, and variations on the TLS implementation over [rustls](https://crates.io/crates/trust-dns-rustls) and [native-tls](https://crates.io/crates/trust-dns-native-tls). +This library contains implementations for IPv4 (A) and IPv6 (AAAA) resolution, more features are in the works. It is built on top of the [async-std](https://async.rs) async-io project, this allows it to be integrated into other systems using the async-std and futures libraries. The Hickory DNS [project](https://github.com/hickory-dns/hickory-dns) contains other libraries for DNS: a [client library](https://crates.io/crates/hickory-client) for raw protocol usage, a [server library](https://crates.io/crates/hickory-server) for hosting zones, and variations on the TLS implementation over [rustls](https://crates.io/crates/hickory-dns-rustls) and [native-tls](https://crates.io/crates/hickory-dns-native-tls). + +**NOTICE** This project was rebranded from Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, from `0.24` and onward. ## Features @@ -55,4 +57,4 @@ The current minimum rustc version for this project is `1.67` ## Versioning -Trust-DNS does its best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does its best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/crates/async-std-resolver/src/lib.rs b/crates/async-std-resolver/src/lib.rs index ea6b0a803e..dff685d1fe 100644 --- a/crates/async-std-resolver/src/lib.rs +++ b/crates/async-std-resolver/src/lib.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. // LIBRARY WARNINGS @@ -25,11 +25,11 @@ //! //! This is a 100% in process DNS resolver. It *does not* use the Host OS' resolver. If what is desired is to use the Host OS' resolver, generally in the system's libc, then the `std::net::ToSocketAddrs` variant over `&str` should be used. //! -//! Unlike the `trust-dns-client`, this tries to provide a simpler interface to perform DNS queries. For update options, i.e. Dynamic DNS, the `trust-dns-client` crate must be used instead. The Resolver library is capable of searching multiple domains (this can be disabled by using an FQDN during lookup), dual-stack IPv4/IPv6 lookups, performing chained CNAME lookups, and features connection metric tracking for attempting to pick the best upstream DNS resolver. +//! Unlike the `hickory-client`, this tries to provide a simpler interface to perform DNS queries. For update options, i.e. Dynamic DNS, the `hickory-client` crate must be used instead. The Resolver library is capable of searching multiple domains (this can be disabled by using an FQDN during lookup), dual-stack IPv4/IPv6 lookups, performing chained CNAME lookups, and features connection metric tracking for attempting to pick the best upstream DNS resolver. //! //! Use [`AsyncResolver`](crate::AsyncResolver) for performing DNS queries. `AsyncResolver` is a `async-std` based async resolver, and can be used inside any `asyn-std` based system. //! -//! This as best as possible attempts to abide by the DNS RFCs, please file issues at . +//! This as best as possible attempts to abide by the DNS RFCs, please file issues at . //! //! # Usage //! @@ -94,7 +94,7 @@ //! } //! ``` -use trust_dns_resolver::AsyncResolver; +use hickory_resolver::AsyncResolver; use crate::runtime::AsyncStdConnectionProvider; @@ -104,11 +104,11 @@ mod runtime; mod tests; mod time; -pub use trust_dns_resolver::config; -pub use trust_dns_resolver::error::ResolveError; -pub use trust_dns_resolver::lookup; -pub use trust_dns_resolver::lookup_ip; -pub use trust_dns_resolver::proto; +pub use hickory_resolver::config; +pub use hickory_resolver::error::ResolveError; +pub use hickory_resolver::lookup; +pub use hickory_resolver::lookup_ip; +pub use hickory_resolver::proto; /// An AsyncResolver used with async_std pub type AsyncStdResolver = AsyncResolver; diff --git a/crates/async-std-resolver/src/net.rs b/crates/async-std-resolver/src/net.rs index b763d777cf..d26089f58e 100644 --- a/crates/async-std-resolver/src/net.rs +++ b/crates/async-std-resolver/src/net.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::io; @@ -14,10 +14,10 @@ use async_std::task::spawn_blocking; use async_trait::async_trait; use futures_io::{AsyncRead, AsyncWrite}; use futures_util::future::FutureExt; +use hickory_resolver::proto::tcp::{Connect, DnsTcpStream}; +use hickory_resolver::proto::udp::{DnsUdpSocket, QuicLocalAddr, UdpSocket}; use pin_utils::pin_mut; use socket2::{Domain, Protocol, Socket, Type}; -use trust_dns_resolver::proto::tcp::{Connect, DnsTcpStream}; -use trust_dns_resolver::proto::udp::{DnsUdpSocket, QuicLocalAddr, UdpSocket}; use crate::time::AsyncStdTime; diff --git a/crates/async-std-resolver/src/runtime.rs b/crates/async-std-resolver/src/runtime.rs index 3fd8e7b01e..fe06709e5a 100644 --- a/crates/async-std-resolver/src/runtime.rs +++ b/crates/async-std-resolver/src/runtime.rs @@ -1,21 +1,19 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. +use hickory_resolver::config::{NameServerConfig, ResolverOpts}; use std::future::Future; use std::net::SocketAddr; use std::pin::Pin; -use trust_dns_resolver::config::{NameServerConfig, ResolverOpts}; -use trust_dns_resolver::proto::error::ProtoError; -use trust_dns_resolver::proto::Executor; +use hickory_resolver::proto::error::ProtoError; +use hickory_resolver::proto::Executor; -use trust_dns_resolver::name_server::{ - ConnectionProvider, GenericConnector, RuntimeProvider, Spawn, -}; +use hickory_resolver::name_server::{ConnectionProvider, GenericConnector, RuntimeProvider, Spawn}; use crate::net::{AsyncStdTcpStream, AsyncStdUdpSocket}; use crate::proto::tcp::Connect; diff --git a/crates/async-std-resolver/src/tests.rs b/crates/async-std-resolver/src/tests.rs index 93b387de26..6e971f1982 100644 --- a/crates/async-std-resolver/src/tests.rs +++ b/crates/async-std-resolver/src/tests.rs @@ -1,7 +1,7 @@ #![allow(clippy::extra_unused_type_parameters)] -use trust_dns_resolver::name_server::GenericConnection; -use trust_dns_resolver::testing; +use hickory_resolver::name_server::GenericConnection; +use hickory_resolver::testing; use crate::config::{ResolverConfig, ResolverOpts}; use crate::lookup::LookupFuture; diff --git a/crates/async-std-resolver/src/time.rs b/crates/async-std-resolver/src/time.rs index c0248fc85a..130ebedee9 100644 --- a/crates/async-std-resolver/src/time.rs +++ b/crates/async-std-resolver/src/time.rs @@ -1,15 +1,15 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::future::Future; use std::time::Duration; use async_trait::async_trait; -use trust_dns_resolver::proto::Time; +use hickory_resolver::proto::Time; /// AsyncStd backed timer implementation #[derive(Clone, Copy)] diff --git a/crates/client/Cargo.toml b/crates/client/Cargo.toml index 26b86261cf..a2f158e371 100644 --- a/crates/client/Cargo.toml +++ b/crates/client/Cargo.toml @@ -1,19 +1,19 @@ [package] -name = "trust-dns-client" +name = "hickory-client" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS is a safe and secure DNS library. This is the Client library with DNSSEC support. +Hickory DNS is a safe and secure DNS library. This is the Client library with DNSSEC support. DNSSEC with NSEC validation for negative records, is complete. The client supports dynamic DNS with SIG0 authenticated requests, implementing easy to use high level - funtions. Trust-DNS is based on the Tokio and Futures libraries, which means + funtions. Hickory DNS is based on the Tokio and Futures libraries, which means it should be easily integrated into other software that also use those libraries. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/trust-dns" +documentation = "https://docs.rs/hickory-client" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -30,45 +30,58 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] -backtrace = ["trust-dns-proto/backtrace"] +backtrace = ["hickory-proto/backtrace"] dns-over-https-openssl = ["dns-over-https", "dns-over-openssl"] -dns-over-https-rustls = ["dns-over-https", "dns-over-rustls", "rustls", "trust-dns-proto/dns-over-https-rustls"] -dns-over-https = ["trust-dns-proto/dns-over-https"] +dns-over-https-rustls = [ + "dns-over-https", + "dns-over-rustls", + "rustls", + "hickory-proto/dns-over-https-rustls", +] +dns-over-https = ["hickory-proto/dns-over-https"] -dns-over-quic = ["dns-over-rustls", "trust-dns-proto/dns-over-quic"] +dns-over-quic = ["dns-over-rustls", "hickory-proto/dns-over-quic"] -dns-over-native-tls = ["dns-over-tls", "trust-dns-proto/dns-over-native-tls"] +dns-over-native-tls = ["dns-over-tls", "hickory-proto/dns-over-native-tls"] dns-over-openssl = ["dns-over-tls", "dnssec-openssl"] -dns-over-rustls = ["dns-over-tls", "dnssec-ring", "trust-dns-proto/dns-over-rustls"] +dns-over-rustls = [ + "dns-over-tls", + "dnssec-ring", + "hickory-proto/dns-over-rustls", +] dns-over-tls = [] -webpki-roots = ["trust-dns-proto/webpki-roots"] -native-certs = ["trust-dns-proto/native-certs"] +webpki-roots = ["hickory-proto/webpki-roots"] +native-certs = ["hickory-proto/native-certs"] -dnssec-openssl = ["dnssec", "trust-dns-proto/dnssec-openssl"] -dnssec-ring = ["dnssec", "trust-dns-proto/dnssec-ring"] -dnssec = ["trust-dns-proto/dnssec"] +dnssec-openssl = ["dnssec", "hickory-proto/dnssec-openssl"] +dnssec-ring = ["dnssec", "hickory-proto/dnssec-ring"] +dnssec = ["hickory-proto/dnssec"] -serde-config = ["serde", "trust-dns-proto/serde-config"] +serde-config = ["serde", "hickory-proto/serde-config"] # enables experimental the mDNS (multicast) feature -mdns = ["trust-dns-proto/mdns"] +mdns = ["hickory-proto/mdns"] [lib] -name = "trust_dns_client" +name = "hickory_client" path = "src/lib.rs" [dependencies] cfg-if.workspace = true data-encoding.workspace = true -futures-channel = { workspace = true, default-features = false, features = ["std"] } -futures-util = { workspace = true, default-features = false, features = ["std"] } +futures-channel = { workspace = true, default-features = false, features = [ + "std", +] } +futures-util = { workspace = true, default-features = false, features = [ + "std", +] } once_cell.workspace = true radix_trie.workspace = true rand.workspace = true @@ -77,13 +90,23 @@ serde = { workspace = true, features = ["derive"], optional = true } thiserror.workspace = true tracing.workspace = true tokio = { workspace = true, features = ["rt", "net"] } -trust-dns-proto = { workspace = true, features = ["text-parsing", "tokio-runtime"] } +hickory-proto = { workspace = true, features = [ + "text-parsing", + "tokio-runtime", +] } [dev-dependencies] -futures = { workspace = true, default-features = false, features = ["std", "executor"] } +futures = { workspace = true, default-features = false, features = [ + "std", + "executor", +] } openssl = { workspace = true, features = ["v102", "v110"], optional = false } tokio = { workspace = true, features = ["rt", "macros"] } -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } [package.metadata.docs.rs] all-features = true diff --git a/crates/client/LICENSE-APACHE b/crates/client/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/crates/client/LICENSE-APACHE +++ b/crates/client/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/client/LICENSE-MIT b/crates/client/LICENSE-MIT index b497b098ee..27ead45b5b 100644 --- a/crates/client/LICENSE-MIT +++ b/crates/client/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2015 The trust-dns Developers +Copyright (c) 2015 The hickory-dns Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/crates/client/README.md b/crates/client/README.md index 3295849a08..d5e6aeb91b 100644 --- a/crates/client/README.md +++ b/crates/client/README.md @@ -1,31 +1,33 @@ # Overview -Trust-DNS is a library which implements the DNS protocol and client side functions. +Hickory DNS is a library which implements the DNS protocol and client side functions. -This library contains basic implementations for DNS record serialization, and communication. It is capable of performing `query`, `update`, and `notify` operations. `update` has been proven to be compatible with `BIND9` and `SIG0` signed records for updates. It is built on top of the [tokio](https://tokio.rs) async-io project, this allows it to be integrated into other systems using the tokio and futures libraries. The Trust-DNS [project](https://github.com/bluejekyll/trust-dns) contains other libraries for DNS: a [resolver library](https://crates.io/crates/trust-dns-resolver) for lookups, a [server library](https://crates.io/crates/trust-dns) for hosting zones, and variations on the TLS implementation over [rustls](https://crates.io/crates/trust-dns-rustls) and [native-tls](https://crates.io/crates/trust-dns-native-tls). +This library contains basic implementations for DNS record serialization, and communication. It is capable of performing `query`, `update`, and `notify` operations. `update` has been proven to be compatible with `BIND9` and `SIG0` signed records for updates. It is built on top of the [tokio](https://tokio.rs) async-io project, this allows it to be integrated into other systems using the tokio and futures libraries. The Hickory DNS [project](https://github.com/hickory-dns/hickory-dns) contains other libraries for DNS: a [resolver library](https://crates.io/crates/hickory-resolver) for lookups, a [server library](https://crates.io/crates/hickory-dns) for hosting zones, and variations on the TLS implementation over [rustls](https://crates.io/crates/hickory-dns-rustls) and [native-tls](https://crates.io/crates/hickory-dns-native-tls). -## Features +**NOTICE** This project was rebranded from Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, this crate/binary has been moved to [hickory-client](https://crates.io/crates/hickory-client), from `0.24` and onward, for prior versions see [trust-dns-client](https://crates.io/crates/trust-dns-client). + +## Featuress The `client` is capable of DNSSEC validation as well as offering higher order functions for performing DNS operations: -- [SyncDnssecClient](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/struct.SyncDnssecClient.html) - DNSSEC validation -- [create](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.create) - atomic create of a record, with authenticated request -- [append](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.append) - verify existence of a record and append to it -- [compare_and_swap](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.compare_and_swap) - atomic (depends on server) compare and swap -- [delete_by_rdata](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.delete_by_rdata) - delete a specific record -- [delete_rrset](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.delete_rrset) - delete an entire record set -- [delete_all](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.delete_all) - delete all records sets with a given name -- [notify](https://docs.rs/trust-dns-client/latest/trust_dns_client/client/trait.Client.html#method.notify) - notify server that it should reload a zone +- [SyncDnssecClient](https://docs.rs/hickory-client/latest/hickory_client/client/struct.SyncDnssecClient.html) - DNSSEC validation +- [create](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.create) - atomic create of a record, with authenticated request +- [append](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.append) - verify existence of a record and append to it +- [compare_and_swap](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.compare_and_swap) - atomic (depends on server) compare and swap +- [delete_by_rdata](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_by_rdata) - delete a specific record +- [delete_rrset](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_rrset) - delete an entire record set +- [delete_all](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.delete_all) - delete all records sets with a given name +- [notify](https://docs.rs/hickory-client/latest/hickory_client/client/trait.Client.html#method.notify) - notify server that it should reload a zone ## Example ```rust use std::net::Ipv4Addr; use std::str::FromStr; -use trust_dns_client::client::{Client, SyncClient}; -use trust_dns_client::udp::UdpClientConnection; -use trust_dns_client::op::DnsResponse; -use trust_dns_client::rr::{DNSClass, Name, RData, Record, RecordType}; +use hickory_client::client::{Client, SyncClient}; +use hickory_client::udp::UdpClientConnection; +use hickory_client::op::DnsResponse; +use hickory_client::rr::{DNSClass, Name, RData, Record, RecordType}; let address = "8.8.8.8:53".parse().unwrap(); let conn = UdpClientConnection::new(address).unwrap(); @@ -40,7 +42,7 @@ let response: DnsResponse = client.query(&name, DNSClass::IN, RecordType::A).unw // Messages are the packets sent between client and server in DNS, DnsResonse's can be // dereferenced to a Message. There are many fields to a Message, It's beyond the scope -// of these examples to explain them. See trust_dns::op::message::Message for more details. +// of these examples to explain them. See hickory_dns::op::message::Message for more details. // generally we will be interested in the Message::answers let answers: &[Record] = response.answers(); @@ -78,4 +80,4 @@ The current minimum rustc version for this project is `1.67` ## Versioning -Trust-DNS does it's best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does it's best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/crates/client/benches/lower_name_benches.rs b/crates/client/benches/lower_name_benches.rs index 5a558fd52c..0efac47fe2 100644 --- a/crates/client/benches/lower_name_benches.rs +++ b/crates/client/benches/lower_name_benches.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(nightly)] @@ -14,7 +14,7 @@ use std::str::FromStr; use test::Bencher; -use trust_dns_client::rr::*; +use hickory_client::rr::*; #[bench] fn name_cmp_short(b: &mut Bencher) { diff --git a/crates/client/src/client/async_client.rs b/crates/client/src/client/async_client.rs index f48ca32a5b..0eb69e2d0b 100644 --- a/crates/client/src/client/async_client.rs +++ b/crates/client/src/client/async_client.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{ diff --git a/crates/client/src/client/async_secure_client.rs b/crates/client/src/client/async_secure_client.rs index 26648354e5..4ce64083bc 100644 --- a/crates/client/src/client/async_secure_client.rs +++ b/crates/client/src/client/async_secure_client.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(feature = "dnssec")] diff --git a/crates/client/src/client/client.rs b/crates/client/src/client/client.rs index 3eb0176b6d..c307866eea 100644 --- a/crates/client/src/client/client.rs +++ b/crates/client/src/client/client.rs @@ -4,7 +4,7 @@ // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, @@ -432,8 +432,8 @@ pub trait Client { } } -/// The Client is abstracted over either trust_dns_client::tcp::TcpClientConnection or -/// trust_dns_client::udp::UdpClientConnection. +/// The Client is abstracted over either hickory_client::tcp::TcpClientConnection or +/// hickory_client::udp::UdpClientConnection. /// /// Usage of TCP or UDP is up to the user. Some DNS servers /// disallow TCP in some cases, so if TCP double check if UDP works. @@ -454,7 +454,7 @@ impl SyncClient { /// Creates a new DNS client with the specified connection type and a SIG0 signer. /// - /// This is necessary for signed update requests to update trust-dns-server entries. + /// This is necessary for signed update requests to update hickory-server entries. /// /// # Arguments /// @@ -597,7 +597,7 @@ impl SecureSyncClientBuilder { /// Associate a signer to produce a SIG0 for all update requests /// - /// This is necessary for signed update requests to update trust-dns-server entries + /// This is necessary for signed update requests to update hickory-server entries /// /// # Arguments /// diff --git a/crates/client/src/client/client_connection.rs b/crates/client/src/client/client_connection.rs index 4b1cc06890..c7322850d9 100644 --- a/crates/client/src/client/client_connection.rs +++ b/crates/client/src/client/client_connection.rs @@ -4,7 +4,7 @@ // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/client/src/client/memoize_client_handle.rs b/crates/client/src/client/memoize_client_handle.rs index 1852aab973..16fcd4c638 100644 --- a/crates/client/src/client/memoize_client_handle.rs +++ b/crates/client/src/client/memoize_client_handle.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::collections::HashMap; use std::pin::Pin; @@ -11,7 +11,7 @@ use std::sync::Arc; use futures_util::future::FutureExt; use futures_util::lock::Mutex; use futures_util::stream::Stream; -use trust_dns_proto::{ +use hickory_proto::{ error::ProtoError, xfer::{DnsHandle, DnsRequest, DnsResponse}, }; @@ -100,7 +100,7 @@ mod test { use futures::lock::Mutex; use futures::*; - use trust_dns_proto::{ + use hickory_proto::{ error::ProtoError, xfer::{DnsHandle, DnsRequest, DnsResponse}, }; @@ -108,7 +108,7 @@ mod test { use crate::client::*; use crate::op::*; use crate::rr::*; - use trust_dns_proto::xfer::FirstAnswer; + use hickory_proto::xfer::FirstAnswer; #[derive(Clone)] struct TestClient { diff --git a/crates/client/src/client/mod.rs b/crates/client/src/client/mod.rs index 5511163bd7..f16b004c5b 100644 --- a/crates/client/src/client/mod.rs +++ b/crates/client/src/client/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/client/src/client/rc_stream.rs b/crates/client/src/client/rc_stream.rs index 9ac8827ce5..4067fb17ca 100644 --- a/crates/client/src/client/rc_stream.rs +++ b/crates/client/src/client/rc_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::pin::Pin; diff --git a/crates/client/src/error/client_error.rs b/crates/client/src/error/client_error.rs index a555d6ba5a..1db09945e0 100644 --- a/crates/client/src/error/client_error.rs +++ b/crates/client/src/error/client_error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Error types for the crate @@ -14,7 +14,7 @@ use thiserror::Error; #[cfg(feature = "backtrace")] use crate::proto::{trace, ExtBacktrace}; -use trust_dns_proto::error::{DnsSecError, DnsSecErrorKind, ProtoError, ProtoErrorKind}; +use hickory_proto::error::{DnsSecError, DnsSecErrorKind, ProtoError, ProtoErrorKind}; /// An alias for results returned by functions of this crate pub type Result = ::std::result::Result; @@ -40,7 +40,7 @@ pub enum ErrorKind { #[error("io error")] Io(#[from] std::io::Error), - /// An error got returned by the trust-dns-proto crate + /// An error got returned by the hickory-proto crate #[error("proto error")] Proto(#[from] ProtoError), diff --git a/crates/client/src/error/mod.rs b/crates/client/src/error/mod.rs index f2e9a41fcd..cb1af42e62 100644 --- a/crates/client/src/error/mod.rs +++ b/crates/client/src/error/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -14,7 +14,7 @@ * limitations under the License. */ -//! All defined errors for Trust-DNS +//! All defined errors for Hickory DNS #![deny(missing_docs)] diff --git a/crates/client/src/h2_client_connection.rs b/crates/client/src/h2_client_connection.rs index 30d57285a5..61ac9e5ade 100644 --- a/crates/client/src/h2_client_connection.rs +++ b/crates/client/src/h2_client_connection.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! UDP based DNS client connection for Client impls @@ -11,15 +11,15 @@ use std::marker::PhantomData; use std::net::SocketAddr; use std::sync::Arc; +use hickory_proto::h2::{HttpsClientConnect, HttpsClientStream, HttpsClientStreamBuilder}; +use hickory_proto::tcp::Connect; use rustls::ClientConfig; -use trust_dns_proto::h2::{HttpsClientConnect, HttpsClientStream, HttpsClientStreamBuilder}; -use trust_dns_proto::tcp::Connect; use crate::client::{ClientConnection, Signer}; /// UDP based DNS Client connection /// -/// Use with `trust_dns_client::client::Client` impls +/// Use with `hickory_client::client::Client` impls #[derive(Clone)] pub struct HttpsClientConnection { name_server: SocketAddr, diff --git a/crates/client/src/lib.rs b/crates/client/src/lib.rs index 285700c400..735511497d 100644 --- a/crates/client/src/lib.rs +++ b/crates/client/src/lib.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -37,13 +37,13 @@ #![recursion_limit = "1024"] #![cfg_attr(docsrs, feature(doc_cfg))] -//! Trust-DNS is intended to be a fully compliant domain name server and client library. +//! Hickory DNS is intended to be a fully compliant domain name server and client library. //! //! The Client library is responsible for the basic protocols responsible for communicating with DNS servers (authorities) and resolvers. It can be used for managing DNS records through the use of update operations. It is possible to send raw DNS Messages with the Client, but for ease of use the `query` and various other update operations are recommended for general use. //! -//! For a system-like resolver, see [trust-dns-resolver](https://docs.rs/trust-dns-resolver). This is most likely what you want if all you want to do is lookup IP addresses. +//! For a system-like resolver, see [hickory-resolver](https://docs.rs/hickory-resolver). This is most likely what you want if all you want to do is lookup IP addresses. //! -//! For serving DNS serving, see [trust-dns-server](https://docs.rs/trust-dns-server). +//! For serving DNS serving, see [hickory-server](https://docs.rs/hickory-server). //! //! # Goals //! @@ -62,28 +62,28 @@ //! //! ```toml //! [dependencies] -//! trust-dns-client = "*" +//! hickory-client = "*" //! ``` //! //! By default DNSSEC validation is built in with OpenSSL, this can be disabled with: //! //! ```toml //! [dependencies] -//! trust-dns-client = { version = "*", default-features = false } +//! hickory-client = { version = "*", default-features = false } //! ``` //! //! ## Objects //! //! There are two variations of implementations of the Client. The `SyncClient`, a synchronous client, and the `AsyncClient`, a Tokio async client. `SyncClient` is an implementation of the `Client` trait, there is another implementation, `SyncDnssecClient`, which validates DNSSEC records. For these basic examples we'll only look at the `SyncClient` //! -//! First we must decide on the type of connection, there are three supported by Trust-DNS today, UDP, TCP and TLS. TLS requires OpenSSL by default, see also [trust-dns-native-tls](https://docs.rs/trust-dns-native-tls) and [trust-dns-rustls](https://docs.rs/trust-dns-rustls) for other TLS options. +//! First we must decide on the type of connection, there are three supported by Hickory DNS today, UDP, TCP and TLS. TLS requires OpenSSL by default, see also [hickory-dns-native-tls](https://docs.rs/hickory-dns-native-tls) and [hickory-dns-rustls](https://docs.rs/hickory-dns-rustls) for other TLS options. //! //! ## Setup a connection //! //! ```rust -//! use trust_dns_proto::DnsStreamHandle; -//! use trust_dns_client::client::{Client, ClientConnection, SyncClient}; -//! use trust_dns_client::udp::UdpClientConnection; +//! use hickory_proto::DnsStreamHandle; +//! use hickory_client::client::{Client, ClientConnection, SyncClient}; +//! use hickory_client::udp::UdpClientConnection; //! //! let address = "8.8.8.8:53".parse().unwrap(); //! let conn = UdpClientConnection::new(address).unwrap(); @@ -96,16 +96,16 @@ //! //! ## Querying //! -//! Using the Client to query for DNS records is easy enough, though it performs no resolution. The `trust-dns-resolver` has a simpler interface if that's what is desired. Over time that library will gain more features to generically query for different types. +//! Using the Client to query for DNS records is easy enough, though it performs no resolution. The `hickory-resolver` has a simpler interface if that's what is desired. Over time that library will gain more features to generically query for different types. //! //! ```rust //! use std::net::Ipv4Addr; //! use std::str::FromStr; -//! # use trust_dns_client::client::{Client, SyncClient}; -//! # use trust_dns_client::udp::UdpClientConnection; -//! use trust_dns_client::op::DnsResponse; -//! use trust_dns_client::rr::{DNSClass, Name, RData, Record, RecordType}; -//! use trust_dns_client::rr::rdata::A; +//! # use hickory_client::client::{Client, SyncClient}; +//! # use hickory_client::udp::UdpClientConnection; +//! use hickory_client::op::DnsResponse; +//! use hickory_client::rr::{DNSClass, Name, RData, Record, RecordType}; +//! use hickory_client::rr::rdata::A; //! # //! # let address = "8.8.8.8:53".parse().unwrap(); //! # let conn = UdpClientConnection::new(address).unwrap(); @@ -121,7 +121,7 @@ //! // Messages are the packets sent between client and server in DNS. //! // there are many fields to a Message, DnsResponse can be dereferenced into //! // a Message. It's beyond the scope of these examples -//! // to explain all the details of a Message. See trust_dns_client::op::message::Message for more details. +//! // to explain all the details of a Message. See hickory_client::op::message::Message for more details. //! // generally we will be interested in the Message::answers //! let answers: &[Record] = response.answers(); //! @@ -135,11 +135,11 @@ //! } //! ``` //! -//! In the above example we successfully queried for a A record. There are many other types, each can be independently queried and the associated `trust_dns_client::rr::record_data::RData` has a variant with the deserialized data for the record stored. +//! In the above example we successfully queried for a A record. There are many other types, each can be independently queried and the associated `hickory_client::rr::record_data::RData` has a variant with the deserialized data for the record stored. //! //! ## Dynamic update //! -//! Currently `trust-dns-client` supports SIG(0) signed records for authentication and authorization of dynamic DNS updates. It's beyond the scope of these examples to show how to setup SIG(0) authorization on the server. `trust-dns-client` is known to work with BIND9 and `trust-dns-server`. Expect in the future for TLS to become a potentially better option for authorization with certificate chains. These examples show using SIG(0) for auth, requires OpenSSL. It's beyond the scope of these examples to describe the configuration for the server. +//! Currently `hickory-client` supports SIG(0) signed records for authentication and authorization of dynamic DNS updates. It's beyond the scope of these examples to show how to setup SIG(0) authorization on the server. `hickory-client` is known to work with BIND9 and `hickory-server`. Expect in the future for TLS to become a potentially better option for authorization with certificate chains. These examples show using SIG(0) for auth, requires OpenSSL. It's beyond the scope of these examples to describe the configuration for the server. //! //! ```rust,no_run @@ -154,18 +154,18 @@ //! //! # #[cfg(feature = "openssl")] //! use openssl::rsa::Rsa; -//! use trust_dns_client::client::{Client, SyncClient}; -//! use trust_dns_client::udp::UdpClientConnection; -//! use trust_dns_client::rr::{Name, RData, Record, RecordType}; -//! use trust_dns_client::proto::rr::dnssec::{Algorithm, SigSigner, KeyPair}; -//! use trust_dns_client::op::ResponseCode; -//! use trust_dns_client::rr::rdata::{A, key::KEY}; +//! use hickory_client::client::{Client, SyncClient}; +//! use hickory_client::udp::UdpClientConnection; +//! use hickory_client::rr::{Name, RData, Record, RecordType}; +//! use hickory_client::proto::rr::dnssec::{Algorithm, SigSigner, KeyPair}; +//! use hickory_client::op::ResponseCode; +//! use hickory_client::rr::rdata::{A, key::KEY}; //! //! # let address = "0.0.0.0:53".parse().unwrap(); //! # let conn = UdpClientConnection::new(address).unwrap(); //! //! // The format of the key is dependent on the KeyPair type, in this example we're using RSA -//! // if the key was generated with BIND, the binary in Trust-DNS client lib `dnskey-to-pem` +//! // if the key was generated with BIND, the binary in Hickory DNS client lib `dnskey-to-pem` //! // can be used to convert this to a pem file //! let mut pem = File::open("my_private_key.pem").unwrap(); //! let mut pem_buf = Vec::::new(); @@ -186,7 +186,7 @@ //! Algorithm::RSASHA256, //! key.to_public_bytes().unwrap()); //! -//! // Create the Trust-DNS SIG(0) signing facility. Generally the signer_name is the label +//! // Create the Hickory DNS SIG(0) signing facility. Generally the signer_name is the label //! // associated with KEY record in the server. //! let signer = SigSigner::sig0(sig0key, //! key, @@ -215,7 +215,7 @@ //! # } //! ``` //! -//! *Note*: The dynamic DNS functions defined by Trust-DNS are expressed as atomic operations, but this depends on support of the remote server. For example, the `create` operation shown above, should only succeed if there is no `RecordSet` of the specified type at the specified label. The other update operations are `append`, `compare_and_swap`, `delete_by_rdata`, `delete_rrset`, and `delete_all`. See the documentation for each of these methods on the `Client` trait. +//! *Note*: The dynamic DNS functions defined by Hickory DNS are expressed as atomic operations, but this depends on support of the remote server. For example, the `create` operation shown above, should only succeed if there is no `RecordSet` of the specified type at the specified label. The other update operations are `append`, `compare_and_swap`, `delete_by_rdata`, `delete_rrset`, and `delete_all`. See the documentation for each of these methods on the `Client` trait. //! //! //! ## Async client usage @@ -227,11 +227,11 @@ //! use std::net::Ipv4Addr; //! use std::str::FromStr; //! use tokio::net::TcpStream as TokioTcpStream; -//! use trust_dns_client::client::{AsyncClient, ClientHandle}; -//! use trust_dns_client::proto::iocompat::AsyncIoTokioAsStd; -//! use trust_dns_client::rr::{DNSClass, Name, RData, RecordType}; -//! use trust_dns_client::rr::rdata::A; -//! use trust_dns_client::tcp::TcpClientStream; +//! use hickory_client::client::{AsyncClient, ClientHandle}; +//! use hickory_client::proto::iocompat::AsyncIoTokioAsStd; +//! use hickory_client::rr::{DNSClass, Name, RData, RecordType}; +//! use hickory_client::rr::rdata::A; +//! use hickory_client::tcp::TcpClientStream; //! //! #[tokio::main] //! async fn main() { @@ -284,7 +284,7 @@ pub mod udp; #[cfg(feature = "dns-over-https")] mod h2_client_connection; -pub use trust_dns_proto as proto; +pub use hickory_proto as proto; /// The https module which contains all https related connection types #[cfg(feature = "dns-over-https")] diff --git a/crates/client/src/multicast/mdns_client_connection.rs b/crates/client/src/multicast/mdns_client_connection.rs index 42e8ce1818..dc33341777 100644 --- a/crates/client/src/multicast/mdns_client_connection.rs +++ b/crates/client/src/multicast/mdns_client_connection.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! MDNS based DNS client connection for Client impls @@ -19,7 +19,7 @@ use crate::client::{ClientConnection, Signer}; /// MDNS based DNS Client connection /// -/// Use with `trust_dns_client::client::Client` impls +/// Use with `hickory_client::client::Client` impls #[derive(Clone, Copy)] pub struct MdnsClientConnection { multicast_addr: SocketAddr, diff --git a/crates/client/src/multicast/mod.rs b/crates/client/src/multicast/mod.rs index ce94d89760..c48ce51d94 100644 --- a/crates/client/src/multicast/mod.rs +++ b/crates/client/src/multicast/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! UDP protocol related components for DNS diff --git a/crates/client/src/op/mod.rs b/crates/client/src/op/mod.rs index 1938945398..526f445b01 100644 --- a/crates/client/src/op/mod.rs +++ b/crates/client/src/op/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Operations to send with a `Client` or server, e.g. `Query`, `Message`, or `UpdateMessage` can diff --git a/crates/client/src/rr/mod.rs b/crates/client/src/rr/mod.rs index c1c4342553..8846a308a9 100644 --- a/crates/client/src/rr/mod.rs +++ b/crates/client/src/rr/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Resource record related components, e.g. `Name` aka label, `Record`, `RData`, ... diff --git a/crates/client/src/serialize/binary/mod.rs b/crates/client/src/serialize/binary/mod.rs index 653dfd0417..8e82f1ee4a 100644 --- a/crates/client/src/serialize/binary/mod.rs +++ b/crates/client/src/serialize/binary/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -18,7 +18,7 @@ use crate::proto::serialize::binary; -#[deprecated(note = "use [`trust_dns_client::serialize::binary::StreamHandle`] instead")] +#[deprecated(note = "use [`hickory_client::serialize::binary::StreamHandle`] instead")] pub use self::binary::BinDecodable as BinSerializable; pub use self::binary::BinDecodable; pub use self::binary::BinDecoder; diff --git a/crates/client/src/serialize/mod.rs b/crates/client/src/serialize/mod.rs index 49de018e70..fd0fedbde7 100644 --- a/crates/client/src/serialize/mod.rs +++ b/crates/client/src/serialize/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/client/src/tcp/mod.rs b/crates/client/src/tcp/mod.rs index a3130561fe..06455a276b 100644 --- a/crates/client/src/tcp/mod.rs +++ b/crates/client/src/tcp/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/client/src/tcp/tcp_client_connection.rs b/crates/client/src/tcp/tcp_client_connection.rs index ddeec8b0d2..cd86683f45 100644 --- a/crates/client/src/tcp/tcp_client_connection.rs +++ b/crates/client/src/tcp/tcp_client_connection.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TCP based DNS client connection for Client impls @@ -21,7 +21,7 @@ use crate::proto::xfer::{DnsMultiplexer, DnsMultiplexerConnect}; /// Tcp client connection /// -/// Use with `trust_dns_client::client::Client` impls +/// Use with `hickory_client::client::Client` impls #[derive(Clone, Copy)] pub struct TcpClientConnection { name_server: SocketAddr, diff --git a/crates/client/src/tests.rs b/crates/client/src/tests.rs index 2342dfcf31..df80c2905b 100644 --- a/crates/client/src/tests.rs +++ b/crates/client/src/tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #[cfg(feature = "openssl")] diff --git a/crates/client/src/udp/mod.rs b/crates/client/src/udp/mod.rs index d5ef269684..feb30fed79 100644 --- a/crates/client/src/udp/mod.rs +++ b/crates/client/src/udp/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/client/src/udp/udp_client_connection.rs b/crates/client/src/udp/udp_client_connection.rs index ebe97b888f..53686402c8 100644 --- a/crates/client/src/udp/udp_client_connection.rs +++ b/crates/client/src/udp/udp_client_connection.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! UDP based DNS client connection for Client impls @@ -21,7 +21,7 @@ use tokio::net::UdpSocket; /// UDP based DNS Client connection /// -/// Use with `trust_dns_client::client::Client` impls +/// Use with `hickory_client::client::Client` impls #[derive(Clone, Copy)] pub struct UdpClientConnection { name_server: SocketAddr, diff --git a/crates/proto/Cargo.toml b/crates/proto/Cargo.toml index 74156152b3..952a013cc5 100644 --- a/crates/proto/Cargo.toml +++ b/crates/proto/Cargo.toml @@ -1,14 +1,14 @@ [package] -name = "trust-dns-proto" +name = "hickory-proto" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS is a safe and secure DNS library. This is the foundational DNS protocol library for all Trust-DNS projects. +Hickory DNS is a safe and secure DNS library. This is the foundational DNS protocol library for all Hickory DNS projects. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/trust-dns-proto" +documentation = "https://docs.rs/hickory-proto" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -25,19 +25,36 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] dns-over-tls = [] -dns-over-rustls = ["dns-over-tls", "rustls", "rustls-pemfile", "tokio-rustls", "tokio-runtime"] -dns-over-native-tls = ["dns-over-tls", "native-tls", "tokio-native-tls", "tokio-runtime"] +dns-over-rustls = [ + "dns-over-tls", + "rustls", + "rustls-pemfile", + "tokio-rustls", + "tokio-runtime", +] +dns-over-native-tls = [ + "dns-over-tls", + "native-tls", + "tokio-native-tls", + "tokio-runtime", +] dns-over-openssl = ["dns-over-tls", "openssl", "tokio-openssl", "tokio-runtime"] dns-over-https-rustls = ["dns-over-https"] dns-over-https = ["bytes", "h2", "http", "dns-over-rustls", "tokio-runtime"] -dns-over-quic = ["quinn", "rustls/quic", "dns-over-rustls", "bytes", "tokio-runtime"] +dns-over-quic = [ + "quinn", + "rustls/quic", + "dns-over-rustls", + "bytes", + "tokio-runtime", +] dns-over-h3 = ["h3", "h3-quinn", "quinn", "http", "dns-over-quic"] native-certs = ["dep:rustls-native-certs"] @@ -65,7 +82,7 @@ wasm-bindgen = ["wasm-bindgen-crate", "js-sys"] backtrace = ["dep:backtrace"] [lib] -name = "trust_dns_proto" +name = "hickory_proto" path = "src/lib.rs" [dependencies] @@ -75,9 +92,13 @@ bytes = { workspace = true, optional = true } cfg-if.workspace = true data-encoding.workspace = true enum-as-inner.workspace = true -futures-channel = { workspace = true, default-features = false, features = ["std"] } +futures-channel = { workspace = true, default-features = false, features = [ + "std", +] } futures-io = { workspace = true, default-features = false, features = ["std"] } -futures-util = { workspace = true, default-features = false, features = ["std"] } +futures-util = { workspace = true, default-features = false, features = [ + "std", +] } h2 = { workspace = true, features = ["stream"], optional = true } h3 = { workspace = true, optional = true } h3-quinn = { workspace = true, optional = true } @@ -88,7 +109,11 @@ js-sys = { workspace = true, optional = true } native-tls = { workspace = true, optional = true } once_cell.workspace = true openssl = { workspace = true, features = ["v102", "v110"], optional = true } -quinn = { workspace = true, optional = true, features = ["log", "runtime-tokio", "tls-rustls"] } +quinn = { workspace = true, optional = true, features = [ + "log", + "runtime-tokio", + "tls-rustls", +] } rand.workspace = true ring = { workspace = true, optional = true, features = ["std"] } rustls = { workspace = true, optional = true } @@ -108,10 +133,16 @@ wasm-bindgen-crate = { workspace = true, optional = true } webpki-roots = { workspace = true, optional = true } [dev-dependencies] -futures-executor = { workspace = true, default-features = false, features = ["std"] } +futures-executor = { workspace = true, default-features = false, features = [ + "std", +] } openssl = { workspace = true, features = ["v102", "v110"] } tokio = { workspace = true, features = ["rt", "time", "macros"] } -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } [package.metadata.docs.rs] all-features = true diff --git a/crates/proto/LICENSE-APACHE b/crates/proto/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/crates/proto/LICENSE-APACHE +++ b/crates/proto/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/LICENSE-MIT b/crates/proto/LICENSE-MIT index b497b098ee..cc6341a36e 100644 --- a/crates/proto/LICENSE-MIT +++ b/crates/proto/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2015 The trust-dns Developers +Copyright (c) 2015 The Hickory DNS Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/crates/proto/README.md b/crates/proto/README.md index 123f8156b3..962fd56a47 100644 --- a/crates/proto/README.md +++ b/crates/proto/README.md @@ -1,6 +1,8 @@ # Overview -Trust-DNS Proto is the foundational DNS protocol library and implementation for Trust-DNS. Unless you want to manipulate the DNS packets directly, it is likely not the library you want. Please see Trust-DNS [Resolver](https://crates.io/crates/trust-dns-resolver), [Client](https://crates.io/crates/trust-dns-client), or [Server](https://crates.io/crates/trust-dns-server) for higher level interfaces. +Hickory DNS Proto is the foundational DNS protocol library and implementation for Hickory DNS. Unless you want to manipulate the DNS packets directly, it is likely not the library you want. Please see Hickory DNS [Resolver](https://crates.io/crates/hickory-resolver), [Client](https://crates.io/crates/hickory-client), or [Server](https://crates.io/crates/hickory-server) for higher level interfaces. + +**NOTICE** This project was rebranded from Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, this crate/binary has been moved to [hickory-proto](https://crates.io/crates/hickory-proto), from `0.24` and onward, for prior versions see [trust-dns-proto](https://crates.io/crates/trust-dns-proto). ## Minimum Rust Version @@ -8,4 +10,4 @@ The current minimum rustc version for this project is `1.67` ## Versioning -Trust-DNS does it's best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does it's best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/crates/proto/benches/lib.rs b/crates/proto/benches/lib.rs index 23ca7705fe..d8e3dfa1c1 100644 --- a/crates/proto/benches/lib.rs +++ b/crates/proto/benches/lib.rs @@ -3,9 +3,9 @@ extern crate test; -use trust_dns_proto::op::{Header, Message, MessageType, OpCode, ResponseCode}; -use trust_dns_proto::rr::Record; -use trust_dns_proto::serialize::binary::{BinDecodable, BinDecoder, BinEncodable, BinEncoder}; +use hickory_proto::op::{Header, Message, MessageType, OpCode, ResponseCode}; +use hickory_proto::rr::Record; +use hickory_proto::serialize::binary::{BinDecodable, BinDecoder, BinEncodable, BinEncoder}; use test::Bencher; diff --git a/crates/proto/benches/name_benches.rs b/crates/proto/benches/name_benches.rs index bc19cf9e6c..84ef8b818d 100644 --- a/crates/proto/benches/name_benches.rs +++ b/crates/proto/benches/name_benches.rs @@ -7,7 +7,7 @@ use std::cmp::Ordering; use test::Bencher; -use trust_dns_proto::rr::*; +use hickory_proto::rr::*; #[bench] fn name_cmp_short(b: &mut Bencher) { diff --git a/crates/proto/src/error.rs b/crates/proto/src/error.rs index ecbbeac80c..36dccfa9c6 100644 --- a/crates/proto/src/error.rs +++ b/crates/proto/src/error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Error types for the crate @@ -542,7 +542,7 @@ pub enum DnsSecErrorKind { Msg(String), // foreign - /// An error got returned by the trust-dns-proto crate + /// An error got returned by the hickory-proto crate #[error("proto error: {0}")] Proto(#[from] ProtoError), diff --git a/crates/proto/src/h2/h2_client_stream.rs b/crates/proto/src/h2/h2_client_stream.rs index 7435ad1b1e..2cd290d747 100644 --- a/crates/proto/src/h2/h2_client_stream.rs +++ b/crates/proto/src/h2/h2_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt::{self, Display}; diff --git a/crates/proto/src/h2/h2_server.rs b/crates/proto/src/h2/h2_server.rs index 9b5bef4719..895ea66e9c 100644 --- a/crates/proto/src/h2/h2_server.rs +++ b/crates/proto/src/h2/h2_server.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HTTPS related server items diff --git a/crates/proto/src/h2/mod.rs b/crates/proto/src/h2/mod.rs index dd44b57be9..90f95df131 100644 --- a/crates/proto/src/h2/mod.rs +++ b/crates/proto/src/h2/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TLS protocol related components for DNS over HTTPS (DoH) diff --git a/crates/proto/src/h3/h3_client_stream.rs b/crates/proto/src/h3/h3_client_stream.rs index 9a0227f356..591edc3c82 100644 --- a/crates/proto/src/h3/h3_client_stream.rs +++ b/crates/proto/src/h3/h3_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt::{self, Display}; diff --git a/crates/proto/src/h3/h3_server.rs b/crates/proto/src/h3/h3_server.rs index cacb05ac3a..f9f11fb755 100644 --- a/crates/proto/src/h3/h3_server.rs +++ b/crates/proto/src/h3/h3_server.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HTTP/3 related server items diff --git a/crates/proto/src/h3/mod.rs b/crates/proto/src/h3/mod.rs index 8ecdecbc4a..0a1299e6b2 100644 --- a/crates/proto/src/h3/mod.rs +++ b/crates/proto/src/h3/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TLS protocol related components for DNS over HTTP/3 (DoH3) diff --git a/crates/proto/src/http/error.rs b/crates/proto/src/http/error.rs index bd81b44176..de07afe953 100644 --- a/crates/proto/src/http/error.rs +++ b/crates/proto/src/http/error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::num::ParseIntError; diff --git a/crates/proto/src/http/mod.rs b/crates/proto/src/http/mod.rs index 283dedf539..7a1f00721c 100644 --- a/crates/proto/src/http/mod.rs +++ b/crates/proto/src/http/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HTTP protocol related components for DNS over HTTP/2 (DoH) and HTTP/3 (DoH3) diff --git a/crates/proto/src/http/request.rs b/crates/proto/src/http/request.rs index ad94702158..724709d329 100644 --- a/crates/proto/src/http/request.rs +++ b/crates/proto/src/http/request.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HTTP request creation and validation diff --git a/crates/proto/src/http/response.rs b/crates/proto/src/http/response.rs index 143167e3e8..52cc27bc65 100644 --- a/crates/proto/src/http/response.rs +++ b/crates/proto/src/http/response.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HTTP request creation and validation diff --git a/crates/proto/src/lib.rs b/crates/proto/src/lib.rs index 74f1c12d83..f744fd19c0 100644 --- a/crates/proto/src/lib.rs +++ b/crates/proto/src/lib.rs @@ -2,8 +2,8 @@ // Copyright 2017 Google LLC. // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. // LIBRARY WARNINGS @@ -28,7 +28,7 @@ #![recursion_limit = "2048"] #![cfg_attr(docsrs, feature(doc_cfg))] -//! Trust-DNS Protocol library +//! Hickory DNS Protocol library use async_trait::async_trait; use futures_util::future::Future; diff --git a/crates/proto/src/multicast/mdns_client_stream.rs b/crates/proto/src/multicast/mdns_client_stream.rs index 673a7694b1..38265c33aa 100644 --- a/crates/proto/src/multicast/mdns_client_stream.rs +++ b/crates/proto/src/multicast/mdns_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt::{self, Display}; diff --git a/crates/proto/src/multicast/mdns_stream.rs b/crates/proto/src/multicast/mdns_stream.rs index 4fe0fdd413..18a9b76b1e 100644 --- a/crates/proto/src/multicast/mdns_stream.rs +++ b/crates/proto/src/multicast/mdns_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std; diff --git a/crates/proto/src/multicast/mod.rs b/crates/proto/src/multicast/mod.rs index 4ce5b87f65..4fcdc43a92 100644 --- a/crates/proto/src/multicast/mod.rs +++ b/crates/proto/src/multicast/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Multicast protocol related components for DNS diff --git a/crates/proto/src/native_tls/mod.rs b/crates/proto/src/native_tls/mod.rs index f2b3eff254..4123a200fd 100644 --- a/crates/proto/src/native_tls/mod.rs +++ b/crates/proto/src/native_tls/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TLS protocol related components for DNS over TLS diff --git a/crates/proto/src/native_tls/tests.rs b/crates/proto/src/native_tls/tests.rs index bf7d397946..a268717707 100644 --- a/crates/proto/src/native_tls/tests.rs +++ b/crates/proto/src/native_tls/tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![allow( diff --git a/crates/proto/src/native_tls/tls_client_stream.rs b/crates/proto/src/native_tls/tls_client_stream.rs index 86796a696c..ab18bb0d03 100644 --- a/crates/proto/src/native_tls/tls_client_stream.rs +++ b/crates/proto/src/native_tls/tls_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TlsClientStream for DNS over TLS diff --git a/crates/proto/src/native_tls/tls_stream.rs b/crates/proto/src/native_tls/tls_stream.rs index 7e04924a84..9d5d665108 100644 --- a/crates/proto/src/native_tls/tls_stream.rs +++ b/crates/proto/src/native_tls/tls_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Base TlsStream diff --git a/crates/proto/src/op/edns.rs b/crates/proto/src/op/edns.rs index 75d6ee79fc..c540bd8207 100644 --- a/crates/proto/src/op/edns.rs +++ b/crates/proto/src/op/edns.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Extended DNS options diff --git a/crates/proto/src/op/header.rs b/crates/proto/src/op/header.rs index ac4f87c7f0..81fdb9e9c4 100644 --- a/crates/proto/src/op/header.rs +++ b/crates/proto/src/op/header.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Message metadata diff --git a/crates/proto/src/op/lower_query.rs b/crates/proto/src/op/lower_query.rs index a324092ea5..caa02d8c44 100644 --- a/crates/proto/src/op/lower_query.rs +++ b/crates/proto/src/op/lower_query.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt::{self, Display}; diff --git a/crates/proto/src/op/message.rs b/crates/proto/src/op/message.rs index 8f3cb002a1..d8904e377c 100644 --- a/crates/proto/src/op/message.rs +++ b/crates/proto/src/op/message.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Basic protocol message for DNS @@ -767,7 +767,7 @@ impl Message { /// Consumes `Message` giving public access to fields in `Message` so they can be /// destructured and taken by value /// ```rust -/// use trust_dns_proto::op::{Message, MessageParts}; +/// use hickory_proto::op::{Message, MessageParts}; /// /// let msg = Message::new(); /// let MessageParts { queries, .. } = msg.into_parts(); diff --git a/crates/proto/src/op/mod.rs b/crates/proto/src/op/mod.rs index bbd7dd09cd..288df2ca72 100644 --- a/crates/proto/src/op/mod.rs +++ b/crates/proto/src/op/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/op/op_code.rs b/crates/proto/src/op/op_code.rs index 8c0fcebd31..3c565f35d6 100644 --- a/crates/proto/src/op/op_code.rs +++ b/crates/proto/src/op/op_code.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Operation code for queries, updates, and responses @@ -60,7 +60,7 @@ impl fmt::Display for OpCode { /// Convert from `OpCode` to `u8` /// /// ``` -/// use trust_dns_proto::op::op_code::OpCode; +/// use hickory_proto::op::op_code::OpCode; /// /// let var: u8 = From::from(OpCode::Query); /// assert_eq!(0, var); @@ -85,7 +85,7 @@ impl From for u8 { /// Convert from `u8` to `OpCode` /// /// ``` -/// use trust_dns_proto::op::op_code::OpCode; +/// use hickory_proto::op::op_code::OpCode; /// /// let var: OpCode = OpCode::from_u8(0).unwrap(); /// assert_eq!(OpCode::Query, var); diff --git a/crates/proto/src/op/query.rs b/crates/proto/src/op/query.rs index 571dc0bd1c..a4777965f2 100644 --- a/crates/proto/src/op/query.rs +++ b/crates/proto/src/op/query.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/op/response_code.rs b/crates/proto/src/op/response_code.rs index 244a6259e6..69d9323b30 100644 --- a/crates/proto/src/op/response_code.rs +++ b/crates/proto/src/op/response_code.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -197,7 +197,7 @@ impl Display for ResponseCode { /// Convert from `ResponseCode` to `u16` /// /// ``` -/// use trust_dns_proto::op::response_code::ResponseCode; +/// use hickory_proto::op::response_code::ResponseCode; /// /// let var: ResponseCode = From::from(0); /// assert_eq!(ResponseCode::NoError, var); @@ -241,7 +241,7 @@ impl From for u16 { /// Convert from `u16` to `ResponseCode` /// /// ``` -/// use trust_dns_proto::op::response_code::ResponseCode; +/// use hickory_proto::op::response_code::ResponseCode; /// /// let var: u16 = From::from(ResponseCode::NoError); /// assert_eq!(0, var); diff --git a/crates/proto/src/op/update_message.rs b/crates/proto/src/op/update_message.rs index ebcebbec95..ca938cc0a0 100644 --- a/crates/proto/src/op/update_message.rs +++ b/crates/proto/src/op/update_message.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Update related operations for Messages diff --git a/crates/proto/src/openssl/mod.rs b/crates/proto/src/openssl/mod.rs index da32012aae..870a3515ae 100644 --- a/crates/proto/src/openssl/mod.rs +++ b/crates/proto/src/openssl/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TLS protocol related components for DNS over TLS diff --git a/crates/proto/src/openssl/tls_client_stream.rs b/crates/proto/src/openssl/tls_client_stream.rs index 5c5537abd3..0ac994cbfa 100644 --- a/crates/proto/src/openssl/tls_client_stream.rs +++ b/crates/proto/src/openssl/tls_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::future::Future; diff --git a/crates/proto/src/openssl/tls_server.rs b/crates/proto/src/openssl/tls_server.rs index b1efa58fb2..08a5e17064 100644 --- a/crates/proto/src/openssl/tls_server.rs +++ b/crates/proto/src/openssl/tls_server.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! DNS over TLS server implementations for OpenSSL diff --git a/crates/proto/src/openssl/tls_stream.rs b/crates/proto/src/openssl/tls_stream.rs index a5d8b0ec4c..86df232027 100644 --- a/crates/proto/src/openssl/tls_stream.rs +++ b/crates/proto/src/openssl/tls_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::io; diff --git a/crates/proto/src/quic/mod.rs b/crates/proto/src/quic/mod.rs index d15de82ac0..df75ba89cc 100644 --- a/crates/proto/src/quic/mod.rs +++ b/crates/proto/src/quic/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! QUIC protocol related components for DNS over QUIC (DoQ) diff --git a/crates/proto/src/quic/quic_client_stream.rs b/crates/proto/src/quic/quic_client_stream.rs index 45d69a5e68..4fd1a81b8a 100644 --- a/crates/proto/src/quic/quic_client_stream.rs +++ b/crates/proto/src/quic/quic_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{ diff --git a/crates/proto/src/quic/quic_config.rs b/crates/proto/src/quic/quic_config.rs index 04b2f40ee7..f16cd685a0 100644 --- a/crates/proto/src/quic/quic_config.rs +++ b/crates/proto/src/quic/quic_config.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use quinn::{EndpointConfig, TransportConfig, VarInt}; diff --git a/crates/proto/src/quic/quic_server.rs b/crates/proto/src/quic/quic_server.rs index e5fb52d64c..7cf082497e 100644 --- a/crates/proto/src/quic/quic_server.rs +++ b/crates/proto/src/quic/quic_server.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{io, net::SocketAddr, sync::Arc}; diff --git a/crates/proto/src/quic/quic_socket.rs b/crates/proto/src/quic/quic_socket.rs index 4091b9126d..389f462e0d 100644 --- a/crates/proto/src/quic/quic_socket.rs +++ b/crates/proto/src/quic/quic_socket.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt::{Debug, Formatter}; diff --git a/crates/proto/src/quic/quic_stream.rs b/crates/proto/src/quic/quic_stream.rs index 2d6ad488c4..c2de71cffb 100644 --- a/crates/proto/src/quic/quic_stream.rs +++ b/crates/proto/src/quic/quic_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use bytes::{Bytes, BytesMut}; diff --git a/crates/proto/src/quic/tests.rs b/crates/proto/src/quic/tests.rs index 41a616378e..9564d10391 100644 --- a/crates/proto/src/quic/tests.rs +++ b/crates/proto/src/quic/tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![allow(clippy::print_stdout)] // this is a test module diff --git a/crates/proto/src/rr/dns_class.rs b/crates/proto/src/rr/dns_class.rs index 1e4126226b..62c7608648 100644 --- a/crates/proto/src/rr/dns_class.rs +++ b/crates/proto/src/rr/dns_class.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! class of DNS operations, in general always IN for internet @@ -47,7 +47,7 @@ impl FromStr for DNSClass { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::dns_class::DNSClass; + /// use hickory_proto::rr::dns_class::DNSClass; /// /// let var: DNSClass = DNSClass::from_str("IN").unwrap(); /// assert_eq!(DNSClass::IN, var); @@ -69,7 +69,7 @@ impl DNSClass { /// Convert from `u16` to `DNSClass` /// /// ``` - /// use trust_dns_proto::rr::dns_class::DNSClass; + /// use hickory_proto::rr::dns_class::DNSClass; /// /// let var = DNSClass::from_u16(1).unwrap(); /// assert_eq!(DNSClass::IN, var); @@ -115,7 +115,7 @@ impl<'r> BinDecodable<'r> for DNSClass { /// Convert from `DNSClass` to `&str` /// /// ``` -/// use trust_dns_proto::rr::dns_class::DNSClass; +/// use hickory_proto::rr::dns_class::DNSClass; /// /// let var: &'static str = DNSClass::IN.into(); /// assert_eq!("IN", var); @@ -137,7 +137,7 @@ impl From for &'static str { /// Convert from `u16` to `DNSClass` /// /// ``` -/// use trust_dns_proto::rr::dns_class::DNSClass; +/// use hickory_proto::rr::dns_class::DNSClass; /// /// let var: DNSClass = 1u16.into(); /// assert_eq!(DNSClass::IN, var); @@ -158,7 +158,7 @@ impl From for DNSClass { /// Convert from `DNSClass` to `u16` /// /// ``` -/// use trust_dns_proto::rr::dns_class::DNSClass; +/// use hickory_proto::rr::dns_class::DNSClass; /// /// let var: u16 = DNSClass::IN.into(); /// assert_eq!(1, var); diff --git a/crates/proto/src/rr/dnssec/algorithm.rs b/crates/proto/src/rr/dnssec/algorithm.rs index 2da80e74cf..86a84dede5 100644 --- a/crates/proto/src/rr/dnssec/algorithm.rs +++ b/crates/proto/src/rr/dnssec/algorithm.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. // needed for the derive statements on algorithm @@ -20,7 +20,7 @@ use crate::serialize::binary::*; /// DNSSEC signing and validation algorithms. /// -/// For [reference](http://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml) +/// For [reference](https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml) /// the iana documents have all the officially registered algorithms. /// /// [RFC 6944](https://tools.ietf.org/html/rfc6944), DNSSEC DNSKEY Algorithm Status, April 2013 @@ -138,7 +138,7 @@ pub enum Algorithm { } impl Algorithm { - /// + /// pub fn from_u8(value: u8) -> Self { #[allow(deprecated)] match value { @@ -197,7 +197,7 @@ impl BinEncodable for Algorithm { } impl<'r> BinDecodable<'r> for Algorithm { - // http://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml + // https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml fn read(decoder: &mut BinDecoder<'r>) -> ProtoResult { let algorithm_id = decoder.read_u8()?.unverified(/*Algorithm is verified as safe in processing this*/); diff --git a/crates/proto/src/rr/dnssec/digest_type.rs b/crates/proto/src/rr/dnssec/digest_type.rs index fc1027e832..53a123886f 100644 --- a/crates/proto/src/rr/dnssec/digest_type.rs +++ b/crates/proto/src/rr/dnssec/digest_type.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![allow(clippy::use_self)] @@ -53,7 +53,7 @@ pub enum DigestType { impl DigestType { /// TODO: add an Unknown DigestType and make this infallible - /// + /// pub fn from_u8(value: u8) -> ProtoResult { match value { 1 => Ok(Self::SHA1), diff --git a/crates/proto/src/rr/dnssec/ec_public_key.rs b/crates/proto/src/rr/dnssec/ec_public_key.rs index 04ee360436..d3cd243bf8 100644 --- a/crates/proto/src/rr/dnssec/ec_public_key.rs +++ b/crates/proto/src/rr/dnssec/ec_public_key.rs @@ -1,8 +1,8 @@ // Copyright 2017 Brian Smith // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use super::Algorithm; diff --git a/crates/proto/src/rr/dnssec/keypair.rs b/crates/proto/src/rr/dnssec/keypair.rs index df04917486..5f23e0e0b7 100644 --- a/crates/proto/src/rr/dnssec/keypair.rs +++ b/crates/proto/src/rr/dnssec/keypair.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #[cfg(not(feature = "openssl"))] @@ -46,7 +46,7 @@ use crate::rr::Name; /// A public and private key pair, the private portion is not required. /// -/// This supports all the various public/private keys which Trust-DNS is capable of using. Given +/// This supports all the various public/private keys which Hickory DNS is capable of using. Given /// differing features, some key types may not be available. The `openssl` feature will enable RSA and EC /// (P256 and P384). The `ring` feature enables ED25519, in the future, Ring will also be used for other keys. #[allow(clippy::large_enum_variant)] diff --git a/crates/proto/src/rr/dnssec/mod.rs b/crates/proto/src/rr/dnssec/mod.rs index e4c82b08d6..03ecb22fa9 100644 --- a/crates/proto/src/rr/dnssec/mod.rs +++ b/crates/proto/src/rr/dnssec/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/rr/dnssec/nsec3.rs b/crates/proto/src/rr/dnssec/nsec3.rs index 2b83516d63..000e491876 100644 --- a/crates/proto/src/rr/dnssec/nsec3.rs +++ b/crates/proto/src/rr/dnssec/nsec3.rs @@ -6,7 +6,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -41,13 +41,13 @@ use crate::serialize::binary::{BinEncodable, BinEncoder}; /// mechanism MUST also be defined. /// /// This document updates the IANA registry "DOMAIN NAME SYSTEM -/// PARAMETERS" (http://www.iana.org/assignments/dns-parameters) in sub- +/// PARAMETERS" (https://www.iana.org/assignments/dns-parameters) in sub- /// registry "TYPES", by defining two new types. Section 3 defines the /// NSEC3 RR type 50. Section 4 defines the NSEC3PARAM RR type 51. /// /// This document updates the IANA registry "DNS SECURITY ALGORITHM /// NUMBERS -- per [RFC4035]" -/// (http://www.iana.org/assignments/dns-sec-alg-numbers). Section 2 +/// (https://www.iana.org/assignments/dns-sec-alg-numbers). Section 2 /// defines the aliases DSA-NSEC3-SHA1 (6) and RSASHA1-NSEC3-SHA1 (7) for /// respectively existing registrations DSA and RSASHA1 in combination /// with NSEC3 hash algorithm SHA1. @@ -110,7 +110,7 @@ pub enum Nsec3HashAlgorithm { } impl Nsec3HashAlgorithm { - /// + /// pub fn from_u8(value: u8) -> ProtoResult { match value { 1 => Ok(Self::SHA1), diff --git a/crates/proto/src/rr/dnssec/public_key.rs b/crates/proto/src/rr/dnssec/public_key.rs index 9bb38ed7fd..2e4668cabb 100644 --- a/crates/proto/src/rr/dnssec/public_key.rs +++ b/crates/proto/src/rr/dnssec/public_key.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Public Key implementations for supported key types diff --git a/crates/proto/src/rr/dnssec/rdata/cdnskey.rs b/crates/proto/src/rr/dnssec/rdata/cdnskey.rs index ca94c7f075..9c0a4a3b1e 100644 --- a/crates/proto/src/rr/dnssec/rdata/cdnskey.rs +++ b/crates/proto/src/rr/dnssec/rdata/cdnskey.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! CDNSKEY type and related implementations diff --git a/crates/proto/src/rr/dnssec/rdata/cds.rs b/crates/proto/src/rr/dnssec/rdata/cds.rs index 02599b70e0..13af613396 100644 --- a/crates/proto/src/rr/dnssec/rdata/cds.rs +++ b/crates/proto/src/rr/dnssec/rdata/cds.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! CDS type and related implementations diff --git a/crates/proto/src/rr/dnssec/rdata/dnskey.rs b/crates/proto/src/rr/dnssec/rdata/dnskey.rs index c34a2d46ac..b81c37b031 100644 --- a/crates/proto/src/rr/dnssec/rdata/dnskey.rs +++ b/crates/proto/src/rr/dnssec/rdata/dnskey.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! public key record data for signing zone records @@ -326,7 +326,7 @@ impl DNSKEY { /// Internal checksum function (used for non-RSAMD5 hashes only, /// however, RSAMD5 is considered deprecated and not implemented in - /// trust-dns, anyways). + /// hickory-dns, anyways). pub fn calculate_key_tag_internal(bytes: &[u8]) -> u16 { let mut ac: u32 = 0; for (i, k) in bytes.iter().enumerate() { diff --git a/crates/proto/src/rr/dnssec/rdata/ds.rs b/crates/proto/src/rr/dnssec/rdata/ds.rs index b073a4d195..4dc85301f3 100644 --- a/crates/proto/src/rr/dnssec/rdata/ds.rs +++ b/crates/proto/src/rr/dnssec/rdata/ds.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! pointer record from parent zone to child zone for dnskey proof diff --git a/crates/proto/src/rr/dnssec/rdata/key.rs b/crates/proto/src/rr/dnssec/rdata/key.rs index df3a6b41f1..3932e1f4ff 100644 --- a/crates/proto/src/rr/dnssec/rdata/key.rs +++ b/crates/proto/src/rr/dnssec/rdata/key.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! public key record data for signing zone records @@ -572,7 +572,7 @@ pub enum Protocol { /// Reserved for use with email #[deprecated = "Deprecated by RFC3445"] Email, - /// Reserved for use with DNSSEC (Trust-DNS only supports DNSKEY with DNSSEC) + /// Reserved for use with DNSSEC (Hickory DNS only supports DNSKEY with DNSSEC) DNSSEC, /// Reserved to refer to the Oakley/IPSEC #[deprecated = "Deprecated by RFC3445"] diff --git a/crates/proto/src/rr/dnssec/rdata/mod.rs b/crates/proto/src/rr/dnssec/rdata/mod.rs index a2990db29f..0d9c4fcdae 100644 --- a/crates/proto/src/rr/dnssec/rdata/mod.rs +++ b/crates/proto/src/rr/dnssec/rdata/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All record data structures and related serialization methods diff --git a/crates/proto/src/rr/dnssec/rdata/nsec.rs b/crates/proto/src/rr/dnssec/rdata/nsec.rs index f4dcaf785e..385b2f6a45 100644 --- a/crates/proto/src/rr/dnssec/rdata/nsec.rs +++ b/crates/proto/src/rr/dnssec/rdata/nsec.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! NSEC record types diff --git a/crates/proto/src/rr/dnssec/rdata/nsec3.rs b/crates/proto/src/rr/dnssec/rdata/nsec3.rs index 0167460ccb..3d547979b7 100644 --- a/crates/proto/src/rr/dnssec/rdata/nsec3.rs +++ b/crates/proto/src/rr/dnssec/rdata/nsec3.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! NSEC record types diff --git a/crates/proto/src/rr/dnssec/rdata/nsec3param.rs b/crates/proto/src/rr/dnssec/rdata/nsec3param.rs index ba3cd47601..625f1bd363 100644 --- a/crates/proto/src/rr/dnssec/rdata/nsec3param.rs +++ b/crates/proto/src/rr/dnssec/rdata/nsec3param.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! parameters used for the nsec3 hash method diff --git a/crates/proto/src/rr/dnssec/rdata/rrsig.rs b/crates/proto/src/rr/dnssec/rdata/rrsig.rs index 02700f2144..ff466bc6c4 100644 --- a/crates/proto/src/rr/dnssec/rdata/rrsig.rs +++ b/crates/proto/src/rr/dnssec/rdata/rrsig.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! RRSIG type and related implementations diff --git a/crates/proto/src/rr/dnssec/rdata/sig.rs b/crates/proto/src/rr/dnssec/rdata/sig.rs index 9735ad8a25..ea2fcf7fa1 100644 --- a/crates/proto/src/rr/dnssec/rdata/sig.rs +++ b/crates/proto/src/rr/dnssec/rdata/sig.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! signature record for signing queries, updates, and responses diff --git a/crates/proto/src/rr/dnssec/rdata/tsig.rs b/crates/proto/src/rr/dnssec/rdata/tsig.rs index b24efa2d52..1b1ea4d706 100644 --- a/crates/proto/src/rr/dnssec/rdata/tsig.rs +++ b/crates/proto/src/rr/dnssec/rdata/tsig.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TSIG for secret key authentication of transaction @@ -522,7 +522,7 @@ impl TsigAlgorithm { } } - // TODO: remove this once trust-dns-client no longer has dnssec feature enabled by default + // TODO: remove this once hickory-client no longer has dnssec feature enabled by default #[cfg(not(any(feature = "ring", feature = "openssl")))] #[doc(hidden)] #[allow(clippy::unimplemented)] @@ -576,7 +576,7 @@ impl TsigAlgorithm { signer.sign_to_vec().map_err(|e| e.into()) } - // TODO: remove this once trust-dns-client no longer has dnssec feature enabled by default + // TODO: remove this once hickory-client no longer has dnssec feature enabled by default #[cfg(not(any(feature = "ring", feature = "openssl")))] #[doc(hidden)] #[allow(clippy::unimplemented)] @@ -619,7 +619,7 @@ impl TsigAlgorithm { } } - // TODO: remove this once trust-dns-client no longer has dnssec feature enabled by default + // TODO: remove this once hickory-client no longer has dnssec feature enabled by default #[cfg(not(any(feature = "ring", feature = "openssl")))] #[doc(hidden)] #[allow(clippy::unimplemented)] diff --git a/crates/proto/src/rr/dnssec/roots/README.md b/crates/proto/src/rr/dnssec/roots/README.md index 3122235081..fa7606dfec 100644 --- a/crates/proto/src/rr/dnssec/roots/README.md +++ b/crates/proto/src/rr/dnssec/roots/README.md @@ -4,9 +4,9 @@ The process for getting the current key-signing-key, ksk, roots is by means of a ```console $ cargo run --bin get-root-ksks - Compiling trust-dns-util v0.3.0-alpha.1 (file:///Users/benjaminfry/Development/rust/trust-dns/util) + Compiling hickory-util v0.3.0-alpha.1 (file:///Users/benjaminfry/Development/rust/hickory-dns/util) Finished dev [unoptimized + debuginfo] target(s) in 6.48s - Running `/Users/benjaminfry/Development/rust/trust-dns/target/debug/get-root-ksks` + Running `/Users/benjaminfry/Development/rust/hickory-dns/target/debug/get-root-ksks` found: tag: 20326 info: DNSKEY { zone_key: true, secure_entry_point: true, revoke: false, algorithm: RSASHA256, public_key: [3, 1, 0, 1, 172, 255, 180, 9, 188, 201, 57, 248, 49, 247,161, 229, 236, 136, 247, 165, 146, 85, 236, 83, 4, 11, 228, 50, 2, 115, 144, 164, 206, 137, 109, 111, 144, 134, 243, 197, 225, 119, 251, 254, 17, 129, 99, 170, 236, 122, 241, 70, 44,71, 148, 89, 68, 196, 226, 192, 38, 190, 94, 152, 187, 205, 237, 37, 151, 130, 114, 225, 227, 224, 121, 197, 9, 77, 87, 63, 14, 131, 201, 47, 2, 179, 45, 53, 19, 177, 85, 11, 130, 105, 41, 200, 13, 208, 249, 44, 172, 150, 109, 23, 118, 159, 213, 134, 123, 100, 124, 63, 56, 2, 154, 189, 196, 129, 82, 235, 143, 32, 113, 89, 236, 197, 210, 50, 199, 193, 83, 124, 121, 244, 183, 172, 40, 255, 17, 104, 47, 33, 104, 27, 246, 214, 171, 165, 85, 3, 43, 246, 249, 240, 54, 190, 178, 170, 165, 179, 119, 141, 110, 235, 251, 166, 191, 158, 161, 145, 190, 74, 176, 202, 234, 117, 158, 47, 119, 58, 31, 144, 41, 199, 62, 203, 141, 87, 53, 185, 50, 29, 176, 133, 241, 184, 226, 216, 3, 143, 226, 148, 25, 146, 84, 140, 238, 13, 103, 221, 69, 71, 225, 29, 214, 58, 249, 201, 252, 28, 84, 102, 251, 104, 76, 240, 9, 215, 25, 124, 44, 247, 158, 121, 42, 181, 1, 230, 168, 161, 202, 81, 154, 242, 203, 155, 95, 99, 103, 233, 76, 13, 71, 80, 36, 81, 53, 123, 225, 181] } found: tag: 19036 info: DNSKEY { zone_key: true, secure_entry_point: true, revoke: false, algorithm: RSASHA256, public_key: [3, 1, 0, 1, 168, 0, 32, 169, 85, 102, 186, 66, 232, 134, 187, 128, 76, 218, 132, 228, 126, 245, 109, 189, 122, 236, 97, 38, 21, 85, 44, 236, 144, 109, 33, 22, 208, 239, 32, 112, 40, 197, 21, 84, 20, 77, 254, 175, 231, 199, 203, 143, 0, 93, 209, 130, 52, 19, 58, 192, 113, 10, 129, 24, 44, 225, 253, 20, 173, 34, 131, 188, 131, 67, 95, 157, 242, 246, 49, 50, 81, 147, 26, 23, 109, 240, 218, 81, 229, 79, 66, 230, 4, 134, 13,251, 53, 149, 128, 37, 15, 85, 156, 197, 67, 196, 255, 213, 28, 190, 61, 232, 207, 208, 103, 25, 35, 127, 159, 196, 126, 231, 41, 218, 6, 131, 95, 164, 82, 232, 37, 233, 161, 142, 188, 46, 203, 207, 86, 52, 116, 101, 44, 51, 207, 86, 169, 3, 59, 205, 245, 217, 115, 18, 23, 151, 236, 128, 137, 4, 27, 110, 3, 161, 183, 45, 10, 115, 91, 152, 78, 3, 104, 115, 9, 51, 35, 36, 242, 124, 45, 186, 133, 233, 219, 21, 232, 58, 1, 67, 56, 46, 151, 75, 6, 33, 193, 142, 98, 94, 206, 201, 7, 87, 125, 158, 123, 173, 233, 82, 65, 168, 30, 187, 232, 169, 1, 212, 211, 39, 110, 64, 177, 20, 192, 162, 230, 252, 56, 209, 156, 46, 106, 171, 2, 100, 75, 40, 19, 245, 117, 252, 33, 96, 30, 13, 238, 73, 205, 158, 233, 106, 67, 16, 62, 82, 77, 98, 135, 61] } ``` diff --git a/crates/proto/src/rr/dnssec/rsa_public_key.rs b/crates/proto/src/rr/dnssec/rsa_public_key.rs index 797c8f002e..d7ba2a423e 100644 --- a/crates/proto/src/rr/dnssec/rsa_public_key.rs +++ b/crates/proto/src/rr/dnssec/rsa_public_key.rs @@ -1,8 +1,8 @@ // Copyright 2017 Brian Smith // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use crate::error::*; diff --git a/crates/proto/src/rr/dnssec/signer.rs b/crates/proto/src/rr/dnssec/signer.rs index f4fa578a8b..a30560f6ce 100644 --- a/crates/proto/src/rr/dnssec/signer.rs +++ b/crates/proto/src/rr/dnssec/signer.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! signer is a structure for performing many of the signing processes of the DNSSEC specification @@ -793,7 +793,7 @@ MC0CAQACBQC+L6pNAgMBAAECBQCYj0ZNAgMA9CsCAwDHZwICeEUCAnE/AgMA3u0= assert_eq!(key_tag, 28551); } - // TODO: these tests technically came from TBS in trust_dns_proto + // TODO: these tests technically came from TBS in hickory_proto #[cfg(feature = "openssl")] #[allow(clippy::module_inception)] #[cfg(test)] diff --git a/crates/proto/src/rr/dnssec/supported_algorithm.rs b/crates/proto/src/rr/dnssec/supported_algorithm.rs index 7e06bb94b4..52c356a913 100644 --- a/crates/proto/src/rr/dnssec/supported_algorithm.rs +++ b/crates/proto/src/rr/dnssec/supported_algorithm.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/rr/dnssec/tbs.rs b/crates/proto/src/rr/dnssec/tbs.rs index 93d4ef5361..f87bf38322 100644 --- a/crates/proto/src/rr/dnssec/tbs.rs +++ b/crates/proto/src/rr/dnssec/tbs.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! hash functions for DNSSEC operations diff --git a/crates/proto/src/rr/dnssec/trust_anchor.rs b/crates/proto/src/rr/dnssec/trust_anchor.rs index bf7c40577b..1c33e638b7 100644 --- a/crates/proto/src/rr/dnssec/trust_anchor.rs +++ b/crates/proto/src/rr/dnssec/trust_anchor.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/rr/dnssec/tsig.rs b/crates/proto/src/rr/dnssec/tsig.rs index 8f057cbf93..7a15d4552a 100644 --- a/crates/proto/src/rr/dnssec/tsig.rs +++ b/crates/proto/src/rr/dnssec/tsig.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Trust dns implementation of Secret Key Transaction Authentication for DNS (TSIG) @@ -145,7 +145,7 @@ impl TSigner { // this is to be pedantic about constant time HMAC validation (prevent timing attacks) as well as any security // concerns about MAC truncation and collisions. if tsig.mac().len() < tsig.algorithm().output_len()? { - return Err(ProtoError::from("Please file an issue with https://github.com/bluejekyll/trust-dns to support truncated HMACs with TSIG")); + return Err(ProtoError::from("Please file an issue with https://github.com/hickory-dns/hickory-dns to support truncated HMACs with TSIG")); } // verify the MAC diff --git a/crates/proto/src/rr/dnssec/verifier.rs b/crates/proto/src/rr/dnssec/verifier.rs index 153b618b80..3c0ffe08da 100644 --- a/crates/proto/src/rr/dnssec/verifier.rs +++ b/crates/proto/src/rr/dnssec/verifier.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Verifier is a structure for performing many of the signing processes of the DNSSEC specification diff --git a/crates/proto/src/rr/domain/label.rs b/crates/proto/src/rr/domain/label.rs index 661d4d3a7c..039e8f4081 100644 --- a/crates/proto/src/rr/domain/label.rs +++ b/crates/proto/src/rr/domain/label.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Labels are used as the internal components of a Name. diff --git a/crates/proto/src/rr/domain/mod.rs b/crates/proto/src/rr/domain/mod.rs index 227da4c8ef..687002f91c 100644 --- a/crates/proto/src/rr/domain/mod.rs +++ b/crates/proto/src/rr/domain/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Domain name associated types, such as Name and Label. diff --git a/crates/proto/src/rr/domain/name.rs b/crates/proto/src/rr/domain/name.rs index 2d1f3c105f..e314bb34ef 100644 --- a/crates/proto/src/rr/domain/name.rs +++ b/crates/proto/src/rr/domain/name.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! domain name, aka labels, implementation @@ -63,7 +63,7 @@ impl Name { /// # Examples /// /// ``` - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let root = Name::root(); /// assert_eq!(&root.to_string(), "."); @@ -83,7 +83,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let name = Name::from_str("www").unwrap(); /// assert!(!name.is_fqdn()); @@ -120,7 +120,7 @@ impl Name { /// /// ```rust /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let name = Name::from_str("www.example").unwrap(); /// let name = name.append_label("com").unwrap(); @@ -141,7 +141,7 @@ impl Name { /// /// ```rust /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// // From strings, uses utf8 conversion /// let from_labels = Name::from_labels(vec!["www", "example", "com"]).unwrap(); @@ -192,7 +192,7 @@ impl Name { /// /// ```rust /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let local = Name::from_str("www").unwrap(); /// let domain = Name::from_str("example.com").unwrap(); @@ -227,7 +227,7 @@ impl Name { /// /// ```rust /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let local = Name::from_str("www").unwrap(); /// let domain = Name::from_str("example.com").unwrap(); @@ -249,7 +249,7 @@ impl Name { /// use std::cmp::Ordering; /// use std::str::FromStr; /// - /// use trust_dns_proto::rr::domain::{Label, Name}; + /// use hickory_proto::rr::domain::{Label, Name}; /// /// let example_com = Name::from_ascii("Example.Com").unwrap(); /// assert_eq!(example_com.cmp_case(&Name::from_str("example.com").unwrap()), Ordering::Less); @@ -274,7 +274,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let example_com = Name::from_str("example.com.").unwrap(); /// assert_eq!(example_com.base_name(), Name::from_str("com.").unwrap()); @@ -295,7 +295,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let example_com = Name::from_str("example.com.").unwrap(); /// assert_eq!(example_com.trim_to(2), Name::from_str("example.com.").unwrap()); @@ -346,7 +346,7 @@ impl Name { /// /// ```rust /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let name = Name::from_str("www.example.com").unwrap(); /// let name = Name::from_str("www.example.com").unwrap(); @@ -369,7 +369,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let root = Name::root(); /// assert_eq!(root.num_labels(), 0); @@ -400,7 +400,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// assert_eq!(Name::from_str("www.example.com.").unwrap().len(), 16); /// assert_eq!(Name::from_str(".").unwrap().len(), 1); @@ -427,7 +427,7 @@ impl Name { /// /// ```rust /// use std::str::FromStr; - /// use trust_dns_proto::rr::domain::Name; + /// use hickory_proto::rr::domain::Name; /// /// let name = Name::from_str("example.com.").unwrap(); /// assert_eq!(name.base_name(), Name::from_str("com.").unwrap()); @@ -444,7 +444,7 @@ impl Name { /// # Examples /// /// ``` - /// use trust_dns_proto::rr::Name; + /// use hickory_proto::rr::Name; /// /// let bytes_name = Name::from_labels(vec!["WWW".as_bytes(), "example".as_bytes(), "COM".as_bytes()]).unwrap(); /// let ascii_name = Name::from_ascii("WWW.example.COM.").unwrap(); @@ -477,7 +477,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::Name; + /// use hickory_proto::rr::Name; /// /// let bytes_name = Name::from_labels(vec!["WWW".as_bytes(), "example".as_bytes(), "COM".as_bytes()]).unwrap(); /// @@ -499,7 +499,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::Name; + /// use hickory_proto::rr::Name; /// /// // Ok, underscore in the beginning of a name /// assert!(Name::from_utf8("_allows.example.com.").is_ok()); @@ -814,7 +814,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::Name; + /// use hickory_proto::rr::Name; /// /// let name = Name::from_str("localhost").unwrap(); /// assert!(name.is_localhost()); @@ -835,7 +835,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::Name; + /// use hickory_proto::rr::Name; /// /// let name = Name::from_str("www.example.com").unwrap(); /// assert!(!name.is_wildcard()); @@ -856,7 +856,7 @@ impl Name { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::Name; + /// use hickory_proto::rr::Name; /// /// let name = Name::from_str("www.example.com").unwrap().into_wildcard(); /// assert_eq!(name, Name::from_str("*.example.com.").unwrap()); @@ -1885,7 +1885,7 @@ mod tests { #[test] fn test_name_too_long_with_append() { - // from https://github.com/bluejekyll/trust-dns/issues/1447 + // from https://github.com/hickory-dns/hickory-dns/issues/1447 let n = Name::from_ascii("Llocainvannnnnnaxgtezqzqznnnnnn1na.nnntnninvannnnnnaxgtezqzqznnnnnn1na.nnntnnnnnnnaxgtezqzqznnnnnn1na.nnntnaaaaaaaaaaaaaaaaaaaaaaaaiK.iaaaaaaaaaaaaaaaaaaaaaaaaiKa.innnnnaxgtezqzqznnnnnn1na.nnntnaaaaaaaaaaaaaaaaaaaaaaaaiK.iaaaaaaaaaaaaaaaaaaaaaaaaiKa.in").unwrap(); let sfx = Name::from_ascii("xxxxxxx.yyyyy.zzz").unwrap(); diff --git a/crates/proto/src/rr/domain/try_parse_ip.rs b/crates/proto/src/rr/domain/try_parse_ip.rs index 93c4ec6bbd..d4f0c22200 100644 --- a/crates/proto/src/rr/domain/try_parse_ip.rs +++ b/crates/proto/src/rr/domain/try_parse_ip.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::net::IpAddr; diff --git a/crates/proto/src/rr/domain/usage.rs b/crates/proto/src/rr/domain/usage.rs index 38c1223ada..e75a465f7b 100644 --- a/crates/proto/src/rr/domain/usage.rs +++ b/crates/proto/src/rr/domain/usage.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Reserved zone names. diff --git a/crates/proto/src/rr/lower_name.rs b/crates/proto/src/rr/lower_name.rs index ddaea87627..c75220bd12 100644 --- a/crates/proto/src/rr/lower_name.rs +++ b/crates/proto/src/rr/lower_name.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! domain name, aka labels, implementation @@ -38,7 +38,7 @@ impl LowerName { /// # Examples /// /// ``` - /// use trust_dns_proto::rr::{LowerName, Name}; + /// use hickory_proto::rr::{LowerName, Name}; /// /// let root = LowerName::from(Name::root()); /// assert_eq!(&root.to_string(), "."); @@ -58,7 +58,7 @@ impl LowerName { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::{LowerName, Name}; + /// use hickory_proto::rr::{LowerName, Name}; /// /// let name = LowerName::from(Name::from_str("www").unwrap()); /// assert!(!name.is_fqdn()); @@ -79,7 +79,7 @@ impl LowerName { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::{LowerName, Name}; + /// use hickory_proto::rr::{LowerName, Name}; /// /// let example_com = LowerName::from(Name::from_str("example.com").unwrap()); /// assert_eq!(example_com.base_name(), LowerName::from(Name::from_str("com.").unwrap())); @@ -96,7 +96,7 @@ impl LowerName { /// /// ```rust /// use std::str::FromStr; - /// use trust_dns_proto::rr::{LowerName, Name}; + /// use hickory_proto::rr::{LowerName, Name}; /// /// let name = LowerName::from(Name::from_str("www.example.com").unwrap()); /// let zone = LowerName::from(Name::from_str("example.com").unwrap()); @@ -114,7 +114,7 @@ impl LowerName { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::{LowerName, Name}; + /// use hickory_proto::rr::{LowerName, Name}; /// /// let root = LowerName::from(Name::root()); /// assert_eq!(root.num_labels(), 0); diff --git a/crates/proto/src/rr/mod.rs b/crates/proto/src/rr/mod.rs index 4e004f746b..09c0b5119f 100644 --- a/crates/proto/src/rr/mod.rs +++ b/crates/proto/src/rr/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Resource record related components, e.g. `Name` aka label, `Record`, `RData`, ... diff --git a/crates/proto/src/rr/rdata/a.rs b/crates/proto/src/rr/rdata/a.rs index 29b265cf5d..e75fa2686e 100644 --- a/crates/proto/src/rr/rdata/a.rs +++ b/crates/proto/src/rr/rdata/a.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! IPv4 address record data diff --git a/crates/proto/src/rr/rdata/aaaa.rs b/crates/proto/src/rr/rdata/aaaa.rs index 5e84ca0182..6c32ff38c1 100644 --- a/crates/proto/src/rr/rdata/aaaa.rs +++ b/crates/proto/src/rr/rdata/aaaa.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! IPv6 address record data diff --git a/crates/proto/src/rr/rdata/caa.rs b/crates/proto/src/rr/rdata/caa.rs index 6d8fc3dfc3..d859227e71 100644 --- a/crates/proto/src/rr/rdata/caa.rs +++ b/crates/proto/src/rr/rdata/caa.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! allows a DNS domain name holder to specify one or more Certification @@ -91,7 +91,7 @@ use crate::{ /// $ORIGIN example.com /// . CAA 0 issue "ca.example.net" /// . CAA 0 iodef "mailto:security@example.com" -/// . CAA 0 iodef "http://iodef.example.com/" +/// . CAA 0 iodef "https://iodef.example.com/" /// /// A certificate issuer MAY specify additional parameters that allow /// customers to specify additional parameters governing certificate @@ -242,7 +242,7 @@ pub enum Property { /// policy violation. The Incident Object Description Exchange Format /// (IODEF) format is used [RFC7970](https://www.rfc-editor.org/rfc/rfc7970). Iodef, - /// Unknown format to Trust-DNS + /// Unknown format to Hickory DNS Unknown(String), } @@ -272,7 +272,7 @@ impl Property { matches!(*self, Self::Iodef) } - /// true if the property is not known to Trust-DNS + /// true if the property is not known to Hickory DNS pub fn is_unknown(&self) -> bool { matches!(*self, Self::Unknown(_)) } @@ -308,7 +308,7 @@ pub enum Value { Issuer(Option, Vec), /// Url to which to send CA errors Url(Url), - /// Unrecognized tag and value by Trust-DNS + /// Unrecognized tag and value by Hickory DNS Unknown(Vec), } @@ -1041,8 +1041,8 @@ mod tests { Url::parse("mailto:security@example.com").unwrap() ); assert_eq!( - read_iodef(b"http://iodef.example.com/").unwrap(), - Url::parse("http://iodef.example.com/").unwrap() + read_iodef(b"https://iodef.example.com/").unwrap(), + Url::parse("https://iodef.example.com/").unwrap() ); } @@ -1097,7 +1097,7 @@ mod tests { fn test_encode_decode_iodef() { test_encode_decode(CAA::new_iodef( true, - Url::parse("http://www.example.com").unwrap(), + Url::parse("https://www.example.com").unwrap(), )); test_encode_decode(CAA::new_iodef( false, @@ -1215,8 +1215,8 @@ mod tests { "0 iodef \"mailto:security@example.com\"" ); assert_eq!( - CAA::new_iodef(false, Url::parse("http://iodef.example.com/").unwrap()).to_string(), - "0 iodef \"http://iodef.example.com/\"" + CAA::new_iodef(false, Url::parse("https://iodef.example.com/").unwrap()).to_string(), + "0 iodef \"https://iodef.example.com/\"" ); let unknown = CAA { issuer_critical: true, diff --git a/crates/proto/src/rr/rdata/csync.rs b/crates/proto/src/rr/rdata/csync.rs index dee5aa0114..e269634cdf 100644 --- a/crates/proto/src/rr/rdata/csync.rs +++ b/crates/proto/src/rr/rdata/csync.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! CSYNC record for synchronizing data from a child zone to the parent diff --git a/crates/proto/src/rr/rdata/hinfo.rs b/crates/proto/src/rr/rdata/hinfo.rs index 3b59d76d80..ddc0d295cc 100644 --- a/crates/proto/src/rr/rdata/hinfo.rs +++ b/crates/proto/src/rr/rdata/hinfo.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HINFO record for storing host information diff --git a/crates/proto/src/rr/rdata/https.rs b/crates/proto/src/rr/rdata/https.rs index 82a4a7fe5a..7a4da652df 100644 --- a/crates/proto/src/rr/rdata/https.rs +++ b/crates/proto/src/rr/rdata/https.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HTTPS type and related implementations diff --git a/crates/proto/src/rr/rdata/mod.rs b/crates/proto/src/rr/rdata/mod.rs index fc7f6997bb..a0109f4205 100644 --- a/crates/proto/src/rr/rdata/mod.rs +++ b/crates/proto/src/rr/rdata/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All record data structures and related serialization methods diff --git a/crates/proto/src/rr/rdata/mx.rs b/crates/proto/src/rr/rdata/mx.rs index 7b3fae25f8..01a1aa2685 100644 --- a/crates/proto/src/rr/rdata/mx.rs +++ b/crates/proto/src/rr/rdata/mx.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! mail exchange, email, record diff --git a/crates/proto/src/rr/rdata/name.rs b/crates/proto/src/rr/rdata/name.rs index ec1ec78bdb..cf7328c4e8 100644 --- a/crates/proto/src/rr/rdata/name.rs +++ b/crates/proto/src/rr/rdata/name.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Record type for all cname like records. diff --git a/crates/proto/src/rr/rdata/naptr.rs b/crates/proto/src/rr/rdata/naptr.rs index 28358d9667..9a6486761c 100644 --- a/crates/proto/src/rr/rdata/naptr.rs +++ b/crates/proto/src/rr/rdata/naptr.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Dynamic Delegation Discovery System diff --git a/crates/proto/src/rr/rdata/null.rs b/crates/proto/src/rr/rdata/null.rs index cd198d5732..d5331a7c35 100644 --- a/crates/proto/src/rr/rdata/null.rs +++ b/crates/proto/src/rr/rdata/null.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! null record type, generally not used except as an internal tool for representing null data diff --git a/crates/proto/src/rr/rdata/openpgpkey.rs b/crates/proto/src/rr/rdata/openpgpkey.rs index 38290ce2bd..84e082ed57 100644 --- a/crates/proto/src/rr/rdata/openpgpkey.rs +++ b/crates/proto/src/rr/rdata/openpgpkey.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! OPENPGPKEY records for OpenPGP public keys diff --git a/crates/proto/src/rr/rdata/opt.rs b/crates/proto/src/rr/rdata/opt.rs index be7dc10265..fbf9992913 100644 --- a/crates/proto/src/rr/rdata/opt.rs +++ b/crates/proto/src/rr/rdata/opt.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! option record for passing protocol options between the client and server @@ -354,7 +354,7 @@ pub enum EdnsCode { /// [RFC 8764l, Apple's Long-Lived Queries, Optional](https://tools.ietf.org/html/rfc8764) LLQ, - /// [UL On-hold](http://files.dns-sd.org/draft-sekar-dns-ul.txt) + /// [UL On-hold](https://files.dns-sd.org/draft-sekar-dns-ul.txt) UL, /// [RFC 5001, NSID](https://tools.ietf.org/html/rfc5001) @@ -440,7 +440,7 @@ impl From for u16 { /// /// `note: Not all EdnsOptions are supported at this time.` /// -/// +/// #[cfg_attr(feature = "serde-config", derive(Deserialize, Serialize))] #[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Hash)] #[non_exhaustive] diff --git a/crates/proto/src/rr/rdata/soa.rs b/crates/proto/src/rr/rdata/soa.rs index 63d7735cf4..eb91e2e81a 100644 --- a/crates/proto/src/rr/rdata/soa.rs +++ b/crates/proto/src/rr/rdata/soa.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! start of authority record defining ownership and defaults for the zone diff --git a/crates/proto/src/rr/rdata/srv.rs b/crates/proto/src/rr/rdata/srv.rs index be0f9959bd..25c7c199e5 100644 --- a/crates/proto/src/rr/rdata/srv.rs +++ b/crates/proto/src/rr/rdata/srv.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! service records for identify port mapping for specific services on a host diff --git a/crates/proto/src/rr/rdata/sshfp.rs b/crates/proto/src/rr/rdata/sshfp.rs index fab5f02448..25e41dc880 100644 --- a/crates/proto/src/rr/rdata/sshfp.rs +++ b/crates/proto/src/rr/rdata/sshfp.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! SSHFP records for SSH public key fingerprints diff --git a/crates/proto/src/rr/rdata/svcb.rs b/crates/proto/src/rr/rdata/svcb.rs index 0738ef4387..cb53aef9c4 100644 --- a/crates/proto/src/rr/rdata/svcb.rs +++ b/crates/proto/src/rr/rdata/svcb.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! SVCB records, see [draft-ietf-dnsop-svcb-https-03 SVCB and HTTPS RRs for DNS, February 2021](https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-03) @@ -859,7 +859,7 @@ impl BinEncodable for EchConfig { impl fmt::Display for EchConfig { /// As the documentation states, the presentation format (what this function outputs) must be a BASE64 encoded string. - /// trust-dns will encode to BASE64 during formatting of the internal data, and output the BASE64 value. + /// hickory-dns will encode to BASE64 during formatting of the internal data, and output the BASE64 value. /// /// [draft-ietf-dnsop-svcb-https-03 SVCB and HTTPS RRs for DNS, February 2021](https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-03#section-9) /// ```text @@ -871,7 +871,7 @@ impl fmt::Display for EchConfig { /// /// *note* while the on the wire the EchConfig has a redundant length, /// the RFC is not explicit about including it in the BASE64 encoded value, - /// trust-dns will encode the data as it is stored, i.e. without the length encoding. + /// hickory-dns will encode the data as it is stored, i.e. without the length encoding. fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { write!(f, "\"{}\"", data_encoding::BASE64.encode(&self.0)) } diff --git a/crates/proto/src/rr/rdata/tlsa.rs b/crates/proto/src/rr/rdata/tlsa.rs index df27184fc9..55690a6875 100644 --- a/crates/proto/src/rr/rdata/tlsa.rs +++ b/crates/proto/src/rr/rdata/tlsa.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TLSA records for storing TLS certificate validation information diff --git a/crates/proto/src/rr/rdata/txt.rs b/crates/proto/src/rr/rdata/txt.rs index 50e3ed568e..9ce29e9d5d 100644 --- a/crates/proto/src/rr/rdata/txt.rs +++ b/crates/proto/src/rr/rdata/txt.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! text records for storing arbitrary data @@ -152,7 +152,7 @@ impl fmt::Display for TXT { /// /// Same behaviour as `alloc::string::String::from_utf8_lossy`. /// ```rust - /// # use trust_dns_proto::rr::rdata::TXT; + /// # use hickory_proto::rr::rdata::TXT; /// let first_bytes = b"Invalid utf8 <\xF0\x90\x80>."; /// let second_bytes = b" Valid utf8 <\xF0\x9F\xA4\xA3>"; /// let rdata: Vec<&[u8]> = vec![first_bytes, second_bytes]; diff --git a/crates/proto/src/rr/record_data.rs b/crates/proto/src/rr/record_data.rs index 9c91098b9d..af8d2c0a33 100644 --- a/crates/proto/src/rr/record_data.rs +++ b/crates/proto/src/rr/record_data.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! record data enum variants @@ -683,7 +683,7 @@ pub enum RData { #[cfg_attr(docsrs, doc(cfg(feature = "dnssec")))] DNSSEC(DNSSECRData), - /// Unknown RecordData is for record types not supported by Trust-DNS + /// Unknown RecordData is for record types not supported by Hickory DNS Unknown { /// RecordType code code: RecordType, diff --git a/crates/proto/src/rr/record_type.rs b/crates/proto/src/rr/record_type.rs index 9e64094b2c..feefb37fa0 100644 --- a/crates/proto/src/rr/record_type.rs +++ b/crates/proto/src/rr/record_type.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! record type definitions @@ -190,7 +190,7 @@ impl FromStr for RecordType { /// /// ``` /// use std::str::FromStr; - /// use trust_dns_proto::rr::record_type::RecordType; + /// use hickory_proto::rr::record_type::RecordType; /// /// let var: RecordType = RecordType::from_str("A").unwrap(); /// assert_eq!(RecordType::A, var); @@ -241,7 +241,7 @@ impl From for RecordType { /// Convert from `u16` to `RecordType` /// /// ``` - /// use trust_dns_proto::rr::record_type::RecordType; + /// use hickory_proto::rr::record_type::RecordType; /// /// let var = RecordType::from(1); /// assert_eq!(RecordType::A, var); @@ -250,7 +250,7 @@ impl From for RecordType { match value { 1 => Self::A, 28 => Self::AAAA, - // TODO: wrong value here, see https://github.com/bluejekyll/trust-dns/issues/723 + // TODO: wrong value here, see https://github.com/hickory-dns/hickory-dns/issues/723 65305 => Self::ANAME, 255 => Self::ANY, 251 => Self::IXFR, @@ -313,7 +313,7 @@ impl<'r> BinDecodable<'r> for RecordType { /// Convert from `RecordType` to `&str` /// /// ``` -/// use trust_dns_proto::rr::record_type::RecordType; +/// use hickory_proto::rr::record_type::RecordType; /// /// let var: &'static str = From::from(RecordType::A); /// assert_eq!("A", var); @@ -368,7 +368,7 @@ impl From for &'static str { /// Convert from `RecordType` to `u16` /// /// ``` -/// use trust_dns_proto::rr::record_type::RecordType; +/// use hickory_proto::rr::record_type::RecordType; /// /// let var: u16 = RecordType::A.into(); /// assert_eq!(1, var); @@ -378,7 +378,7 @@ impl From for u16 { match rt { RecordType::A => 1, RecordType::AAAA => 28, - // TODO: wrong value here, see https://github.com/bluejekyll/trust-dns/issues/723 + // TODO: wrong value here, see https://github.com/hickory-dns/hickory-dns/issues/723 RecordType::ANAME => 65305, RecordType::ANY => 255, RecordType::AXFR => 252, diff --git a/crates/proto/src/rr/resource.rs b/crates/proto/src/rr/resource.rs index 2652ccd292..88d2b93bb8 100644 --- a/crates/proto/src/rr/resource.rs +++ b/crates/proto/src/rr/resource.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! resource record implementation diff --git a/crates/proto/src/rr/rr_key.rs b/crates/proto/src/rr/rr_key.rs index 4f7c055a23..fdd9389dea 100644 --- a/crates/proto/src/rr/rr_key.rs +++ b/crates/proto/src/rr/rr_key.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::cmp::Ordering; diff --git a/crates/proto/src/rr/rr_set.rs b/crates/proto/src/rr/rr_set.rs index 8dbbe2a178..03d7b1f094 100644 --- a/crates/proto/src/rr/rr_set.rs +++ b/crates/proto/src/rr/rr_set.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{iter::Chain, slice::Iter, vec}; diff --git a/crates/proto/src/rr/type_bit_map.rs b/crates/proto/src/rr/type_bit_map.rs index b11a731e0f..434cc7c7d0 100644 --- a/crates/proto/src/rr/type_bit_map.rs +++ b/crates/proto/src/rr/type_bit_map.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! type bit map helper definitions diff --git a/crates/proto/src/rustls/mod.rs b/crates/proto/src/rustls/mod.rs index 0f681b6c59..ca95af9dff 100644 --- a/crates/proto/src/rustls/mod.rs +++ b/crates/proto/src/rustls/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TLS protocol related components for DNS over TLS diff --git a/crates/proto/src/rustls/tests.rs b/crates/proto/src/rustls/tests.rs index db96752d4c..e310d96cd2 100644 --- a/crates/proto/src/rustls/tests.rs +++ b/crates/proto/src/rustls/tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![allow(clippy::dbg_macro, clippy::print_stdout)] diff --git a/crates/proto/src/rustls/tls_client_stream.rs b/crates/proto/src/rustls/tls_client_stream.rs index d4c4ae1265..552309f03d 100644 --- a/crates/proto/src/rustls/tls_client_stream.rs +++ b/crates/proto/src/rustls/tls_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! DNS over TLS client implementation for Rustls diff --git a/crates/proto/src/rustls/tls_server.rs b/crates/proto/src/rustls/tls_server.rs index 2886ad2cf4..6bb49e820f 100644 --- a/crates/proto/src/rustls/tls_server.rs +++ b/crates/proto/src/rustls/tls_server.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! DNS over TLS server implementation for Rustls diff --git a/crates/proto/src/rustls/tls_stream.rs b/crates/proto/src/rustls/tls_stream.rs index d8601258df..3b993f5b88 100644 --- a/crates/proto/src/rustls/tls_stream.rs +++ b/crates/proto/src/rustls/tls_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! DNS over TLS I/O stream implementation for Rustls diff --git a/crates/proto/src/serialize/binary/bin_tests.rs b/crates/proto/src/serialize/binary/bin_tests.rs index 485622d2c2..8de1d352b2 100644 --- a/crates/proto/src/serialize/binary/bin_tests.rs +++ b/crates/proto/src/serialize/binary/bin_tests.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/binary/decoder.rs b/crates/proto/src/serialize/binary/decoder.rs index d0af27eaa4..1437799333 100644 --- a/crates/proto/src/serialize/binary/decoder.rs +++ b/crates/proto/src/serialize/binary/decoder.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -102,7 +102,7 @@ impl<'a> BinDecoder<'a> { /// Returns the number of bytes in the buffer /// /// ``` - /// use trust_dns_proto::serialize::binary::BinDecoder; + /// use hickory_proto::serialize::binary::BinDecoder; /// /// let deadbeef = b"deadbeef"; /// let mut decoder = BinDecoder::new(deadbeef); diff --git a/crates/proto/src/serialize/binary/encoder.rs b/crates/proto/src/serialize/binary/encoder.rs index c54894bb12..d8f88995c5 100644 --- a/crates/proto/src/serialize/binary/encoder.rs +++ b/crates/proto/src/serialize/binary/encoder.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::marker::PhantomData; @@ -273,7 +273,7 @@ impl<'a> BinEncoder<'a> { /// matches description from above. /// /// ``` - /// use trust_dns_proto::serialize::binary::BinEncoder; + /// use hickory_proto::serialize::binary::BinEncoder; /// /// let mut bytes: Vec = Vec::new(); /// { @@ -506,7 +506,7 @@ mod tests { #[test] fn test_label_compression_regression() { - // https://github.com/bluejekyll/trust-dns/issues/339 + // https://github.com/hickory-dns/hickory-dns/issues/339 /* ;; QUESTION SECTION: ;bluedot.is.autonavi.com.gds.alibabadns.com. IN AAAA diff --git a/crates/proto/src/serialize/binary/mod.rs b/crates/proto/src/serialize/binary/mod.rs index 988f270a35..93c2ccbfa1 100644 --- a/crates/proto/src/serialize/binary/mod.rs +++ b/crates/proto/src/serialize/binary/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Binary serialization types diff --git a/crates/proto/src/serialize/binary/restrict.rs b/crates/proto/src/serialize/binary/restrict.rs index 54e7c30d4c..159ffed04c 100644 --- a/crates/proto/src/serialize/binary/restrict.rs +++ b/crates/proto/src/serialize/binary/restrict.rs @@ -14,7 +14,7 @@ impl Restrict { /// It is the responsibility of this function to verify the contained type is valid. /// /// ``` - /// use trust_dns_proto::serialize::binary::Restrict; + /// use hickory_proto::serialize::binary::Restrict; /// /// let unrestricted = Restrict::new(0).verify(|r| *r == 0).then(|r| *r + 1).unwrap(); /// assert!(unrestricted == 1); @@ -35,7 +35,7 @@ impl Restrict { /// It is the responsibility of this function to verify the contained type is valid. /// /// ``` - /// use trust_dns_proto::serialize::binary::Restrict; + /// use hickory_proto::serialize::binary::Restrict; /// /// let unrestricted = Restrict::new(0).verify_unwrap(|r| *r == 0).unwrap(); /// assert!(unrestricted == 0); @@ -63,7 +63,7 @@ impl Restrict { /// Map the internal type of the restriction /// /// ``` - /// use trust_dns_proto::serialize::binary::Restrict; + /// use hickory_proto::serialize::binary::Restrict; /// /// let restricted = Restrict::new(0).map(|b| vec![b, 1]); /// assert!(restricted.verify(|v| v == &[0, 1]).is_valid()); diff --git a/crates/proto/src/serialize/mod.rs b/crates/proto/src/serialize/mod.rs index 8388db72fe..67cf90229c 100644 --- a/crates/proto/src/serialize/mod.rs +++ b/crates/proto/src/serialize/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/errors.rs b/crates/proto/src/serialize/txt/errors.rs index ad0cfff433..c7686f08ae 100644 --- a/crates/proto/src/serialize/txt/errors.rs +++ b/crates/proto/src/serialize/txt/errors.rs @@ -65,7 +65,7 @@ pub enum ParseErrorKind { #[error("error parsing number: {0}")] ParseInt(#[from] std::num::ParseIntError), - /// An error got returned by the trust-dns-proto crate + /// An error got returned by the hickory-proto crate #[error("proto error: {0}")] Proto(#[from] ProtoError), diff --git a/crates/proto/src/serialize/txt/mod.rs b/crates/proto/src/serialize/txt/mod.rs index 820b3f3745..88d4dccc76 100644 --- a/crates/proto/src/serialize/txt/mod.rs +++ b/crates/proto/src/serialize/txt/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/parse_rdata.rs b/crates/proto/src/serialize/txt/parse_rdata.rs index 2b426fde6b..f408198d59 100644 --- a/crates/proto/src/serialize/txt/parse_rdata.rs +++ b/crates/proto/src/serialize/txt/parse_rdata.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! record data enum variants diff --git a/crates/proto/src/serialize/txt/rdata_parsers/a.rs b/crates/proto/src/serialize/txt/rdata_parsers/a.rs index 48e0257277..4cd17dd61a 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/a.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/a.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/aaaa.rs b/crates/proto/src/serialize/txt/rdata_parsers/aaaa.rs index f382456549..28439cef69 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/aaaa.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/aaaa.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/caa.rs b/crates/proto/src/serialize/txt/rdata_parsers/caa.rs index a6a4d54180..3bbde80ba1 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/caa.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/caa.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/csync.rs b/crates/proto/src/serialize/txt/rdata_parsers/csync.rs index a64a311343..75c7f79399 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/csync.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/csync.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! CSYNC record for synchronizing information to the parent zone diff --git a/crates/proto/src/serialize/txt/rdata_parsers/hinfo.rs b/crates/proto/src/serialize/txt/rdata_parsers/hinfo.rs index 5f67519d67..3712f1b4ec 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/hinfo.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/hinfo.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! HINFO record for storing host information diff --git a/crates/proto/src/serialize/txt/rdata_parsers/mod.rs b/crates/proto/src/serialize/txt/rdata_parsers/mod.rs index 74c1884137..e9ad7bd9ea 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/mod.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/mx.rs b/crates/proto/src/serialize/txt/rdata_parsers/mx.rs index 87972687e1..2321d18d51 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/mx.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/mx.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/name.rs b/crates/proto/src/serialize/txt/rdata_parsers/name.rs index bde5f71f1f..f1b07dfd56 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/name.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/name.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/naptr.rs b/crates/proto/src/serialize/txt/rdata_parsers/naptr.rs index df3dc1d09e..ff966d4092 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/naptr.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/naptr.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! naptr records DDDS, RFC 3403 diff --git a/crates/proto/src/serialize/txt/rdata_parsers/null.rs b/crates/proto/src/serialize/txt/rdata_parsers/null.rs index 6e0d094960..892f49e53e 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/null.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/null.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/openpgpkey.rs b/crates/proto/src/serialize/txt/rdata_parsers/openpgpkey.rs index e43cf3e2dd..47ecfd746c 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/openpgpkey.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/openpgpkey.rs @@ -1,8 +1,8 @@ // Copyright 2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! OPENPGPKEY records for OpenPGP public keys diff --git a/crates/proto/src/serialize/txt/rdata_parsers/soa.rs b/crates/proto/src/serialize/txt/rdata_parsers/soa.rs index 3dc2e04a5b..90f79aa4e8 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/soa.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/soa.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -80,8 +80,8 @@ fn test_parse() { use std::str::FromStr; let soa_tokens = vec![ - "trust-dns.org.", - "root.trust-dns.org.", + "hickory-dns.org.", + "root.hickory-dns.org.", "199609203", "8h", "120m", @@ -96,8 +96,8 @@ fn test_parse() { .expect("failed to parse tokens"); let expected_soa = SOA::new( - "trust-dns.org.".parse().unwrap(), - "root.trust-dns.org.".parse().unwrap(), + "hickory-dns.org.".parse().unwrap(), + "root.hickory-dns.org.".parse().unwrap(), 199609203, 28800, 7200, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/srv.rs b/crates/proto/src/serialize/txt/rdata_parsers/srv.rs index 95ab34e4e1..0d54f80e48 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/srv.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/srv.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/rdata_parsers/sshfp.rs b/crates/proto/src/serialize/txt/rdata_parsers/sshfp.rs index abd816b70e..b767580135 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/sshfp.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/sshfp.rs @@ -1,8 +1,8 @@ // Copyright 2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! SSHFP records for SSH public key fingerprints diff --git a/crates/proto/src/serialize/txt/rdata_parsers/svcb.rs b/crates/proto/src/serialize/txt/rdata_parsers/svcb.rs index b4e296ab66..ae9c91296b 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/svcb.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/svcb.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! SVCB records in presentation format @@ -243,7 +243,7 @@ fn parse_ipv4_hint(value: Option<&str>) -> Result { } /// As the documentation states, the presentation format (what this function reads) must be a BASE64 encoded string. -/// trust-dns will decode the BASE64 during parsing and stores the internal data as the raw bytes. +/// hickory-dns will decode the BASE64 during parsing and stores the internal data as the raw bytes. /// /// [draft-ietf-dnsop-svcb-https-03 SVCB and HTTPS RRs for DNS, February 2021](https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-03#section-9) /// ```text diff --git a/crates/proto/src/serialize/txt/rdata_parsers/tlsa.rs b/crates/proto/src/serialize/txt/rdata_parsers/tlsa.rs index 7d8bd4ad60..998ba102ee 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/tlsa.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/tlsa.rs @@ -2,8 +2,8 @@ // Copyright 2017 Google LLC. // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! tlsa records for storing TLS authentication records diff --git a/crates/proto/src/serialize/txt/rdata_parsers/txt.rs b/crates/proto/src/serialize/txt/rdata_parsers/txt.rs index 1faf06d7bf..4bfe2cc9b2 100644 --- a/crates/proto/src/serialize/txt/rdata_parsers/txt.rs +++ b/crates/proto/src/serialize/txt/rdata_parsers/txt.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/serialize/txt/zone.rs b/crates/proto/src/serialize/txt/zone.rs index a3e90db629..a93501e084 100644 --- a/crates/proto/src/serialize/txt/zone.rs +++ b/crates/proto/src/serialize/txt/zone.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{ @@ -430,7 +430,7 @@ impl<'a> Parser<'a> { /// parses the string following the rules from: /// (NXCaching RFC) and - /// + /// /// /// default is seconds /// #s = seconds = # x 1 seconds (really!) @@ -443,7 +443,7 @@ impl<'a> Parser<'a> { /// /// # Example /// ``` - /// use trust_dns_proto::serialize::txt::Parser; + /// use hickory_proto::serialize::txt::Parser; /// /// assert_eq!(Parser::parse_time("0").unwrap(), 0); /// assert!(Parser::parse_time("s").is_err()); diff --git a/crates/proto/src/serialize/txt/zone_lex.rs b/crates/proto/src/serialize/txt/zone_lex.rs index bc0aac4bdd..772e51f489 100644 --- a/crates/proto/src/serialize/txt/zone_lex.rs +++ b/crates/proto/src/serialize/txt/zone_lex.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::borrow::Cow; diff --git a/crates/proto/src/tcp/mod.rs b/crates/proto/src/tcp/mod.rs index 7ed4959974..e91d6a54f8 100644 --- a/crates/proto/src/tcp/mod.rs +++ b/crates/proto/src/tcp/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/tcp/tcp_client_stream.rs b/crates/proto/src/tcp/tcp_client_stream.rs index b6bf4bfe99..303cb6f237 100644 --- a/crates/proto/src/tcp/tcp_client_stream.rs +++ b/crates/proto/src/tcp/tcp_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt::{self, Display}; @@ -28,7 +28,7 @@ use crate::TokioTime; /// Tcp client stream /// -/// Use with `trust_dns_client::client::DnsMultiplexer` impls +/// Use with `hickory_client::client::DnsMultiplexer` impls #[must_use = "futures do nothing unless polled"] pub struct TcpClientStream where diff --git a/crates/proto/src/tcp/tcp_stream.rs b/crates/proto/src/tcp/tcp_stream.rs index 0204dda7be..dc81aa87a0 100644 --- a/crates/proto/src/tcp/tcp_stream.rs +++ b/crates/proto/src/tcp/tcp_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! This module contains all the TCP structures for demuxing TCP into streams of DNS packets. diff --git a/crates/proto/src/udp/mod.rs b/crates/proto/src/udp/mod.rs index 7e76b4184e..eb0014321c 100644 --- a/crates/proto/src/udp/mod.rs +++ b/crates/proto/src/udp/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/proto/src/udp/udp_client_stream.rs b/crates/proto/src/udp/udp_client_stream.rs index 99efb742fb..004d968734 100644 --- a/crates/proto/src/udp/udp_client_stream.rs +++ b/crates/proto/src/udp/udp_client_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::borrow::Borrow; diff --git a/crates/proto/src/udp/udp_stream.rs b/crates/proto/src/udp/udp_stream.rs index d30d48037c..7237b7d85c 100644 --- a/crates/proto/src/udp/udp_stream.rs +++ b/crates/proto/src/udp/udp_stream.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::io; diff --git a/crates/proto/src/xfer/dns_exchange.rs b/crates/proto/src/xfer/dns_exchange.rs index 8a28ea9e42..e4a036e330 100644 --- a/crates/proto/src/xfer/dns_exchange.rs +++ b/crates/proto/src/xfer/dns_exchange.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! This module contains all the types for demuxing DNS oriented streams. diff --git a/crates/proto/src/xfer/dns_handle.rs b/crates/proto/src/xfer/dns_handle.rs index 9de698c3c1..f3dcbfad02 100644 --- a/crates/proto/src/xfer/dns_handle.rs +++ b/crates/proto/src/xfer/dns_handle.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! `DnsHandle` types perform conversions of the raw DNS messages before sending the messages on the specified streams. diff --git a/crates/proto/src/xfer/dns_multiplexer.rs b/crates/proto/src/xfer/dns_multiplexer.rs index 932595b550..f6e7131971 100644 --- a/crates/proto/src/xfer/dns_multiplexer.rs +++ b/crates/proto/src/xfer/dns_multiplexer.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! `DnsMultiplexer` and associated types implement the state machines for sending DNS messages while using the underlying streams. diff --git a/crates/proto/src/xfer/dns_request.rs b/crates/proto/src/xfer/dns_request.rs index 346a782073..2d93c9b981 100644 --- a/crates/proto/src/xfer/dns_request.rs +++ b/crates/proto/src/xfer/dns_request.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! `DnsRequest` wraps a `Message` and associates a set of `DnsRequestOptions` for specifying different transfer options. diff --git a/crates/proto/src/xfer/dns_response.rs b/crates/proto/src/xfer/dns_response.rs index 4611113622..a448596bbe 100644 --- a/crates/proto/src/xfer/dns_response.rs +++ b/crates/proto/src/xfer/dns_response.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! `DnsResponse` wraps a `Message` and any associated connection details @@ -126,7 +126,7 @@ type TimeoutFuture = Pin< >; // TODO: this needs to have the IP addr of the remote system... -// TODO: see https://github.com/bluejekyll/trust-dns/issues/383 for removing vec of messages and instead returning a Stream +// TODO: see https://github.com/hickory-dns/hickory-dns/issues/383 for removing vec of messages and instead returning a Stream /// A DNS response object /// /// For Most DNS requests, only one response is expected, the exception is a multicast request. diff --git a/crates/proto/src/xfer/dnssec_dns_handle.rs b/crates/proto/src/xfer/dnssec_dns_handle.rs index 2b60cdf084..bcda841eed 100644 --- a/crates/proto/src/xfer/dnssec_dns_handle.rs +++ b/crates/proto/src/xfer/dnssec_dns_handle.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The `DnssecDnsHandle` is used to validate all DNS responses for correct DNSSEC signatures. diff --git a/crates/proto/src/xfer/mod.rs b/crates/proto/src/xfer/mod.rs index 92797f9e2f..fb23ecef32 100644 --- a/crates/proto/src/xfer/mod.rs +++ b/crates/proto/src/xfer/mod.rs @@ -1,6 +1,6 @@ //! DNS high level transit implimentations. //! -//! Primarily there are two types in this module of interest, the `DnsMultiplexer` type and the `DnsHandle` type. `DnsMultiplexer` can be thought of as the state machine responsible for sending and receiving DNS messages. `DnsHandle` is the type given to API users of the `trust-dns-proto` library to send messages into the `DnsMultiplexer` for delivery. Finally there is the `DnsRequest` type. This allows for customizations, through `DnsRequestOptions`, to the delivery of messages via a `DnsMultiplexer`. +//! Primarily there are two types in this module of interest, the `DnsMultiplexer` type and the `DnsHandle` type. `DnsMultiplexer` can be thought of as the state machine responsible for sending and receiving DNS messages. `DnsHandle` is the type given to API users of the `hickory-proto` library to send messages into the `DnsMultiplexer` for delivery. Finally there is the `DnsRequest` type. This allows for customizations, through `DnsRequestOptions`, to the delivery of messages via a `DnsMultiplexer`. //! //! TODO: this module needs some serious refactoring and normalization. diff --git a/crates/proto/src/xfer/retry_dns_handle.rs b/crates/proto/src/xfer/retry_dns_handle.rs index b14751c920..b24c55a516 100644 --- a/crates/proto/src/xfer/retry_dns_handle.rs +++ b/crates/proto/src/xfer/retry_dns_handle.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! `RetryDnsHandle` allows for DnsQueries to be reattempted on failure diff --git a/crates/proto/src/xfer/serial_message.rs b/crates/proto/src/xfer/serial_message.rs index 9412447861..603e155e9e 100644 --- a/crates/proto/src/xfer/serial_message.rs +++ b/crates/proto/src/xfer/serial_message.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::net::SocketAddr; diff --git a/crates/proto/tests/dnssec_presentation_format_tests.rs b/crates/proto/tests/dnssec_presentation_format_tests.rs index a87b3246a4..a8bf67fa12 100644 --- a/crates/proto/tests/dnssec_presentation_format_tests.rs +++ b/crates/proto/tests/dnssec_presentation_format_tests.rs @@ -1,8 +1,8 @@ #![cfg(feature = "dnssec")] -use trust_dns_proto::rr::dnssec::rdata::{DNSKEY, DS}; -use trust_dns_proto::rr::dnssec::{Algorithm, DigestType}; -use trust_dns_proto::rr::Name; +use hickory_proto::rr::dnssec::rdata::{DNSKEY, DS}; +use hickory_proto::rr::dnssec::{Algorithm, DigestType}; +use hickory_proto::rr::Name; #[test] #[allow(deprecated)] diff --git a/crates/proto/tests/openssl_tests.rs b/crates/proto/tests/openssl_tests.rs index b0a62388c9..69bafded91 100644 --- a/crates/proto/tests/openssl_tests.rs +++ b/crates/proto/tests/openssl_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(feature = "dns-over-openssl")] @@ -32,11 +32,11 @@ use openssl::pkcs12::*; use openssl::rsa::*; use openssl::x509::extension::*; -use trust_dns_proto::tcp::Connect; -use trust_dns_proto::xfer::SerialMessage; -use trust_dns_proto::{iocompat::AsyncIoTokioAsStd, DnsStreamHandle}; +use hickory_proto::tcp::Connect; +use hickory_proto::xfer::SerialMessage; +use hickory_proto::{iocompat::AsyncIoTokioAsStd, DnsStreamHandle}; -use trust_dns_proto::openssl::TlsStreamBuilder; +use hickory_proto::openssl::TlsStreamBuilder; // this fails on linux for some reason. It appears that a buffer somewhere is dirty // and subsequent reads of a message buffer reads the wrong length. It works for 2 iterations diff --git a/crates/recursor/Cargo.toml b/crates/recursor/Cargo.toml index 201f3af38f..93543cd38e 100644 --- a/crates/recursor/Cargo.toml +++ b/crates/recursor/Cargo.toml @@ -1,19 +1,19 @@ [package] -name = "trust-dns-recursor" +name = "hickory-recursor" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ *WARNING* This library is experimental -Trust-DNS Recursor is a safe and secure DNS recursive resolver with DNSSEC support. - Trust-DNS is based on the Tokio and Futures libraries, which means +Hickory DNS Recursor is a safe and secure DNS recursive resolver with DNSSEC support. + Hickory DNS is based on the Tokio and Futures libraries, which means it should be easily integrated into other software that also use those libraries. This library can be used as in the server and binary for performing recursive lookups. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/trust-dns-recursor" +documentation = "https://docs.rs/hickory-recursor" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -30,38 +30,77 @@ categories.workspace = true license.workspace = true [badges] -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] -#backtrace = ["dep:backtrace", "trust-dns-proto/backtrace", "trust-dns-resolver/backtrace"] - -dnssec-openssl = ["dnssec", "trust-dns-proto/dnssec-openssl", "trust-dns-resolver/dnssec-openssl"] -dnssec-ring = ["dnssec", "trust-dns-proto/dnssec-ring", "trust-dns-resolver/dnssec-ring"] +#backtrace = ["dep:backtrace", "hickory-proto/backtrace", "hickory-resolver/backtrace"] + +dnssec-openssl = [ + "dnssec", + "hickory-proto/dnssec-openssl", + "hickory-resolver/dnssec-openssl", +] +dnssec-ring = [ + "dnssec", + "hickory-proto/dnssec-ring", + "hickory-resolver/dnssec-ring", +] dnssec = [] # TODO: Need to figure out how to be consistent with ring/openssl usage... -dns-over-https-rustls = ["dns-over-https", "trust-dns-proto/dns-over-https-rustls", "trust-dns-resolver/dns-over-https-rustls", "dns-over-rustls"] -dns-over-https = ["trust-dns-proto/dns-over-https"] -dns-over-quic = ["dns-over-rustls", "trust-dns-proto/dns-over-quic", "trust-dns-resolver/dns-over-quic"] -dns-over-h3 = ["dns-over-rustls", "trust-dns-proto/dns-over-h3", "trust-dns-resolver/dns-over-h3"] +dns-over-https-rustls = [ + "dns-over-https", + "hickory-proto/dns-over-https-rustls", + "hickory-resolver/dns-over-https-rustls", + "dns-over-rustls", +] +dns-over-https = ["hickory-proto/dns-over-https"] +dns-over-quic = [ + "dns-over-rustls", + "hickory-proto/dns-over-quic", + "hickory-resolver/dns-over-quic", +] +dns-over-h3 = [ + "dns-over-rustls", + "hickory-proto/dns-over-h3", + "hickory-resolver/dns-over-h3", +] # TODO: migrate all tls and tls-openssl features to dns-over-tls, et al -dns-over-native-tls = ["dns-over-tls", "trust-dns-proto/dns-over-native-tls", "trust-dns-resolver/dns-over-native-tls"] -dns-over-openssl = ["dns-over-tls", "dnssec-openssl", "trust-dns-proto/dns-over-openssl", "trust-dns-resolver/dns-over-openssl"] -dns-over-rustls = ["dns-over-tls", "dnssec-ring", "trust-dns-proto/dns-over-rustls", "trust-dns-resolver/dns-over-rustls"] +dns-over-native-tls = [ + "dns-over-tls", + "hickory-proto/dns-over-native-tls", + "hickory-resolver/dns-over-native-tls", +] +dns-over-openssl = [ + "dns-over-tls", + "dnssec-openssl", + "hickory-proto/dns-over-openssl", + "hickory-resolver/dns-over-openssl", +] +dns-over-rustls = [ + "dns-over-tls", + "dnssec-ring", + "hickory-proto/dns-over-rustls", + "hickory-resolver/dns-over-rustls", +] dns-over-tls = [] # This is a deprecated feature... tls-openssl = ["dns-over-openssl"] tls = ["dns-over-openssl"] -serde-config = ["serde", "trust-dns-proto/serde-config", "trust-dns-resolver/serde-config"] +serde-config = [ + "serde", + "hickory-proto/serde-config", + "hickory-resolver/serde-config", +] testing = [] [lib] -name = "trust_dns_recursor" +name = "hickory_recursor" path = "src/lib.rs" [dependencies] @@ -71,19 +110,25 @@ async-recursion.workspace = true bytes.workspace = true cfg-if.workspace = true enum-as-inner.workspace = true -futures-util = { workspace = true, default-features = false, features = ["std"] } +futures-util = { workspace = true, default-features = false, features = [ + "std", +] } lru-cache.workspace = true parking_lot.workspace = true serde = { workspace = true, features = ["derive"], optional = true } thiserror.workspace = true tracing.workspace = true tokio = { workspace = true, features = ["net"] } -trust-dns-proto.workspace = true -trust-dns-resolver = { workspace = true, features = ["tokio-runtime"] } +hickory-proto.workspace = true +hickory-resolver = { workspace = true, features = ["tokio-runtime"] } [dev-dependencies] tokio = { workspace = true, features = ["macros", "rt"] } -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } [package.metadata.docs.rs] all-features = true diff --git a/crates/recursor/LICENSE-APACHE b/crates/recursor/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/crates/recursor/LICENSE-APACHE +++ b/crates/recursor/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/recursor/LICENSE-MIT b/crates/recursor/LICENSE-MIT index 407c7e4c36..2bf908b01d 100644 --- a/crates/recursor/LICENSE-MIT +++ b/crates/recursor/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2022 The trust-dns Developers +Copyright (c) 2022 The Hickory DNS Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/crates/recursor/README.md b/crates/recursor/README.md index 65d8ff1827..8c9d8ed735 100644 --- a/crates/recursor/README.md +++ b/crates/recursor/README.md @@ -1,13 +1,15 @@ # Overview -Trust-DNS Recursor is a library which implements recursive resolution for DNS. This is currently experimental, test coverage is low and full scope of tests haven't been determined yet. +Hickory DNS Recursor is a library which implements recursive resolution for DNS. This is currently experimental, test coverage is low and full scope of tests haven't been determined yet. This library can be used to perform DNS resolution beginning with a set of root (hints) authorities. It does not require an upstream recursive resolver to find records in DNS. +**NOTICE** This project was rebranded from Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, this crate/binary has been moved to [hickory-recursor](https://crates.io/crates/hickory-recursor), from `0.24` and onward, for prior versions see [trust-dns-recursor](https://crates.io/crates/trust-dns-recursor). + ## Minimum Rust Version The current minimum rustc version for this project is `1.67` ## Versioning -Trust-DNS does it's best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does it's best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/crates/recursor/src/error.rs b/crates/recursor/src/error.rs index 4b723594a8..ffa3be06ae 100644 --- a/crates/recursor/src/error.rs +++ b/crates/recursor/src/error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Error types for the crate @@ -12,8 +12,8 @@ use std::{fmt, io}; use enum_as_inner::EnumAsInner; +use hickory_resolver::Name; use thiserror::Error; -use trust_dns_resolver::Name; #[cfg(feature = "backtrace")] use crate::proto::{trace, ExtBacktrace}; @@ -42,11 +42,11 @@ pub enum ErrorKind { #[error("io error: {0}")] Io(#[from] std::io::Error), - /// An error got returned by the trust-dns-proto crate + /// An error got returned by the hickory-proto crate #[error("proto error: {0}")] Proto(#[from] ProtoError), - /// An error got returned by the trust-dns-proto crate + /// An error got returned by the hickory-proto crate #[error("proto error: {0}")] Resolve(ResolveError), diff --git a/crates/recursor/src/lib.rs b/crates/recursor/src/lib.rs index a4f6308d0a..9488b472bd 100644 --- a/crates/recursor/src/lib.rs +++ b/crates/recursor/src/lib.rs @@ -1,11 +1,11 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. -//! A recursive DNS resolver based on the Trust-DNS (stub) resolver +//! A recursive DNS resolver based on the Hickory DNS (stub) resolver #![warn( clippy::default_trait_access, @@ -31,7 +31,7 @@ mod recursor; pub(crate) mod recursor_pool; pub use error::{Error, ErrorKind}; +pub use hickory_proto as proto; +pub use hickory_resolver as resolver; +pub use hickory_resolver::config::NameServerConfig; pub use recursor::Recursor; -pub use trust_dns_proto as proto; -pub use trust_dns_resolver as resolver; -pub use trust_dns_resolver::config::NameServerConfig; diff --git a/crates/recursor/src/recursor.rs b/crates/recursor/src/recursor.rs index 6be73bf3a5..008dba0201 100644 --- a/crates/recursor/src/recursor.rs +++ b/crates/recursor/src/recursor.rs @@ -1,18 +1,18 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{net::SocketAddr, time::Instant}; use async_recursion::async_recursion; use futures_util::{future::select_all, FutureExt}; +use hickory_resolver::name_server::TokioConnectionProvider; use lru_cache::LruCache; use parking_lot::Mutex; use tracing::{debug, info, warn}; -use trust_dns_resolver::name_server::TokioConnectionProvider; use crate::{ proto::{ @@ -50,7 +50,7 @@ impl Recursor { /// /// This will panic if the roots are empty. pub fn new(roots: impl Into) -> Result { - // configure the trust-dns-resolver + // configure the hickory-resolver let roots: NameServerConfigGroup = roots.into(); assert!(!roots.is_empty(), "roots must not be empty"); diff --git a/crates/recursor/src/recursor_pool.rs b/crates/recursor/src/recursor_pool.rs index 7f3d6f7d81..09268242d2 100644 --- a/crates/recursor/src/recursor_pool.rs +++ b/crates/recursor/src/recursor_pool.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{ @@ -13,19 +13,19 @@ use std::{ }; use futures_util::{future::Shared, Future, FutureExt, StreamExt}; -use parking_lot::Mutex; -use tracing::info; -use trust_dns_proto::{ +use hickory_proto::{ op::Query, xfer::{DnsRequestOptions, DnsResponse}, DnsHandle, }; -use trust_dns_resolver::name_server::{RuntimeProvider, TokioRuntimeProvider}; -use trust_dns_resolver::{ +use hickory_resolver::name_server::{RuntimeProvider, TokioRuntimeProvider}; +use hickory_resolver::{ error::{ResolveError, ResolveErrorKind}, name_server::GenericNameServerPool, Name, }; +use parking_lot::Mutex; +use tracing::info; /// Active request cache /// diff --git a/crates/resolver/Cargo.toml b/crates/resolver/Cargo.toml index 49cfdc7ec5..1bb483159b 100644 --- a/crates/resolver/Cargo.toml +++ b/crates/resolver/Cargo.toml @@ -1,14 +1,14 @@ [package] -name = "trust-dns-resolver" +name = "hickory-resolver" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS is a safe and secure DNS library. This Resolver library uses the Client library to perform all DNS queries. The Resolver is intended to be a high-level library for any DNS record resolution see Resolver and AsyncResolver for supported resolution types. The Client can be used for other queries. +Hickory DNS is a safe and secure DNS library. This Resolver library uses the Client library to perform all DNS queries. The Resolver is intended to be a high-level library for any DNS record resolution see Resolver and AsyncResolver for supported resolution types. The Client can be used for other queries. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/trust-dns-resolver" +documentation = "https://docs.rs/hickory-resolver" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -25,50 +25,73 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] default = ["system-config", "tokio-runtime"] -#backtrace = ["dep:backtrace", "trust-dns-proto/backtrace"] -dns-over-native-tls = ["dns-over-tls", "tokio-native-tls", "trust-dns-proto/dns-over-native-tls"] +#backtrace = ["dep:backtrace", "hickory-proto/backtrace"] +dns-over-native-tls = [ + "dns-over-tls", + "tokio-native-tls", + "hickory-proto/dns-over-native-tls", +] # DNS over TLS with OpenSSL currently needs a good way to set default CAs, use rustls or native-tls -dns-over-openssl = ["dns-over-tls", "trust-dns-proto/dns-over-openssl", "tokio-openssl"] -dns-over-rustls = ["dns-over-tls", "rustls", "tokio-rustls", "trust-dns-proto/dns-over-rustls"] +dns-over-openssl = [ + "dns-over-tls", + "hickory-proto/dns-over-openssl", + "tokio-openssl", +] +dns-over-rustls = [ + "dns-over-tls", + "rustls", + "tokio-rustls", + "hickory-proto/dns-over-rustls", +] dns-over-tls = ["tokio-runtime"] # This requires some TLS library, currently only rustls is supported -dns-over-https-rustls = ["trust-dns-proto/dns-over-https-rustls", "dns-over-rustls", "dns-over-https"] -dns-over-https = ["trust-dns-proto/dns-over-https"] -dns-over-quic = ["rustls/quic", "dns-over-rustls", "trust-dns-proto/dns-over-quic"] -dns-over-h3 = ["dns-over-rustls", "trust-dns-proto/dns-over-h3"] - -webpki-roots = ["dep:webpki-roots", "trust-dns-proto/webpki-roots"] -native-certs = ["dep:rustls-native-certs", "trust-dns-proto/native-certs"] - -dnssec-openssl = ["dnssec", "trust-dns-proto/dnssec-openssl"] -dnssec-ring = ["dnssec", "trust-dns-proto/dnssec-ring"] +dns-over-https-rustls = [ + "hickory-proto/dns-over-https-rustls", + "dns-over-rustls", + "dns-over-https", +] +dns-over-https = ["hickory-proto/dns-over-https"] +dns-over-quic = [ + "rustls/quic", + "dns-over-rustls", + "hickory-proto/dns-over-quic", +] +dns-over-h3 = ["dns-over-rustls", "hickory-proto/dns-over-h3"] + +webpki-roots = ["dep:webpki-roots", "hickory-proto/webpki-roots"] +native-certs = ["dep:rustls-native-certs", "hickory-proto/native-certs"] + +dnssec-openssl = ["dnssec", "hickory-proto/dnssec-openssl"] +dnssec-ring = ["dnssec", "hickory-proto/dnssec-ring"] dnssec = [] -serde-config = ["serde", "trust-dns-proto/serde-config"] +serde-config = ["serde", "hickory-proto/serde-config"] system-config = ["ipconfig", "resolv-conf"] # # enables experimental the mDNS (multicast) feature # TODO: we will be revisiting how mdns is built into the resolver... -#mdns = ["trust-dns-proto/mdns"] +#mdns = ["hickory-proto/mdns"] testing = [] -tokio-runtime = ["tokio/rt", "trust-dns-proto/tokio-runtime"] +tokio-runtime = ["tokio/rt", "hickory-proto/tokio-runtime"] [lib] -name = "trust_dns_resolver" +name = "hickory_resolver" path = "src/lib.rs" [dependencies] #backtrace = { version = "0.3.50", optional = true } cfg-if.workspace = true -futures-util = { workspace = true, default-features = false, features = ["std"] } +futures-util = { workspace = true, default-features = false, features = [ + "std", +] } lru-cache.workspace = true once_cell.workspace = true parking_lot.workspace = true @@ -84,16 +107,22 @@ tokio = { workspace = true, optional = true } tokio-native-tls = { workspace = true, optional = true } tokio-openssl = { workspace = true, optional = true } tokio-rustls = { workspace = true, optional = true } -trust-dns-proto = { workspace = true, default-features = false } +hickory-proto = { workspace = true, default-features = false } webpki-roots = { workspace = true, optional = true } [target.'cfg(windows)'.dependencies] ipconfig = { workspace = true, optional = true } [dev-dependencies] -futures-executor = { workspace = true, default-features = false, features = ["std"] } +futures-executor = { workspace = true, default-features = false, features = [ + "std", +] } tokio = { workspace = true, features = ["macros", "test-util"] } -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } [package.metadata.docs.rs] all-features = true diff --git a/crates/resolver/LICENSE-APACHE b/crates/resolver/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/crates/resolver/LICENSE-APACHE +++ b/crates/resolver/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/resolver/LICENSE-MIT b/crates/resolver/LICENSE-MIT index b497b098ee..cc6341a36e 100644 --- a/crates/resolver/LICENSE-MIT +++ b/crates/resolver/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2015 The trust-dns Developers +Copyright (c) 2015 The Hickory DNS Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/crates/resolver/README.md b/crates/resolver/README.md index 0e2c8550c3..8b34f0d2b6 100644 --- a/crates/resolver/README.md +++ b/crates/resolver/README.md @@ -1,8 +1,10 @@ # Overview -Trust-DNS Resolver is a library which implements the DNS resolver using the Trust-DNS Proto library. +Hickory DNS Resolver is a library which implements the DNS resolver using the Hickory DNS Proto library. -This library contains implementations for IPv4 (A) and IPv6 (AAAA) resolution, more features are in the works. It is built on top of the [tokio](https://tokio.rs) async-io project, this allows it to be integrated into other systems using the tokio and futures libraries. The Trust-DNS [project](https://github.com/bluejekyll/trust-dns) contains other libraries for DNS: a [client library](https://crates.io/crates/trust-dns-client) for raw protocol usage, a [server library](https://crates.io/crates/trust-dns-server) for hosting zones, and variations on the TLS implementation over [rustls](https://crates.io/crates/trust-dns-rustls) and [native-tls](https://crates.io/crates/trust-dns-native-tls). +This library contains implementations for IPv4 (A) and IPv6 (AAAA) resolution, more features are in the works. It is built on top of the [tokio](https://tokio.rs) async-io project, this allows it to be integrated into other systems using the tokio and futures libraries. The Hickory DNS [project](https://github.com/hickory-dns/hickory-dns) contains other libraries for DNS: a [client library](https://crates.io/crates/hickory-client) for raw protocol usage, a [server library](https://crates.io/crates/hickory-server) for hosting zones, and variations on the TLS implementation over [rustls](https://crates.io/crates/hickory-dns-rustls) and [native-tls](https://crates.io/crates/hickory-dns-native-tls). + +**NOTICE** This project was rebranded fromt Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, this crate/binary has been moved to [hickory-resolver](https://crates.io/crates/hickory-resolver), from `0.24` and onward, for prior versions see [trust-dns-resolver](https://crates.io/crates/trust-dns-resolver). ## Features @@ -22,8 +24,8 @@ This library contains implementations for IPv4 (A) and IPv6 (AAAA) resolution, m ```rust use std::net::*; -use trust_dns_resolver::Resolver; -use trust_dns_resolver::config::*; +use hickory_resolver::Resolver; +use hickory_resolver::config::*; // Construct a new Resolver with default configuration options let mut resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); @@ -54,10 +56,10 @@ To enable DoT one of the features `dns-over-native-tls`, `dns-over-openssl`, or ### Example -Enable the TLS library through the dependency on `trust-dns-resolver`: +Enable the TLS library through the dependency on `hickory-resolver`: ```toml -trust-dns-resolver = { version = "*", features = ["dns-over-rustls"] } +hickory-resolver = { version = "*", features = ["dns-over-rustls"] } ``` A default TLS configuration is available for Cloudflare's `1.1.1.1` DNS service (Quad9 as well): @@ -81,10 +83,10 @@ Zones will be automatically resigned on any record updates via dynamic DNS. To e ## Testing the resolver via CLI with resolve -Useful for testing trust-dns-resolver and it's features via an independent CLI. +Useful for testing hickory-resolver and it's features via an independent CLI. ```shell -cargo install --bin resolve trust-dns-util +cargo install --bin resolve hickory-util ``` ### example @@ -102,4 +104,4 @@ The current minimum rustc version for this project is `1.67` ## Versioning -Trust-DNS does its best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does its best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/crates/resolver/examples/custom_provider.rs b/crates/resolver/examples/custom_provider.rs index 91031e5a63..4b4a289811 100644 --- a/crates/resolver/examples/custom_provider.rs +++ b/crates/resolver/examples/custom_provider.rs @@ -2,15 +2,15 @@ #[cfg(any(feature = "webpki-roots", feature = "native-certs"))] use { + hickory_resolver::config::{ResolverConfig, ResolverOpts}, + hickory_resolver::name_server::{ConnectionProvider, GenericConnector, RuntimeProvider}, + hickory_resolver::proto::iocompat::AsyncIoTokioAsStd, + hickory_resolver::proto::TokioTime, + hickory_resolver::{AsyncResolver, TokioHandle}, std::future::Future, std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}, std::pin::Pin, tokio::net::{TcpStream, UdpSocket}, - trust_dns_resolver::config::{ResolverConfig, ResolverOpts}, - trust_dns_resolver::name_server::{ConnectionProvider, GenericConnector, RuntimeProvider}, - trust_dns_resolver::proto::iocompat::AsyncIoTokioAsStd, - trust_dns_resolver::proto::TokioTime, - trust_dns_resolver::{AsyncResolver, TokioHandle}, }; #[cfg(any(feature = "webpki-roots", feature = "native-certs"))] diff --git a/crates/resolver/examples/flush_cache.rs b/crates/resolver/examples/flush_cache.rs index 47ada8a7f2..4a6858c0c2 100644 --- a/crates/resolver/examples/flush_cache.rs +++ b/crates/resolver/examples/flush_cache.rs @@ -11,7 +11,7 @@ fn main() { } async fn tokio_main() { - use trust_dns_resolver::{name_server::TokioConnectionProvider, TokioAsyncResolver}; + use hickory_resolver::{name_server::TokioConnectionProvider, TokioAsyncResolver}; let resolver = { // To make this independent, if targeting macOS, BSD, Linux, or Windows, we can use the system's configuration: @@ -25,7 +25,7 @@ async fn tokio_main() { #[cfg(not(any(unix, windows)))] { // Directly reference the config types - use trust_dns_resolver::config::{ResolverConfig, ResolverOpts}; + use hickory_resolver::config::{ResolverConfig, ResolverOpts}; // Get a new resolver with the google nameservers as the upstream recursive resolvers AsyncResolver::tokio( @@ -39,7 +39,7 @@ async fn tokio_main() { .expect("failed to create resolver"); // Create some futures representing name lookups. - let names = ["trust-dns.org.", "estada.ch.", "wikipedia.org."]; + let names = ["hickory-dns.org.", "estada.ch.", "wikipedia.org."]; let first_resolve = resolve_list(&names, &*resolver).await; let cached_resolve = resolve_list(&names, &*resolver).await; @@ -55,9 +55,9 @@ async fn tokio_main() { drop(resolver); } -async fn resolve_list( +async fn resolve_list( names: &[&str], - resolver: &trust_dns_resolver::AsyncResolver

, + resolver: &hickory_resolver::AsyncResolver

, ) -> tokio::time::Duration { use tokio::time::Instant; let start_time = Instant::now(); diff --git a/crates/resolver/examples/global_resolver.rs b/crates/resolver/examples/global_resolver.rs index 7c82f9b33e..541eb6f63d 100644 --- a/crates/resolver/examples/global_resolver.rs +++ b/crates/resolver/examples/global_resolver.rs @@ -2,14 +2,14 @@ use { futures_util::future, + hickory_resolver::name_server::TokioConnectionProvider, + hickory_resolver::TokioAsyncResolver, + hickory_resolver::{IntoName, TryParseIp}, once_cell::sync::Lazy, std::fmt::Display, std::io, std::net::SocketAddr, std::task::Poll, - trust_dns_resolver::name_server::TokioConnectionProvider, - trust_dns_resolver::TokioAsyncResolver, - trust_dns_resolver::{IntoName, TryParseIp}, }; // This is an example of registering a static global resolver into any system. @@ -49,7 +49,7 @@ static GLOBAL_DNS_RESOLVER: Lazy = Lazy::new(|| { #[cfg(not(any(unix, windows)))] { // Directly reference the config types - use trust_dns_resolver::config::{ResolverConfig, ResolverOpts}; + use hickory_resolver::config::{ResolverConfig, ResolverOpts}; // Get a new resolver with the google nameservers as the upstream recursive resolvers TokioAsyncResolver::new( @@ -63,7 +63,7 @@ static GLOBAL_DNS_RESOLVER: Lazy = Lazy::new(|| { let (lock, cvar) = &*pair2; let mut started = lock.lock().unwrap(); - let resolver = resolver.expect("failed to create trust-dns-resolver"); + let resolver = resolver.expect("failed to create hickory-resolver"); *started = Some(resolver); cvar.notify_one(); diff --git a/crates/resolver/examples/multithreaded_runtime.rs b/crates/resolver/examples/multithreaded_runtime.rs index c89e13a042..9213f4eef3 100644 --- a/crates/resolver/examples/multithreaded_runtime.rs +++ b/crates/resolver/examples/multithreaded_runtime.rs @@ -4,8 +4,8 @@ //! you might integrate the resolver into a more complex application. fn main() { + use hickory_resolver::{name_server::TokioConnectionProvider, TokioAsyncResolver}; use tokio::runtime::Runtime; - use trust_dns_resolver::{name_server::TokioConnectionProvider, TokioAsyncResolver}; tracing_subscriber::fmt::init(); @@ -24,7 +24,7 @@ fn main() { #[cfg(not(any(unix, windows)))] { // Directly reference the config types - use trust_dns_resolver::config::{ResolverConfig, ResolverOpts}; + use hickory_resolver::config::{ResolverConfig, ResolverOpts}; // Get a new resolver with the google nameservers as the upstream recursive resolvers AsyncResolver::new( diff --git a/crates/resolver/src/async_resolver.rs b/crates/resolver/src/async_resolver.rs index 4b00c3ccb1..8d3b7d037b 100644 --- a/crates/resolver/src/async_resolver.rs +++ b/crates/resolver/src/async_resolver.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Structs for creating and using a AsyncResolver @@ -625,7 +625,7 @@ pub mod testing { ); // needs to be a domain that exists, but is not signed (eventually this will be) - let response = exec.block_on(resolver.lookup_ip("trust-dns.org.")); + let response = exec.block_on(resolver.lookup_ip("hickory-dns.org.")); assert!(response.is_err()); let error = response.unwrap_err(); @@ -633,7 +633,7 @@ pub mod testing { use proto::error::{ProtoError, ProtoErrorKind}; let error_str = format!("{error}"); - let name = Name::from_str("trust-dns.org.").unwrap(); + let name = Name::from_str("hickory-dns.org.").unwrap(); let expected_str = format!( "{}", ResolveError::from(ProtoError::from(ProtoErrorKind::RrsigsNotPresent { diff --git a/crates/resolver/src/caching_client.rs b/crates/resolver/src/caching_client.rs index b35147b4d9..2204e3de59 100644 --- a/crates/resolver/src/caching_client.rs +++ b/crates/resolver/src/caching_client.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Caching related functionality for the Resolver. @@ -509,9 +509,8 @@ mod tests { use futures_executor::block_on; use proto::op::{Message, Query}; - use proto::rr::rdata::SRV; + use proto::rr::rdata::{NS, SRV}; use proto::rr::{Name, Record}; - use trust_dns_proto::rr::rdata::NS; use super::*; use crate::lookup_ip::tests::*; diff --git a/crates/resolver/src/config.rs b/crates/resolver/src/config.rs index 348bf911f8..81078c2961 100644 --- a/crates/resolver/src/config.rs +++ b/crates/resolver/src/config.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Configuration for a resolver @@ -274,7 +274,7 @@ impl ResolverConfig { /// use std::sync::Arc; /// /// use rustls::{ClientConfig, ProtocolVersion, RootCertStore, OwnedTrustAnchor}; - /// use trust_dns_resolver::config::ResolverConfig; + /// use hickory_resolver::config::ResolverConfig; /// # #[cfg(feature = "webpki-roots")] /// use webpki_roots; /// @@ -794,7 +794,7 @@ impl NameServerConfigGroup { /// /// ``` /// use std::net::{SocketAddr, Ipv4Addr}; - /// use trust_dns_resolver::config::NameServerConfigGroup; + /// use hickory_resolver::config::NameServerConfigGroup; /// /// let mut group = NameServerConfigGroup::google(); /// group.merge(NameServerConfigGroup::cloudflare()); @@ -986,7 +986,7 @@ pub struct ResolverOpts { impl Default for ResolverOpts { /// Default values for the Resolver configuration. /// - /// This follows the resolv.conf defaults as defined in the [Linux man pages](http://man7.org/linux/man-pages/man5/resolv.conf.5.html) + /// This follows the resolv.conf defaults as defined in the [Linux man pages](https://man7.org/linux/man-pages/man5/resolv.conf.5.html) fn default() -> Self { Self { ndots: 1, diff --git a/crates/resolver/src/dns_lru.rs b/crates/resolver/src/dns_lru.rs index cf2e81dc65..9321749555 100644 --- a/crates/resolver/src/dns_lru.rs +++ b/crates/resolver/src/dns_lru.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! An LRU cache designed for work with DNS lookups diff --git a/crates/resolver/src/dns_sd.rs b/crates/resolver/src/dns_sd.rs index f2de5abd8f..3ee62a322a 100644 --- a/crates/resolver/src/dns_sd.rs +++ b/crates/resolver/src/dns_sd.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! DNS Service Discovery diff --git a/crates/resolver/src/error.rs b/crates/resolver/src/error.rs index fcb2c2632e..cc4d18bd8a 100644 --- a/crates/resolver/src/error.rs +++ b/crates/resolver/src/error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Error types for the crate @@ -67,7 +67,7 @@ pub enum ResolveErrorKind { #[error("io error: {0}")] Io(#[from] std::io::Error), - /// An error got returned by the trust-dns-proto crate + /// An error got returned by the hickory-proto crate #[error("proto error: {0}")] Proto(#[from] ProtoError), diff --git a/crates/resolver/src/h2.rs b/crates/resolver/src/h2.rs index 72f524a867..be823403a1 100644 --- a/crates/resolver/src/h2.rs +++ b/crates/resolver/src/h2.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::future::Future; diff --git a/crates/resolver/src/h3.rs b/crates/resolver/src/h3.rs index 63c6a4e6f4..0fd65734f7 100644 --- a/crates/resolver/src/h3.rs +++ b/crates/resolver/src/h3.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::future::Future; @@ -15,8 +15,8 @@ use proto::h3::{H3ClientConnect, H3ClientStream}; use proto::xfer::{DnsExchange, DnsExchangeConnect}; use proto::TokioTime; +use hickory_proto::udp::{DnsUdpSocket, QuicLocalAddr}; use rustls::ClientConfig as CryptoConfig; -use trust_dns_proto::udp::{DnsUdpSocket, QuicLocalAddr}; #[allow(clippy::type_complexity)] #[allow(unused)] diff --git a/crates/resolver/src/lib.rs b/crates/resolver/src/lib.rs index 42f3199757..bf26ee27f3 100644 --- a/crates/resolver/src/lib.rs +++ b/crates/resolver/src/lib.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The Resolver is responsible for performing recursive queries to lookup domain names. @@ -11,8 +11,8 @@ //! desired is to use the Host OS' resolver, generally in the system's libc, then the //! `std::net::ToSocketAddrs` variant over `&str` should be used. //! -//! Unlike the `trust-dns-client`, this tries to provide a simpler interface to perform DNS -//! queries. For update options, i.e. Dynamic DNS, the `trust-dns-client` crate must be used +//! Unlike the `hickory-client`, this tries to provide a simpler interface to perform DNS +//! queries. For update options, i.e. Dynamic DNS, the `hickory-client` crate must be used //! instead. The Resolver library is capable of searching multiple domains (this can be disabled by //! using an FQDN during lookup), dual-stack IPv4/IPv6 lookups, performing chained CNAME lookups, //! and features connection metric tracking for attempting to pick the best upstream DNS resolver. @@ -22,7 +22,7 @@ //! `Tokio` based async resolver, and can be used inside any `Tokio` based system. //! //! This as best as possible attempts to abide by the DNS RFCs, please file issues at -//! . +//! . //! //! # Usage //! @@ -30,7 +30,7 @@ //! //! ```toml //! [dependency] -//! trust-dns-resolver = "*" +//! hickory-resolver = "*" //! ``` //! //! ## Using the Synchronous Resolver @@ -45,8 +45,8 @@ //! # #[cfg(feature = "tokio-runtime")] //! # { //! use std::net::*; -//! use trust_dns_resolver::Resolver; -//! use trust_dns_resolver::config::*; +//! use hickory_resolver::Resolver; +//! use hickory_resolver::config::*; //! //! // Construct a new Resolver with default configuration options //! let resolver = Resolver::new(ResolverConfig::default(), ResolverOpts::default()).unwrap(); @@ -79,7 +79,7 @@ //! # #[cfg(feature = "tokio-runtime")] //! # { //! # use std::net::*; -//! # use trust_dns_resolver::Resolver; +//! # use hickory_resolver::Resolver; //! // Use the host OS'es `/etc/resolv.conf` //! # #[cfg(unix)] //! let resolver = Resolver::from_system_conf().unwrap(); @@ -100,8 +100,8 @@ //! # { //! use std::net::*; //! use tokio::runtime::Runtime; -//! use trust_dns_resolver::TokioAsyncResolver; -//! use trust_dns_resolver::config::*; +//! use hickory_resolver::TokioAsyncResolver; +//! use hickory_resolver::config::*; //! //! // We need a Tokio Runtime to run the resolver //! // this is responsible for running all Future tasks and registering interest in IO channels @@ -143,8 +143,8 @@ //! # { //! # use std::net::*; //! # use tokio::runtime::Runtime; -//! # use trust_dns_resolver::TokioAsyncResolver; -//! # use trust_dns_resolver::config::*; +//! # use hickory_resolver::TokioAsyncResolver; +//! # use hickory_resolver::config::*; //! # use futures_util::TryFutureExt; //! # //! # let mut io_loop = Runtime::new().unwrap(); @@ -175,14 +175,14 @@ //! //! ## DNS-over-TLS and DNS-over-HTTPS //! -//! DNS-over-TLS and DNS-over-HTTPS are supported in the Trust-DNS Resolver library. The underlying -//! implementations are available as addon libraries. *WARNING* The trust-dns developers make no +//! DNS-over-TLS and DNS-over-HTTPS are supported in the Hickory DNS Resolver library. The underlying +//! implementations are available as addon libraries. *WARNING* The hickory-dns developers make no //! claims on the security and/or privacy guarantees of this implementation. //! //! To use DNS-over-TLS one of the `dns-over-tls` features must be enabled at compile time. There //! are three: `dns-over-openssl`, `dns-over-native-tls`, and `dns-over-rustls`. For DNS-over-HTTPS //! only rustls is supported with the `dns-over-https-rustls`, this implicitly enables support for -//! DNS-over-TLS as well. The reason for each is to make the Trust-DNS libraries flexible for +//! DNS-over-TLS as well. The reason for each is to make the Hickory DNS libraries flexible for //! different deployments, and/or security concerns. The easiest to use will generally be //! `dns-over-rustls` which utilizes the `*ring*` Rust cryptography library (a rework of the //! `boringssl` project), this should compile and be usable on most ARM and x86 platforms. @@ -190,15 +190,15 @@ //! `openssl` where not supported. `dns-over-openssl` will specify that `openssl` should be used //! (which is a perfectly fine option if required). If more than one is specified, the precedence //! will be in this order (i.e. only one can be used at a time) `dns-over-rustls`, -//! `dns-over-native-tls`, and then `dns-over-openssl`. *NOTICE* the trust-dns developers are not +//! `dns-over-native-tls`, and then `dns-over-openssl`. **NOTICE** the Hickory DNS developers are not //! responsible for any choice of library that does not meet required security requirements. //! //! ### Example //! -//! Enable the TLS library through the dependency on `trust-dns-resolver`: +//! Enable the TLS library through the dependency on `hickory-resolver`: //! //! ```toml -//! trust-dns-resolver = { version = "*", features = ["dns-over-rustls"] } +//! hickory-resolver = { version = "*", features = ["dns-over-rustls"] } //! ``` //! //! A default TLS configuration is available for Cloudflare's `1.1.1.1` DNS service (Quad9 as @@ -208,8 +208,8 @@ //! # fn main() { //! # #[cfg(feature = "tokio-runtime")] //! # { -//! use trust_dns_resolver::Resolver; -//! use trust_dns_resolver::config::*; +//! use hickory_resolver::Resolver; +//! use hickory_resolver::config::*; //! //! // Construct a new Resolver with default configuration options //! # #[cfg(feature = "dns-over-tls")] @@ -222,7 +222,7 @@ //! //! ## mDNS (multicast DNS) //! -//! Multicast DNS is an experimental feature in Trust-DNS at the moment. Its support on different +//! Multicast DNS is an experimental feature in Hickory DNS at the moment. Its support on different //! platforms is not yet ideal. Initial support is only for IPv4 mDNS, as there are some //! complexities to figure out with IPv6. Once enabled, an mDNS `NameServer` will automatically be //! added to the `Resolver` and used for any lookups performed in the `.local.` zone. @@ -251,7 +251,7 @@ extern crate cfg_if; #[cfg(feature = "serde-config")] #[macro_use] extern crate serde; -pub extern crate trust_dns_proto as proto; +pub extern crate hickory_proto as proto; mod async_resolver; pub mod caching_client; @@ -300,13 +300,13 @@ pub use resolver::Resolver; /// # Note /// /// For users of `ResolverFuture`, the return type for `ResolverFuture::new` -/// has changed since version 0.9 of `trust-dns-resolver`. It now returns +/// has changed since version 0.9 of `hickory-resolver`. It now returns /// a tuple of an [`AsyncResolver`] _and_ a background future, which must /// be spawned on a reactor before any lookup futures will run. /// /// See the [`AsyncResolver`] documentation for more information on how to /// use the background future. -#[deprecated(note = "use [`trust_dns_resolver::AsyncResolver`] instead")] +#[deprecated(note = "use [`hickory_resolver::AsyncResolver`] instead")] #[cfg(feature = "tokio-runtime")] #[cfg_attr(docsrs, doc(cfg(feature = "tokio-runtime")))] pub type ResolverFuture = TokioAsyncResolver; diff --git a/crates/resolver/src/lookup.rs b/crates/resolver/src/lookup.rs index f299b086ff..a3649f65cd 100644 --- a/crates/resolver/src/lookup.rs +++ b/crates/resolver/src/lookup.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Lookup result from a resolution of ipv4 and ipv6 records with a Resolver. @@ -44,7 +44,7 @@ use crate::{ #[cfg(feature = "dnssec")] use proto::DnssecDnsHandle; -/// Result of a DNS query when querying for any record type supported by the Trust-DNS Proto library. +/// Result of a DNS query when querying for any record type supported by the Hickory DNS Proto library. /// /// For IP resolution see LookupIp, as it has more features for A and AAAA lookups. #[derive(Clone, Debug, Eq, PartialEq)] @@ -335,7 +335,7 @@ impl SrvLookup { /// Returns the list of IPs associated with the SRV record. /// - /// *Note*: That Trust-DNS performs a recursive lookup on SRV records for IPs if they were not included in the original request. If there are no IPs associated to the result, a subsequent query for the IPs via the `srv.target()` should not resolve to the IPs. + /// *Note*: That Hickory DNS performs a recursive lookup on SRV records for IPs if they were not included in the original request. If there are no IPs associated to the result, a subsequent query for the IPs via the `srv.target()` should not resolve to the IPs. pub fn ip_iter(&self) -> LookupIpIter<'_> { LookupIpIter(self.0.iter()) } diff --git a/crates/resolver/src/lookup_ip.rs b/crates/resolver/src/lookup_ip.rs index f9806725f8..220158fb3e 100644 --- a/crates/resolver/src/lookup_ip.rs +++ b/crates/resolver/src/lookup_ip.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! LookupIp result from a resolution of ipv4 and ipv6 records with a Resolver. diff --git a/crates/resolver/src/name_server/connection_provider.rs b/crates/resolver/src/name_server/connection_provider.rs index ea071a4368..32750b0137 100644 --- a/crates/resolver/src/name_server/connection_provider.rs +++ b/crates/resolver/src/name_server/connection_provider.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::io; @@ -31,6 +31,8 @@ use tokio_openssl::SslStream as TokioTlsStream; use tokio_rustls::client::TlsStream as TokioTlsStream; use crate::config::{NameServerConfig, Protocol, ResolverOpts}; +#[cfg(any(feature = "dns-over-quic", feature = "dns-over-h3"))] +use hickory_proto::udp::QuicLocalAddr; #[cfg(feature = "dns-over-https")] use proto::h2::{HttpsClientConnect, HttpsClientStream}; #[cfg(feature = "dns-over-h3")] @@ -57,8 +59,6 @@ use proto::{ }; #[cfg(feature = "tokio-runtime")] use proto::{iocompat::AsyncIoTokioAsStd, TokioTime}; -#[cfg(any(feature = "dns-over-quic", feature = "dns-over-h3"))] -use trust_dns_proto::udp::QuicLocalAddr; use crate::error::ResolveError; diff --git a/crates/resolver/src/name_server/mod.rs b/crates/resolver/src/name_server/mod.rs index 93a005dadb..a0ba8f6d98 100644 --- a/crates/resolver/src/name_server/mod.rs +++ b/crates/resolver/src/name_server/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! A module with associated items for working with nameservers diff --git a/crates/resolver/src/name_server/name_server.rs b/crates/resolver/src/name_server/name_server.rs index 1b9d1baa9d..4708f90166 100644 --- a/crates/resolver/src/name_server/name_server.rs +++ b/crates/resolver/src/name_server/name_server.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::cmp::Ordering; diff --git a/crates/resolver/src/name_server/name_server_pool.rs b/crates/resolver/src/name_server/name_server_pool.rs index 0aa0171a71..da0d2dc6a7 100644 --- a/crates/resolver/src/name_server/name_server_pool.rs +++ b/crates/resolver/src/name_server/name_server_pool.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::cmp::Ordering; @@ -475,10 +475,10 @@ mod tests { use tokio::runtime::Runtime; + use hickory_proto::rr::RData; use proto::op::Query; use proto::rr::{Name, RecordType}; use proto::xfer::{DnsHandle, DnsRequestOptions}; - use trust_dns_proto::rr::RData; use super::*; use crate::config::NameServerConfig; diff --git a/crates/resolver/src/name_server/name_server_state.rs b/crates/resolver/src/name_server/name_server_state.rs index 9edbd43142..3e41cd9376 100644 --- a/crates/resolver/src/name_server/name_server_state.rs +++ b/crates/resolver/src/name_server/name_server_state.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::cmp::Ordering; diff --git a/crates/resolver/src/name_server/name_server_stats.rs b/crates/resolver/src/name_server/name_server_stats.rs index 86613adf49..aa9ee0d88e 100644 --- a/crates/resolver/src/name_server/name_server_stats.rs +++ b/crates/resolver/src/name_server/name_server_stats.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::cmp::Ordering; @@ -46,7 +46,7 @@ pub(crate) struct NameServerStats { /// value. Note that this decay is only applied at read time. /// /// For the original discussion regarding this algorithm, see - /// https://github.com/bluejekyll/trust-dns/issues/1702. + /// https://github.com/hickory-dns/hickory-dns/issues/1702. srtt_microseconds: AtomicU32, /// The last time the `srtt_microseconds` value was updated. diff --git a/crates/resolver/src/quic.rs b/crates/resolver/src/quic.rs index 182ac34bef..33fa29af86 100644 --- a/crates/resolver/src/quic.rs +++ b/crates/resolver/src/quic.rs @@ -1,19 +1,19 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. +use hickory_proto::udp::QuicLocalAddr; use rustls::ClientConfig as CryptoConfig; use std::future::Future; use std::net::SocketAddr; -use trust_dns_proto::udp::QuicLocalAddr; +use hickory_proto::quic::{QuicClientConnect, QuicClientStream}; use proto::udp::DnsUdpSocket; use proto::xfer::{DnsExchange, DnsExchangeConnect}; use proto::TokioTime; -use trust_dns_proto::quic::{QuicClientConnect, QuicClientStream}; use crate::config::TlsClientConfig; use crate::tls::CLIENT_CONFIG; diff --git a/crates/resolver/src/resolver.rs b/crates/resolver/src/resolver.rs index d956d97556..169734fff7 100644 --- a/crates/resolver/src/resolver.rs +++ b/crates/resolver/src/resolver.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Structs for creating and using a Resolver @@ -27,7 +27,7 @@ use crate::AsyncResolver; /// /// For forward (A) lookups, hostname -> IP address, see: `Resolver::lookup_ip` /// -/// Special note about resource consumption. The Resolver and all Trust-DNS software is built around the Tokio async-io library. This synchronous Resolver is intended to be a simpler wrapper for of the [`AsyncResolver`]. To allow the `Resolver` to be [`Send`] + [`Sync`], the construction of the `AsyncResolver` is lazy, this means some of the features of the `AsyncResolver`, like performance based resolution via the most efficient `NameServer` will be lost (the lookup cache is shared across invocations of the `Resolver`). If these other features of the Trust-DNS Resolver are desired, please use the tokio based [`AsyncResolver`]. +/// Special note about resource consumption. The Resolver and all Hickory DNS software is built around the Tokio async-io library. This synchronous Resolver is intended to be a simpler wrapper for of the [`AsyncResolver`]. To allow the `Resolver` to be [`Send`] + [`Sync`], the construction of the `AsyncResolver` is lazy, this means some of the features of the `AsyncResolver`, like performance based resolution via the most efficient `NameServer` will be lost (the lookup cache is shared across invocations of the `Resolver`). If these other features of the Hickory DNS Resolver are desired, please use the tokio based [`AsyncResolver`]. /// /// *Note: Threaded/Sync usage*: In multithreaded scenarios, the internal Tokio Runtime will block on an internal Mutex for the tokio Runtime in use. For higher performance, it's recommended to use the [`AsyncResolver`]. pub struct Resolver { diff --git a/crates/resolver/src/system_conf/mod.rs b/crates/resolver/src/system_conf/mod.rs index caf7f79b06..3557ea83e5 100644 --- a/crates/resolver/src/system_conf/mod.rs +++ b/crates/resolver/src/system_conf/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! System configuration loading diff --git a/crates/resolver/src/system_conf/unix.rs b/crates/resolver/src/system_conf/unix.rs index b0603ab2c9..44393091c0 100644 --- a/crates/resolver/src/system_conf/unix.rs +++ b/crates/resolver/src/system_conf/unix.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! System configuration loading diff --git a/crates/resolver/src/system_conf/windows.rs b/crates/resolver/src/system_conf/windows.rs index c4f73c7cb3..538bc79931 100644 --- a/crates/resolver/src/system_conf/windows.rs +++ b/crates/resolver/src/system_conf/windows.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! System configuration loading for windows diff --git a/crates/resolver/src/tls/dns_over_native_tls.rs b/crates/resolver/src/tls/dns_over_native_tls.rs index 11b5b11a7a..c3acba7f1a 100644 --- a/crates/resolver/src/tls/dns_over_native_tls.rs +++ b/crates/resolver/src/tls/dns_over_native_tls.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(feature = "dns-over-native-tls")] diff --git a/crates/resolver/src/tls/dns_over_openssl.rs b/crates/resolver/src/tls/dns_over_openssl.rs index 5f9c5dd34b..f0a5b407a9 100644 --- a/crates/resolver/src/tls/dns_over_openssl.rs +++ b/crates/resolver/src/tls/dns_over_openssl.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(feature = "dns-over-openssl")] diff --git a/crates/resolver/src/tls/dns_over_rustls.rs b/crates/resolver/src/tls/dns_over_rustls.rs index 6d2d13455b..865aebf127 100644 --- a/crates/resolver/src/tls/dns_over_rustls.rs +++ b/crates/resolver/src/tls/dns_over_rustls.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(feature = "dns-over-rustls")] diff --git a/crates/resolver/src/tls/mod.rs b/crates/resolver/src/tls/mod.rs index 294ffa6277..2ec7f4f788 100644 --- a/crates/resolver/src/tls/mod.rs +++ b/crates/resolver/src/tls/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![cfg(feature = "dns-over-tls")] diff --git a/crates/resolver/tests/resolv.conf-linux b/crates/resolver/tests/resolv.conf-linux index a9be69a327..03e19facca 100644 --- a/crates/resolver/tests/resolv.conf-linux +++ b/crates/resolver/tests/resolv.conf-linux @@ -1,4 +1,4 @@ -# Not all of these are supported by Trust-DNS +# Not all of these are supported by Hickory DNS # They are testing that they don't break parsing options ndots:8 timeout:8 attempts:8 @@ -10,7 +10,7 @@ nameserver 2001:4860:4860::8844 nameserver 8.8.8.8 nameserver 8.8.4.4 -# some options not supported by Trust-DNS +# some options not supported by Hickory DNS options rotate options inet6 no-tld-query diff --git a/crates/server/Cargo.toml b/crates/server/Cargo.toml index 7464838992..e829255904 100644 --- a/crates/server/Cargo.toml +++ b/crates/server/Cargo.toml @@ -1,20 +1,20 @@ [package] -name = "trust-dns-server" +name = "hickory-server" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS is a safe and secure DNS server with DNSSEC support. +Hickory DNS is a safe and secure DNS server with DNSSEC support. Eventually this could be a replacement for BIND9. The DNSSEC support allows for live signing of all records, in it does not currently support records signed offline. The server supports dynamic DNS with SIG0 authenticated - requests. Trust-DNS is based on the Tokio and Futures libraries, which means + requests. Hickory DNS is based on the Tokio and Futures libraries, which means it should be easily integrated into other software that also use those libraries. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/trust-dns-server" +documentation = "https://docs.rs/hickory-server" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -31,44 +31,82 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] -backtrace = ["trust-dns-proto/backtrace"] -dnssec-openssl = ["dnssec", "openssl", "trust-dns-proto/dnssec-openssl", "trust-dns-resolver/dnssec-openssl"] -dnssec-ring = ["dnssec", "trust-dns-proto/dnssec-ring", "trust-dns-resolver/dnssec-ring"] +backtrace = ["hickory-proto/backtrace"] +dnssec-openssl = [ + "dnssec", + "openssl", + "hickory-proto/dnssec-openssl", + "hickory-resolver/dnssec-openssl", +] +dnssec-ring = [ + "dnssec", + "hickory-proto/dnssec-ring", + "hickory-resolver/dnssec-ring", +] dnssec = [] # Recursive Resolution is Experimental! -recursor = ["trust-dns-recursor"] -resolver = ["trust-dns-resolver"] +recursor = ["hickory-recursor"] +resolver = ["hickory-resolver"] sqlite = ["rusqlite"] toml = ["dep:basic-toml"] # TODO: Need to figure out how to be consistent with ring/openssl usage... -# dns-over-https-openssl = ["dns-over-openssl", "trust-dns-client/dns-over-https-openssl", "dns-over-https"] -dns-over-https-rustls = ["dns-over-https", "trust-dns-proto/dns-over-https-rustls", "trust-dns-resolver/dns-over-https-rustls", "dns-over-rustls", "tokio-rustls"] -dns-over-https = ["h2", "http", "trust-dns-proto/dns-over-https"] +# dns-over-https-openssl = ["dns-over-openssl", "hickory-client/dns-over-https-openssl", "dns-over-https"] +dns-over-https-rustls = [ + "dns-over-https", + "hickory-proto/dns-over-https-rustls", + "hickory-resolver/dns-over-https-rustls", + "dns-over-rustls", + "tokio-rustls", +] +dns-over-https = ["h2", "http", "hickory-proto/dns-over-https"] # TODO: migrate all tls and tls-openssl features to dns-over-tls, et al -dns-over-openssl = ["dns-over-tls", "dnssec-openssl", "trust-dns-proto/dns-over-openssl", "tokio-openssl", "trust-dns-resolver/dns-over-openssl"] -dns-over-rustls = ["dns-over-tls", "dnssec-ring", "rustls", "trust-dns-proto/dns-over-rustls", "trust-dns-resolver/dns-over-rustls", "tokio-rustls"] +dns-over-openssl = [ + "dns-over-tls", + "dnssec-openssl", + "hickory-proto/dns-over-openssl", + "tokio-openssl", + "hickory-resolver/dns-over-openssl", +] +dns-over-rustls = [ + "dns-over-tls", + "dnssec-ring", + "rustls", + "hickory-proto/dns-over-rustls", + "hickory-resolver/dns-over-rustls", + "tokio-rustls", +] dns-over-tls = [] -dns-over-quic = ["dns-over-rustls", "trust-dns-proto/dns-over-quic", "trust-dns-resolver/dns-over-quic"] -dns-over-h3 = ["dns-over-rustls", "h3", "h3-quinn", "trust-dns-proto/dns-over-h3", "trust-dns-resolver/dns-over-h3"] +dns-over-quic = [ + "dns-over-rustls", + "hickory-proto/dns-over-quic", + "hickory-resolver/dns-over-quic", +] +dns-over-h3 = [ + "dns-over-rustls", + "h3", + "h3-quinn", + "hickory-proto/dns-over-h3", + "hickory-resolver/dns-over-h3", +] # This is a deprecated feature... tls-openssl = ["dns-over-openssl"] tls = ["dns-over-openssl"] # WARNING: there is a bug in the mutual tls auth code at the moment see issue #100 -# mtls = ["trust-dns-client/mtls"] +# mtls = ["hickory-client/mtls"] testing = [] [lib] -name = "trust_dns_server" +name = "hickory_server" path = "src/lib.rs" [dependencies] @@ -77,7 +115,9 @@ basic-toml = { workspace = true, optional = true } bytes.workspace = true cfg-if.workspace = true enum-as-inner.workspace = true -futures-util = { workspace = true, default-features = false, features = ["std"] } +futures-util = { workspace = true, default-features = false, features = [ + "std", +] } h2 = { workspace = true, features = ["stream"], optional = true } h3 = { workspace = true, optional = true } h3-quinn = { workspace = true, optional = true } @@ -93,14 +133,29 @@ tokio = { workspace = true, features = ["macros", "net", "sync"] } tokio-openssl = { workspace = true, optional = true } tokio-rustls = { workspace = true, optional = true } tokio-util.workspace = true -trust-dns-proto = { workspace = true, features = ["text-parsing", "tokio-runtime"] } -trust-dns-recursor = { workspace = true, features = ["serde-config"], optional = true } -trust-dns-resolver = { workspace = true, features = ["serde-config", "system-config", "tokio-runtime"], optional = true } +hickory-proto = { workspace = true, features = [ + "text-parsing", + "tokio-runtime", +] } +hickory-recursor = { workspace = true, features = [ + "serde-config", +], optional = true } +hickory-resolver = { workspace = true, features = [ + "serde-config", + "system-config", + "tokio-runtime", +], optional = true } [dev-dependencies] -futures-executor = { workspace = true, default-features = false, features = ["std"] } +futures-executor = { workspace = true, default-features = false, features = [ + "std", +] } tokio = { workspace = true, features = ["macros", "rt"] } -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } [package.metadata.docs.rs] all-features = true diff --git a/crates/server/LICENSE-APACHE b/crates/server/LICENSE-APACHE index 8f71f43fee..d5dd862b17 100644 --- a/crates/server/LICENSE-APACHE +++ b/crates/server/LICENSE-APACHE @@ -1,6 +1,6 @@ Apache License Version 2.0, January 2004 - http://www.apache.org/licenses/ + https://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION @@ -192,7 +192,7 @@ you may not use this file except in compliance with the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 + https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, diff --git a/crates/server/LICENSE-MIT b/crates/server/LICENSE-MIT index b497b098ee..cc6341a36e 100644 --- a/crates/server/LICENSE-MIT +++ b/crates/server/LICENSE-MIT @@ -1,4 +1,4 @@ -Copyright (c) 2015 The trust-dns Developers +Copyright (c) 2015 The Hickory DNS Developers Copyright (c) 2017 Google LLC. Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/crates/server/README.md b/crates/server/README.md index 21ebd9f26d..557d3a6e53 100644 --- a/crates/server/README.md +++ b/crates/server/README.md @@ -1,8 +1,10 @@ # Overview -Trust-DNS Server is a library which implements the zone authoritory functionality. +Hickory DNS Server is a library which implements the zone authoritory functionality. -This library contains basic implementations for DNS zone hosting. It is capable of performing signing all records in the zone for server DNSSEC RRSIG records associated with all records in a zone. There is also a `trust-dns` binary that can be generated from the library with `cargo install trust-dns`. Dynamic updates are supported via `SIG0` (an mTLS authentication method is under development). +This library contains basic implementations for DNS zone hosting. It is capable of performing signing all records in the zone for server DNSSEC RRSIG records associated with all records in a zone. There is also a `hickory-dns` binary that can be generated from the library with `cargo install hickory-dns`. Dynamic updates are supported via `SIG0` (an mTLS authentication method is under development). + +**NOTICE** This project was rebranded from Trust-DNS to Hickory DNS and has been moved to the https://github.com/hickory-dns/hickory-dns organization and repo, this crate/binary has been moved to [hickory-server](https://crates.io/crates/hickory-server), from `0.24` and onward, for prior versions see [trust-dns-server](https://crates.io/crates/trust-dns-server). ## Features @@ -28,4 +30,4 @@ The current minimum rustc version for this project is `1.67` ## Versioning -Trust-DNS does it's best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does it's best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/crates/server/src/authority/auth_lookup.rs b/crates/server/src/authority/auth_lookup.rs index 3b3e57a294..4fcd25fe45 100644 --- a/crates/server/src/authority/auth_lookup.rs +++ b/crates/server/src/authority/auth_lookup.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::iter::Chain; diff --git a/crates/server/src/authority/authority.rs b/crates/server/src/authority/authority.rs index 743cd7a569..4bc67ffed3 100644 --- a/crates/server/src/authority/authority.rs +++ b/crates/server/src/authority/authority.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All authority related types diff --git a/crates/server/src/authority/authority_object.rs b/crates/server/src/authority/authority_object.rs index 825d93d078..6e319cce56 100644 --- a/crates/server/src/authority/authority_object.rs +++ b/crates/server/src/authority/authority_object.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All authority related types diff --git a/crates/server/src/authority/catalog.rs b/crates/server/src/authority/catalog.rs index b7457bbbe3..cd311e1084 100644 --- a/crates/server/src/authority/catalog.rs +++ b/crates/server/src/authority/catalog.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. // TODO, I've implemented this as a separate entity from the cache, but I wonder if the cache diff --git a/crates/server/src/authority/error.rs b/crates/server/src/authority/error.rs index 2da07d5f4e..71058ddee1 100644 --- a/crates/server/src/authority/error.rs +++ b/crates/server/src/authority/error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::io; @@ -11,7 +11,7 @@ use enum_as_inner::EnumAsInner; use thiserror::Error; use crate::proto::op::ResponseCode; -#[cfg(feature = "trust-dns-resolver")] +#[cfg(feature = "hickory-resolver")] use crate::resolver::error::ResolveError; // TODO: should this implement Failure? @@ -27,15 +27,15 @@ pub enum LookupError { #[error("Error performing lookup: {0}")] ResponseCode(ResponseCode), /// Resolve Error - #[cfg(feature = "trust-dns-resolver")] + #[cfg(feature = "hickory-resolver")] #[cfg_attr(docsrs, doc(cfg(feature = "resolver")))] #[error("Forward resolution error: {0}")] ResolveError(#[from] ResolveError), /// Recursive Resolver Error - #[cfg(feature = "trust-dns-recursor")] + #[cfg(feature = "hickory-recursor")] #[cfg_attr(docsrs, doc(cfg(feature = "recursor")))] #[error("Recursive resolution error: {0}")] - RecursiveError(#[from] trust_dns_recursor::Error), + RecursiveError(#[from] hickory_recursor::Error), /// An underlying IO error occurred #[error("io error: {0}")] Io(io::Error), diff --git a/crates/server/src/authority/message_request.rs b/crates/server/src/authority/message_request.rs index c76b8802f6..b2abb65e41 100644 --- a/crates/server/src/authority/message_request.rs +++ b/crates/server/src/authority/message_request.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::iter::once; diff --git a/crates/server/src/authority/message_response.rs b/crates/server/src/authority/message_response.rs index d8b9c23c40..8ce90b34ab 100644 --- a/crates/server/src/authority/message_response.rs +++ b/crates/server/src/authority/message_response.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use crate::{ diff --git a/crates/server/src/authority/mod.rs b/crates/server/src/authority/mod.rs index 29974c54e8..c60fa847f6 100644 --- a/crates/server/src/authority/mod.rs +++ b/crates/server/src/authority/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Module for `Catalog` of `Authority` zones which are responsible for storing `RRSet` records. diff --git a/crates/server/src/authority/zone_type.rs b/crates/server/src/authority/zone_type.rs index 9acee180de..0b46c1e4a3 100644 --- a/crates/server/src/authority/zone_type.rs +++ b/crates/server/src/authority/zone_type.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![allow(deprecated, clippy::use_self)] diff --git a/crates/server/src/config/dnssec.rs b/crates/server/src/config/dnssec.rs index 3f235406b9..40ba294b77 100644 --- a/crates/server/src/config/dnssec.rs +++ b/crates/server/src/config/dnssec.rs @@ -1,11 +1,11 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. -//! Configuration types for all security options in trust-dns +//! Configuration types for all security options in hickory-dns use std::path::Path; @@ -245,7 +245,7 @@ impl TlsCertConfig { /// set of DNSSEC algorithms to use to sign the zone. enable_dnssec must be true. /// these will be looked up by $file.{key_name}.pem, for backward compatibility -/// with previous versions of Trust-DNS, if enable_dnssec is enabled but +/// with previous versions of Hickory DNS, if enable_dnssec is enabled but /// supported_algorithms is not specified, it will default to "RSASHA256" and /// look for the $file.pem for the key. To control key length, or other options /// keys of the specified formats can be generated in PEM format. Instructions diff --git a/crates/server/src/config/mod.rs b/crates/server/src/config/mod.rs index 33c6f10aff..577dadbfe9 100644 --- a/crates/server/src/config/mod.rs +++ b/crates/server/src/config/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Configuration module for the server binary, `named`. diff --git a/crates/server/src/error/config_error.rs b/crates/server/src/error/config_error.rs index 85827b3912..b5466eab9b 100644 --- a/crates/server/src/error/config_error.rs +++ b/crates/server/src/error/config_error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{fmt, io}; diff --git a/crates/server/src/error/mod.rs b/crates/server/src/error/mod.rs index 266124a90e..bbe956a18e 100644 --- a/crates/server/src/error/mod.rs +++ b/crates/server/src/error/mod.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -14,7 +14,7 @@ * limitations under the License. */ -//! All defined errors for Trust-DNS +//! All defined errors for Hickory DNS mod config_error; mod persistence_error; diff --git a/crates/server/src/error/persistence_error.rs b/crates/server/src/error/persistence_error.rs index 21dacc75dd..b78447a88e 100644 --- a/crates/server/src/error/persistence_error.rs +++ b/crates/server/src/error/persistence_error.rs @@ -1,8 +1,8 @@ // Copyright 2015-2020 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt; @@ -34,7 +34,7 @@ pub enum ErrorKind { }, // foreign - /// An error got returned by the trust-dns-proto crate + /// An error got returned by the hickory-proto crate #[error("proto error: {0}")] Proto(#[from] ProtoError), diff --git a/crates/server/src/lib.rs b/crates/server/src/lib.rs index 539c9fc98c..a1b06deca4 100644 --- a/crates/server/src/lib.rs +++ b/crates/server/src/lib.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -35,7 +35,7 @@ #![recursion_limit = "2048"] #![cfg_attr(docsrs, feature(doc_cfg))] -//! Trust-DNS is intended to be a fully compliant domain name server and client library. +//! Hickory DNS is intended to be a fully compliant domain name server and client library. //! //! # Goals //! @@ -46,13 +46,13 @@ //! * Secure dynamic update //! * New features for securing public information -pub use trust_dns_proto as proto; -#[cfg(feature = "trust-dns-recursor")] +pub use hickory_proto as proto; +#[cfg(feature = "hickory-recursor")] #[cfg_attr(docsrs, doc(cfg(feature = "recursor")))] -pub use trust_dns_recursor as recursor; -#[cfg(feature = "trust-dns-resolver")] +pub use hickory_recursor as recursor; +#[cfg(feature = "hickory-resolver")] #[cfg_attr(docsrs, doc(cfg(feature = "resolver")))] -pub use trust_dns_resolver as resolver; +pub use hickory_resolver as resolver; pub mod authority; pub mod config; @@ -62,7 +62,7 @@ pub mod store; pub use self::server::ServerFuture; -/// Returns the current version of Trust-DNS +/// Returns the current version of Hickory DNS pub fn version() -> &'static str { env!("CARGO_PKG_VERSION") } diff --git a/crates/server/src/server/h2_handler.rs b/crates/server/src/server/h2_handler.rs index bda81356b1..fdb6d59334 100644 --- a/crates/server/src/server/h2_handler.rs +++ b/crates/server/src/server/h2_handler.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{io, net::SocketAddr, sync::Arc}; @@ -10,10 +10,10 @@ use std::{io, net::SocketAddr, sync::Arc}; use bytes::{Bytes, BytesMut}; use futures_util::lock::Mutex; use h2::server; +use hickory_proto::{http::Version, rr::Record}; use tokio::io::{AsyncRead, AsyncWrite}; use tokio_util::sync::CancellationToken; use tracing::{debug, warn}; -use trust_dns_proto::{http::Version, rr::Record}; use crate::{ authority::MessageResponse, diff --git a/crates/server/src/server/h3_handler.rs b/crates/server/src/server/h3_handler.rs index 62cd1b8ff9..b26bf0b970 100644 --- a/crates/server/src/server/h3_handler.rs +++ b/crates/server/src/server/h3_handler.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{io, net::SocketAddr, sync::Arc}; @@ -11,11 +11,11 @@ use bytes::{Buf, Bytes}; use futures_util::lock::Mutex; use h3::server::RequestStream; use h3_quinn::BidiStream; -use tokio_util::sync::CancellationToken; -use tracing::{debug, warn}; -use trust_dns_proto::{ +use hickory_proto::{ error::ProtoError, h3::h3_server::H3Connection, h3::H3Error, http::Version, rr::Record, }; +use tokio_util::sync::CancellationToken; +use tracing::{debug, warn}; use crate::{ authority::MessageResponse, diff --git a/crates/server/src/server/mod.rs b/crates/server/src/server/mod.rs index 7b09147558..94f9618d0b 100644 --- a/crates/server/src/server/mod.rs +++ b/crates/server/src/server/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! `Server` component for hosting a domain name servers operations. diff --git a/crates/server/src/server/protocol.rs b/crates/server/src/server/protocol.rs index 4b4bf32d9f..8ef3a78636 100644 --- a/crates/server/src/server/protocol.rs +++ b/crates/server/src/server/protocol.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::fmt; diff --git a/crates/server/src/server/quic_handler.rs b/crates/server/src/server/quic_handler.rs index 6ecc8ffde3..39316ec5de 100644 --- a/crates/server/src/server/quic_handler.rs +++ b/crates/server/src/server/quic_handler.rs @@ -1,21 +1,21 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{io, net::SocketAddr, sync::Arc}; use bytes::{Bytes, BytesMut}; use futures_util::lock::Mutex; -use tokio_util::sync::CancellationToken; -use tracing::{debug, warn}; -use trust_dns_proto::{ +use hickory_proto::{ error::ProtoError, quic::{DoqErrorCode, QuicStream}, rr::Record, }; +use tokio_util::sync::CancellationToken; +use tracing::{debug, warn}; use crate::{ authority::MessageResponse, diff --git a/crates/server/src/server/request_handler.rs b/crates/server/src/server/request_handler.rs index 61040a1e7d..d35d97393d 100644 --- a/crates/server/src/server/request_handler.rs +++ b/crates/server/src/server/request_handler.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Request Handler for incoming requests diff --git a/crates/server/src/server/response_handler.rs b/crates/server/src/server/response_handler.rs index 89888e5816..e493b0baf7 100644 --- a/crates/server/src/server/response_handler.rs +++ b/crates/server/src/server/response_handler.rs @@ -1,14 +1,14 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{io, net::SocketAddr}; +use hickory_proto::rr::Record; use tracing::{debug, trace}; -use trust_dns_proto::rr::Record; use crate::server::Protocol; use crate::{ @@ -79,7 +79,7 @@ impl ResponseHandle { edns.max_payload() } else { // No EDNS, use the recommended max from RFC6891. - trust_dns_proto::udp::MAX_RECEIVE_BUFFER_SIZE as u16 + hickory_proto::udp::MAX_RECEIVE_BUFFER_SIZE as u16 } } _ => u16::MAX, diff --git a/crates/server/src/server/server_future.rs b/crates/server/src/server/server_future.rs index 36378dc30e..d5bbc5704e 100644 --- a/crates/server/src/server/server_future.rs +++ b/crates/server/src/server/server_future.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{ io, @@ -12,12 +12,12 @@ use std::{ }; use futures_util::{FutureExt, StreamExt}; +use hickory_proto::{op::MessageType, rr::Record}; #[cfg(feature = "dns-over-rustls")] use rustls::{Certificate, PrivateKey, ServerConfig}; use tokio::{net, task::JoinSet}; use tokio_util::sync::CancellationToken; use tracing::{debug, info, warn}; -use trust_dns_proto::{op::MessageType, rr::Record}; #[cfg(all(feature = "dns-over-openssl", not(feature = "dns-over-rustls")))] use crate::proto::openssl::tls_server::*; @@ -1332,9 +1332,9 @@ mod tests { #[cfg(feature = "dns-over-rustls")] fn rustls_cert_key() -> (Vec, PrivateKey) { + use hickory_proto::rustls::tls_server; use std::env; use std::path::Path; - use trust_dns_proto::rustls::tls_server; let server_path = env::var("TDNS_WORKSPACE_ROOT").unwrap_or_else(|_| "../..".to_owned()); diff --git a/crates/server/src/store/config.rs b/crates/server/src/store/config.rs index ecba0aba88..f17031254b 100644 --- a/crates/server/src/store/config.rs +++ b/crates/server/src/store/config.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Configuration for the stores @@ -10,9 +10,9 @@ use serde::Deserialize; use crate::store::file::FileConfig; -#[cfg(feature = "trust-dns-resolver")] +#[cfg(feature = "hickory-resolver")] use crate::store::forwarder::ForwardConfig; -#[cfg(feature = "trust-dns-recursor")] +#[cfg(feature = "hickory-recursor")] use crate::store::recursor::RecursiveConfig; #[cfg(feature = "sqlite")] use crate::store::sqlite::SqliteConfig; @@ -30,11 +30,11 @@ pub enum StoreConfig { #[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))] Sqlite(SqliteConfig), /// Forwarding Resolver - #[cfg(feature = "trust-dns-resolver")] + #[cfg(feature = "hickory-resolver")] #[cfg_attr(docsrs, doc(cfg(feature = "resolver")))] Forward(ForwardConfig), /// Recursive Resolver - #[cfg(feature = "trust-dns-recursor")] + #[cfg(feature = "hickory-recursor")] #[cfg_attr(docsrs, doc(cfg(feature = "recursor")))] Recursor(RecursiveConfig), } diff --git a/crates/server/src/store/file/authority.rs b/crates/server/src/store/file/authority.rs index 01064953d9..6cf86c8f84 100644 --- a/crates/server/src/store/file/authority.rs +++ b/crates/server/src/store/file/authority.rs @@ -1,8 +1,8 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All authority related types diff --git a/crates/server/src/store/file/config.rs b/crates/server/src/store/file/config.rs index 5a677b6b53..e83ce09fc8 100644 --- a/crates/server/src/store/file/config.rs +++ b/crates/server/src/store/file/config.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use serde::Deserialize; diff --git a/crates/server/src/store/file/mod.rs b/crates/server/src/store/file/mod.rs index e735f10c67..f73aaba449 100644 --- a/crates/server/src/store/file/mod.rs +++ b/crates/server/src/store/file/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Zone file based serving with Dynamic DNS and journaling support diff --git a/crates/server/src/store/forwarder/authority.rs b/crates/server/src/store/forwarder/authority.rs index a5f94560c6..6e1b8cc081 100644 --- a/crates/server/src/store/forwarder/authority.rs +++ b/crates/server/src/store/forwarder/authority.rs @@ -1,14 +1,14 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::io; +use hickory_resolver::name_server::TokioConnectionProvider; use tracing::{debug, info}; -use trust_dns_resolver::name_server::TokioConnectionProvider; use crate::{ authority::{ @@ -25,7 +25,7 @@ use crate::{ /// An authority that will forward resolutions to upstream resolvers. /// -/// This uses the trust-dns-resolver for resolving requests. +/// This uses the hickory-resolver for resolving requests. pub struct ForwardAuthority { origin: LowerName, resolver: TokioAsyncResolver, diff --git a/crates/server/src/store/forwarder/config.rs b/crates/server/src/store/forwarder/config.rs index b4903445d2..1c5738943a 100644 --- a/crates/server/src/store/forwarder/config.rs +++ b/crates/server/src/store/forwarder/config.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use serde::Deserialize; diff --git a/crates/server/src/store/forwarder/mod.rs b/crates/server/src/store/forwarder/mod.rs index 8174dd766f..2b5116eb02 100644 --- a/crates/server/src/store/forwarder/mod.rs +++ b/crates/server/src/store/forwarder/mod.rs @@ -1,11 +1,11 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. -#![cfg(feature = "trust-dns-resolver")] +#![cfg(feature = "hickory-resolver")] //! Forwarding resolver related types diff --git a/crates/server/src/store/in_memory/authority.rs b/crates/server/src/store/in_memory/authority.rs index 15195862b5..1a91d5a38f 100644 --- a/crates/server/src/store/in_memory/authority.rs +++ b/crates/server/src/store/in_memory/authority.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All authority related types @@ -315,7 +315,7 @@ struct InnerInMemory { // Private key mapped to the Record of the DNSKey // TODO: these private_keys should be stored securely. Ideally, we have keys only stored per // server instance, but that requires requesting updates from the parent zone, which may or - // may not support dynamic updates to register the new key... Trust-DNS will provide support + // may not support dynamic updates to register the new key... Hickory DNS will provide support // for this, in some form, perhaps alternate root zones... #[cfg(feature = "dnssec")] secure_keys: Vec, diff --git a/crates/server/src/store/in_memory/mod.rs b/crates/server/src/store/in_memory/mod.rs index e17977e0da..646b0761e1 100644 --- a/crates/server/src/store/in_memory/mod.rs +++ b/crates/server/src/store/in_memory/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2019 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! Zone file based serving with Dynamic DNS and journaling support diff --git a/crates/server/src/store/mod.rs b/crates/server/src/store/mod.rs index d412db41ca..7ec22629bf 100644 --- a/crates/server/src/store/mod.rs +++ b/crates/server/src/store/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All persistent store implementations diff --git a/crates/server/src/store/recursor/authority.rs b/crates/server/src/store/recursor/authority.rs index 83218e88ec..1b7aae1161 100644 --- a/crates/server/src/store/recursor/authority.rs +++ b/crates/server/src/store/recursor/authority.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{io, path::Path, time::Instant}; @@ -28,7 +28,7 @@ use crate::{ /// An authority that will forward resolutions to upstream resolvers. /// -/// This uses the trust-dns-resolver for resolving requests. +/// This uses the hickory-resolver for resolving requests. pub struct RecursiveAuthority { origin: LowerName, recursor: Recursor, diff --git a/crates/server/src/store/recursor/config.rs b/crates/server/src/store/recursor/config.rs index 921335020a..8c5b64bc2f 100644 --- a/crates/server/src/store/recursor/config.rs +++ b/crates/server/src/store/recursor/config.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::{ diff --git a/crates/server/src/store/recursor/mod.rs b/crates/server/src/store/recursor/mod.rs index 29a90f4f25..18fbb40401 100644 --- a/crates/server/src/store/recursor/mod.rs +++ b/crates/server/src/store/recursor/mod.rs @@ -1,11 +1,11 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. -#![cfg(feature = "trust-dns-recursor")] +#![cfg(feature = "hickory-recursor")] //! Recursive resolver related types diff --git a/crates/server/src/store/sqlite/authority.rs b/crates/server/src/store/sqlite/authority.rs index a650cfb899..5c869907e2 100644 --- a/crates/server/src/store/sqlite/authority.rs +++ b/crates/server/src/store/sqlite/authority.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All authority related types diff --git a/crates/server/src/store/sqlite/config.rs b/crates/server/src/store/sqlite/config.rs index 2699112598..bcc55f47ec 100644 --- a/crates/server/src/store/sqlite/config.rs +++ b/crates/server/src/store/sqlite/config.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use serde::Deserialize; diff --git a/crates/server/src/store/sqlite/mod.rs b/crates/server/src/store/sqlite/mod.rs index 08c7046120..fed7c666e0 100644 --- a/crates/server/src/store/sqlite/mod.rs +++ b/crates/server/src/store/sqlite/mod.rs @@ -1,8 +1,8 @@ // Copyright 2015-2018 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! SQLite serving with Dynamic DNS and journaling support diff --git a/crates/server/src/store/sqlite/persistence.rs b/crates/server/src/store/sqlite/persistence.rs index cbaca670fa..9f066007b1 100644 --- a/crates/server/src/store/sqlite/persistence.rs +++ b/crates/server/src/store/sqlite/persistence.rs @@ -1,8 +1,8 @@ // Copyright 2015-2016 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! All zone persistence related types diff --git a/crates/server/tests/authority_battery/basic.rs b/crates/server/tests/authority_battery/basic.rs index e082e0ffef..dc62fe78fa 100644 --- a/crates/server/tests/authority_battery/basic.rs +++ b/crates/server/tests/authority_battery/basic.rs @@ -6,7 +6,7 @@ use std::str::FromStr; use futures_executor::block_on; -use trust_dns_proto::{ +use hickory_proto::{ op::{Header, Message, Query, ResponseCode}, rr::{ rdata::{A as A4, AAAA}, @@ -14,10 +14,10 @@ use trust_dns_proto::{ }, serialize::binary::BinDecodable, }; -use trust_dns_server::authority::{ +use hickory_server::authority::{ AuthLookup, Authority, LookupError, LookupOptions, MessageRequest, }; -use trust_dns_server::server::{Protocol, RequestInfo}; +use hickory_server::server::{Protocol, RequestInfo}; const TEST_HEADER: &Header = &Header::new(); @@ -55,8 +55,11 @@ pub fn test_soa>(authority: A) { .data() { Some(RData::SOA(soa)) => { - assert_eq!(Name::from_str("trust-dns.org.").unwrap(), *soa.mname()); - assert_eq!(Name::from_str("root.trust-dns.org.").unwrap(), *soa.rname()); + assert_eq!(Name::from_str("hickory-dns.org.").unwrap(), *soa.mname()); + assert_eq!( + Name::from_str("root.hickory-dns.org.").unwrap(), + *soa.rname() + ); assert_eq!(199609203, soa.serial()); assert_eq!(28800, soa.refresh()); assert_eq!(7200, soa.retry()); diff --git a/crates/server/tests/authority_battery/dnssec.rs b/crates/server/tests/authority_battery/dnssec.rs index 9b3582683b..703c269352 100644 --- a/crates/server/tests/authority_battery/dnssec.rs +++ b/crates/server/tests/authority_battery/dnssec.rs @@ -5,7 +5,7 @@ use std::str::FromStr; use futures_executor::block_on; -use trust_dns_proto::{ +use hickory_proto::{ op::{Header, Query}, rr::{ dnssec::{ @@ -16,7 +16,7 @@ use trust_dns_proto::{ }, xfer, }; -use trust_dns_server::{ +use hickory_server::{ authority::{AuthLookup, Authority, DnssecAuthority, LookupOptions}, server::{Protocol, RequestInfo}, }; @@ -72,8 +72,11 @@ pub fn test_soa>(authority: A, keys: &[DNSKEY] .and_then(RData::as_soa) .unwrap(); - assert_eq!(Name::from_str("trust-dns.org.").unwrap(), *soa.mname()); - assert_eq!(Name::from_str("root.trust-dns.org.").unwrap(), *soa.rname()); + assert_eq!(Name::from_str("hickory-dns.org.").unwrap(), *soa.mname()); + assert_eq!( + Name::from_str("root.hickory-dns.org.").unwrap(), + *soa.rname() + ); assert!(199609203 < soa.serial()); // serial should be one or more b/c of the signing process assert_eq!(28800, soa.refresh()); assert_eq!(7200, soa.retry()); @@ -373,7 +376,7 @@ pub fn verify(records: &[Record], rrsig_records: &[Record], keys: &[DNSKE } pub fn add_signers(authority: &mut A) -> Vec { - use trust_dns_server::config::dnssec::*; + use hickory_server::config::dnssec::*; let signer_name = Name::from(authority.origin().to_owned()); let mut keys = Vec::::new(); diff --git a/crates/server/tests/authority_battery/dynamic_update.rs b/crates/server/tests/authority_battery/dynamic_update.rs index 1841d77925..b5c54278cd 100644 --- a/crates/server/tests/authority_battery/dynamic_update.rs +++ b/crates/server/tests/authority_battery/dynamic_update.rs @@ -8,7 +8,7 @@ use std::{ use futures_executor::block_on; -use trust_dns_proto::{ +use hickory_proto::{ op::{update_message, Header, Message, Query, ResponseCode}, rr::dnssec::{Algorithm, SigSigner, SupportedAlgorithms, Verifier}, rr::{ @@ -17,7 +17,7 @@ use trust_dns_proto::{ }, serialize::binary::{BinDecodable, BinEncodable}, }; -use trust_dns_server::{ +use hickory_server::{ authority::{ AuthLookup, Authority, DnssecAuthority, LookupError, LookupOptions, MessageRequest, UpdateResult, @@ -775,8 +775,8 @@ pub fn test_delete_all>(mut authority: A, keys } pub fn add_auth(authority: &mut A) -> Vec { - use trust_dns_proto::rr::dnssec::rdata::key::KeyUsage; - use trust_dns_server::config::dnssec::*; + use hickory_proto::rr::dnssec::rdata::key::KeyUsage; + use hickory_server::config::dnssec::*; let update_name = Name::from_str("update") .unwrap() diff --git a/crates/server/tests/config_tests.rs b/crates/server/tests/config_tests.rs index 150c95da44..24665c1b85 100644 --- a/crates/server/tests/config_tests.rs +++ b/crates/server/tests/config_tests.rs @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -21,8 +21,8 @@ use std::net::{Ipv4Addr, Ipv6Addr}; use std::path::{Path, PathBuf}; use std::time::Duration; -use trust_dns_server::authority::ZoneType; -use trust_dns_server::config::*; +use hickory_server::authority::ZoneType; +use hickory_server::config::*; #[test] fn test_read_config() { @@ -151,8 +151,8 @@ fn test_parse_toml() { #[cfg(feature = "dnssec")] #[test] fn test_parse_zone_keys() { - use trust_dns_proto::rr::dnssec::Algorithm; - use trust_dns_proto::rr::Name; + use hickory_proto::rr::dnssec::Algorithm; + use hickory_proto::rr::Name; let config = Config::from_toml( " @@ -271,5 +271,5 @@ define_test_config!(ipv4_only); define_test_config!(ipv6_only); define_test_config!(openssl_dnssec); define_test_config!(ring_dnssec); -#[cfg(feature = "trust-dns-resolver")] +#[cfg(feature = "hickory-resolver")] define_test_config!(example_forwarder); diff --git a/crates/server/tests/forwarder.rs b/crates/server/tests/forwarder.rs index e48cf93f40..0c4d3da777 100644 --- a/crates/server/tests/forwarder.rs +++ b/crates/server/tests/forwarder.rs @@ -1,14 +1,14 @@ #![recursion_limit = "128"] -#![cfg(feature = "trust-dns-resolver")] +#![cfg(feature = "hickory-resolver")] use std::net::Ipv4Addr; use std::str::FromStr; use tokio::runtime::Runtime; -use trust_dns_proto::rr::{Name, RData, RecordType}; -use trust_dns_resolver::name_server::TokioConnectionProvider; -use trust_dns_server::{ +use hickory_proto::rr::{Name, RData, RecordType}; +use hickory_resolver::name_server::TokioConnectionProvider; +use hickory_server::{ authority::{Authority, LookupObject}, store::forwarder::ForwardAuthority, }; diff --git a/crates/server/tests/in_memory.rs b/crates/server/tests/in_memory.rs index 9e693f7a1c..9ebfa72d7f 100644 --- a/crates/server/tests/in_memory.rs +++ b/crates/server/tests/in_memory.rs @@ -2,8 +2,8 @@ use std::str::FromStr; use tokio::runtime::Runtime; -use trust_dns_proto::rr::{rdata::CNAME, Name, RData, Record, RecordType}; -use trust_dns_server::{ +use hickory_proto::rr::{rdata::CNAME, Name, RData, Record, RecordType}; +use hickory_server::{ authority::{Authority, ZoneType}, store::in_memory::InMemoryAuthority, }; diff --git a/crates/server/tests/sqlite_tests.rs b/crates/server/tests/sqlite_tests.rs index 2d1a305a3a..dff9bb6722 100644 --- a/crates/server/tests/sqlite_tests.rs +++ b/crates/server/tests/sqlite_tests.rs @@ -4,9 +4,9 @@ use std::str::FromStr; use rusqlite::*; -use trust_dns_proto::rr::{rdata::A, *}; -use trust_dns_server::store::sqlite::persistence::CURRENT_VERSION; -use trust_dns_server::store::sqlite::Journal; +use hickory_proto::rr::{rdata::A, *}; +use hickory_server::store::sqlite::persistence::CURRENT_VERSION; +use hickory_server::store::sqlite::Journal; #[test] fn test_new_journal() { diff --git a/crates/server/tests/store_file_tests.rs b/crates/server/tests/store_file_tests.rs index 447b8dd1dd..aea17a9163 100644 --- a/crates/server/tests/store_file_tests.rs +++ b/crates/server/tests/store_file_tests.rs @@ -1,8 +1,8 @@ use std::str::FromStr; -use trust_dns_proto::rr::{LowerName, Name, RecordType, RrKey}; -use trust_dns_server::authority::{Authority, LookupOptions, ZoneType}; -use trust_dns_server::store::file::{FileAuthority, FileConfig}; +use hickory_proto::rr::{LowerName, Name, RecordType, RrKey}; +use hickory_server::authority::{Authority, LookupOptions, ZoneType}; +use hickory_server::store::file::{FileAuthority, FileConfig}; #[macro_use] mod authority_battery; diff --git a/crates/server/tests/store_sqlite_tests.rs b/crates/server/tests/store_sqlite_tests.rs index 1b48061781..19f2924de9 100644 --- a/crates/server/tests/store_sqlite_tests.rs +++ b/crates/server/tests/store_sqlite_tests.rs @@ -6,8 +6,8 @@ use std::str::FromStr; use futures_executor::block_on; -use trust_dns_proto::rr::Name; -use trust_dns_server::{ +use hickory_proto::rr::Name; +use hickory_server::{ authority::ZoneType, store::sqlite::{SqliteAuthority, SqliteConfig}, }; diff --git a/crates/server/tests/timeout_stream_tests.rs b/crates/server/tests/timeout_stream_tests.rs index cab8750d1a..9ecb0fd0f6 100644 --- a/crates/server/tests/timeout_stream_tests.rs +++ b/crates/server/tests/timeout_stream_tests.rs @@ -6,7 +6,7 @@ use std::time::Duration; use futures_util::stream::{iter, Stream, StreamExt, TryStreamExt}; use tokio::runtime::Runtime; -use trust_dns_server::server::TimeoutStream; +use hickory_server::server::TimeoutStream; #[test] fn test_no_timeout() { diff --git a/crates/server/tests/txt_tests.rs b/crates/server/tests/txt_tests.rs index fa6ece96be..5d52581be0 100644 --- a/crates/server/tests/txt_tests.rs +++ b/crates/server/tests/txt_tests.rs @@ -2,11 +2,11 @@ use std::str::FromStr; use futures_executor::block_on; -use trust_dns_proto::rr::rdata::{tlsa::*, A, AAAA}; -use trust_dns_proto::rr::*; -use trust_dns_proto::serialize::txt::*; -use trust_dns_server::authority::{Authority, LookupOptions, ZoneType}; -use trust_dns_server::store::in_memory::InMemoryAuthority; +use hickory_proto::rr::rdata::{tlsa::*, A, AAAA}; +use hickory_proto::rr::*; +use hickory_proto::serialize::txt::*; +use hickory_server::authority::{Authority, LookupOptions, ZoneType}; +use hickory_server::store::in_memory::InMemoryAuthority; // TODO: split this test up to test each thing separately #[test] diff --git a/fuzz/Cargo.toml b/fuzz/Cargo.toml index cc2f5a5eff..6551b016f7 100644 --- a/fuzz/Cargo.toml +++ b/fuzz/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "trust-dns-proto-fuzz" +name = "hickory-proto-fuzz" version = "0.0.0" authors = ["Automatically generated"] publish = false @@ -11,7 +11,7 @@ cargo-fuzz = true [dependencies] libfuzzer-sys = "0.4" -trust-dns-proto = { path = "../crates/proto" } +hickory-proto = { path = "../crates/proto" } [[bin]] name = "message" diff --git a/fuzz/fuzz_targets/message.rs b/fuzz/fuzz_targets/message.rs index 694cc338f8..7eedab2453 100644 --- a/fuzz/fuzz_targets/message.rs +++ b/fuzz/fuzz_targets/message.rs @@ -1,7 +1,7 @@ #![no_main] use libfuzzer_sys::fuzz_target; -use trust_dns_proto::{ +use hickory_proto::{ op::Message, rr::{Record, RecordType}, serialize::binary::{BinDecodable, BinEncodable}, @@ -81,7 +81,7 @@ fn records_equal(records1: &[Record], records2: &[Record]) -> bool { /// Some RDATAs don't roundtrip elegantly, so we have custom matching rules here. #[allow(clippy::single_match)] fn record_equal(record1: &Record, record2: &Record) -> bool { - use trust_dns_proto::rr::RData; + use hickory_proto::rr::RData; if record1.record_type() != record2.record_type() { return false; diff --git a/justfile b/justfile index 13ae5d249c..c9d8193aa0 100644 --- a/justfile +++ b/justfile @@ -11,7 +11,7 @@ COV_RUSTFLAGS := "-C instrument-coverage -C llvm-args=--instrprof-atomic-counter COV_CARGO_INCREMENTAL := "0" COV_CARGO_LLVM_COV := "1" COV_CARGO_LLVM_COV_TARGET_DIR := join(TARGET_DIR, "llvm-cov-target") -COV_LLVM_PROFILE_FILE := join(COV_CARGO_LLVM_COV_TARGET_DIR, "trust-dns-%p-%m_%c.profraw") +COV_LLVM_PROFILE_FILE := join(COV_CARGO_LLVM_COV_TARGET_DIR, "hickory-dns-%p-%m_%c.profraw") BIND_VER := "9.16.41" @@ -22,31 +22,31 @@ default feature='' ignore='': (check feature ignore) (build feature ignore) (tes all-features: (default "--all-features") # Check, build, and test all crates with no-default-features -no-default-features: (default "--no-default-features" "--ignore=\\{trust-dns-compatibility\\}") +no-default-features: (default "--no-default-features" "--ignore=\\{hickory-compatibility\\}") # Check, build, and test all crates with dns-over-rustls enabled -dns-over-rustls: (default "--features=dns-over-rustls" "--ignore=\\{async-std-resolver,trust-dns-compatibility\\}") +dns-over-rustls: (default "--features=dns-over-rustls" "--ignore=\\{async-std-resolver,hickory-compatibility\\}") # Check, build, and test all crates with dns-over-https-rustls enabled -dns-over-https-rustls: (default "--features=dns-over-https-rustls" "--ignore=\\{async-std-resolver,trust-dns-compatibility\\}") +dns-over-https-rustls: (default "--features=dns-over-https-rustls" "--ignore=\\{async-std-resolver,hickory-compatibility\\}") # Check, build, and test all crates with dns-over-quic enabled -dns-over-quic: (default "--features=dns-over-quic" "--ignore=\\{async-std-resolver,trust-dns-compatibility\\}") +dns-over-quic: (default "--features=dns-over-quic" "--ignore=\\{async-std-resolver,hickory-compatibility\\}") # Check, build, and test all crates with dns-over-h3 enabled -dns-over-h3: (default "--features=dns-over-h3" "--ignore=\\{async-std-resolver,trust-dns-compatibility,trust-dns-client\\}") +dns-over-h3: (default "--features=dns-over-h3" "--ignore=\\{async-std-resolver,hickory-compatibility,hickory-client\\}") # Check, build, and test all crates with dns-over-native-tls enabled -dns-over-native-tls: (default "--features=dns-over-native-tls" "--ignore=\\{async-std-resolver,trust-dns-compatibility,trust-dns-server,trust-dns,trust-dns-util,trust-dns-integration\\}") +dns-over-native-tls: (default "--features=dns-over-native-tls" "--ignore=\\{async-std-resolver,hickory-compatibility,hickory-server,hickory-dns,hickory-util,hickory-integration\\}") # Check, build, and test all crates with dns-over-openssl enabled -dns-over-openssl: (default "--features=dnssec-openssl" "--ignore=\\{async-std-resolver,trust-dns-compatibility\\}") +dns-over-openssl: (default "--features=dnssec-openssl" "--ignore=\\{async-std-resolver,hickory-compatibility\\}") # Check, build, and test all crates with dnssec-openssl enabled -dnssec-openssl: (default "--features=dnssec-openssl" "--ignore=\\{async-std-resolver,trust-dns-compatibility\\}") +dnssec-openssl: (default "--features=dnssec-openssl" "--ignore=\\{async-std-resolver,hickory-compatibility\\}") # Check, build, and test all crates with dnssec-ring enabled -dnssec-ring: (default "--features=dnssec-ring" "--ignore=\\{async-std-resolver,trust-dns-compatibility\\}") +dnssec-ring: (default "--features=dnssec-ring" "--ignore=\\{async-std-resolver,hickory-compatibility\\}") # Run check on all projects in the workspace check feature='' ignore='': @@ -112,7 +112,7 @@ coverage: init-llvm-cov cargo +nightly build --workspace --all-targets --all-features cargo +nightly llvm-cov test --workspace --no-report --all-targets --benches --examples --bins --tests --all-features cargo +nightly llvm-cov test --workspace --no-report --doc --doctests --all-features - cargo +nightly llvm-cov report --codecov --output-path {{join(COV_CARGO_LLVM_COV_TARGET_DIR, "trust-dns-coverage.json")}} + cargo +nightly llvm-cov report --codecov --output-path {{join(COV_CARGO_LLVM_COV_TARGET_DIR, "hickory-dns-coverage.json")}} # Open the html view of the coverage report coverage-html: coverage @@ -213,4 +213,4 @@ init: init-cargo-workspaces init-audit init-bind9 # Run the server with example config, for manual testing purposes run-example: - @cargo {{MSRV}} run --bin trust-dns -- -d -c {{TEST_DATA}}/test_configs/example.toml -z {{TEST_DATA}}/test_configs -p 2053 + @cargo {{MSRV}} run --bin hickory-dns -- -d -c {{TEST_DATA}}/test_configs/example.toml -z {{TEST_DATA}}/test_configs -p 2053 diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2f7092d029a8ee566051425cf4edc79f03cd51 GIT binary patch literal 139322 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

4$OU?)7Ag5K$t$toe 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/scripts/docker_ftest.sh b/scripts/docker_ftest.sh index d5b28c65df..717445a0f6 100755 --- a/scripts/docker_ftest.sh +++ b/scripts/docker_ftest.sh @@ -1,6 +1,6 @@ #!/bin/bash -trust_dns_dir=$(dirname $0)/.. +hickory_dns_dir=$(dirname $0)/.. readonly OPTS="--tests --all-features -j 3" readonly TEST_OPTS="--test-threads=3" @@ -15,15 +15,15 @@ builds="${builds} && echo '==> openssl' && cd openssl && cargo test ${OPTS} -- $ builds="${builds} && echo '==> rustls' && cd rustls && cargo test ${OPTS} -- ${TEST_OPTS} && cd .." builds="${builds} && echo '==> integration-tests' && cd integration-tests && cargo test ${OPTS} -- ${TEST_OPTS} && cd .." -pushd ${trust_dns_dir} +pushd ${hickory_dns_dir} docker run \ --rm \ -e "RUST_BACKTRACE=full" \ - -e "RUST_LOG=trust_dns_proto=debug" \ + -e "RUST_LOG=hickory_dns=debug,hickory_proto=debug" \ -a STDERR -a STDOUT \ -v ${PWD}/../:/src \ rust:latest bash \ - -c "cd src/trust-dns \ + -c "cd src/hickory-dns \ ${builds} " | tee target/linux_output.txt popd diff --git a/scripts/gen_certs.sh b/scripts/gen_certs.sh index df24b4bee8..8f01939b41 100755 --- a/scripts/gen_certs.sh +++ b/scripts/gen_certs.sh @@ -4,9 +4,9 @@ set -euxo pipefail OPENSSL=openssl -trust_dns_dir=$(dirname $0)/.. +hickory_dns_dir=$(dirname $0)/.. -pushd $trust_dns_dir/tests/test-data +pushd $hickory_dns_dir/tests/test-data for i in ca.key ca.pem cert.key cert.csr cert.pem cert.p12 ; do [ -f $i ] && echo "$i exists" && exit 1; @@ -24,7 +24,7 @@ distinguished_name = dn C = US ST = California L = San Francisco -O = Trust-DNS +O = Hickory DNS CN = root.example.com [req_ext] @@ -51,7 +51,7 @@ distinguished_name = dn C = US ST = California L = San Francisco -O = Trust-DNS +O = Hickory DNS CN = ns.example.com [req_ext] diff --git a/scripts/install_openssl_deb.sh b/scripts/install_openssl_deb.sh index 64fd2823e2..62f1e29b76 100755 --- a/scripts/install_openssl_deb.sh +++ b/scripts/install_openssl_deb.sh @@ -2,8 +2,8 @@ readonly UBUNTU_VERSION=1ubuntu4 -wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.0.0_1.0.2g-${UBUNTU_VERSION:?}_amd64.deb -wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl-dev_1.0.2g-${UBUNTU_VERSION:?}_amd64.deb +wget https://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.0.0_1.0.2g-${UBUNTU_VERSION:?}_amd64.deb +wget https://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl-dev_1.0.2g-${UBUNTU_VERSION:?}_amd64.deb sudo dpkg -i libssl1.0.0_1.0.2g-${UBUNTU_VERSION:?}_amd64.deb sudo dpkg -i libssl-dev_1.0.2g-${UBUNTU_VERSION:?}_amd64.deb diff --git a/scripts/root_key.sh b/scripts/root_key.sh index 2ef7ade2e4..4bf1c2b409 100755 --- a/scripts/root_key.sh +++ b/scripts/root_key.sh @@ -1,5 +1,5 @@ #!/bin/bash -trust_dns_dir=$(dirname $0)/.. +hickory_dns_dir=$(dirname $0)/.. -openssl req -text -noout -verify -in ${trust_dns_dir}/Kjqmt7v.csr -inform DER -pubkey -out ${trust_dns_dir}crates/proto/src/rr/dnssec/Kjqmt7v.pem +openssl req -text -noout -verify -in ${hickory_dns_dir}/Kjqmt7v.csr -inform DER -pubkey -out ${hickory_dns_dir}crates/proto/src/rr/dnssec/Kjqmt7v.pem diff --git a/tests/compatibility-tests/Cargo.toml b/tests/compatibility-tests/Cargo.toml index a83fe91b99..9b171bce70 100644 --- a/tests/compatibility-tests/Cargo.toml +++ b/tests/compatibility-tests/Cargo.toml @@ -1,15 +1,15 @@ [package] -name = "trust-dns-compatibility" +name = "hickory-compatibility" publish = false # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS compatability testing library. +Hickory DNS compatability testing library. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/trust-dns" +documentation = "https://docs.rs/hickory-dns" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -26,18 +26,18 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] default = ["none"] none = [] bind = [] -trust_dns_client = [] +hickory_client = [] [lib] -name = "trust_dns_compatibility" +name = "hickory_compatibility" path = "src/lib.rs" [dependencies] @@ -48,4 +48,4 @@ rand.workspace = true futures.workspace = true openssl = { workspace = true, features = ["v102", "v110"] } time.workspace = true -trust-dns-client= { workspace = true, features = ["dnssec-openssl"] } +hickory-client = { workspace = true, features = ["dnssec-openssl"] } diff --git a/tests/compatibility-tests/src/bind.rs b/tests/compatibility-tests/src/bind.rs index 93fbd48367..69043fb0ac 100644 --- a/tests/compatibility-tests/src/bind.rs +++ b/tests/compatibility-tests/src/bind.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::env; @@ -38,7 +38,7 @@ pub fn named_process() -> (NamedProcess, u16) { .arg("../../tests/compatibility-tests/tests/conf/bind-example.conf") //.arg("-d").arg("0") // uncomment for debugging information .arg("-D") - .arg("Trust-DNS compatibility") + .arg("Hickory DNS compatibility") .arg("-g") .arg("-p") .arg(&format!("{test_port}")) diff --git a/tests/compatibility-tests/src/lib.rs b/tests/compatibility-tests/src/lib.rs index 881e12d3dd..74420b68a2 100644 --- a/tests/compatibility-tests/src/lib.rs +++ b/tests/compatibility-tests/src/lib.rs @@ -2,8 +2,8 @@ // Copyright 2017 Google LLC. // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![allow(dead_code)] diff --git a/tests/compatibility-tests/tests/conf/bind-example.com.zone b/tests/compatibility-tests/tests/conf/bind-example.com.zone index 1227ddcc4a..cf2828fd05 100644 --- a/tests/compatibility-tests/tests/conf/bind-example.com.zone +++ b/tests/compatibility-tests/tests/conf/bind-example.com.zone @@ -1,11 +1,11 @@ -; replace the trust-dns.org with your own name -@ 86400 IN SOA trust-dns.org. root.trust-dns.org. ( +; replace the hickory-dns.org with your own name +@ 86400 IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL - NS trust-dns.org. + NS hickory-dns.org. www A 127.0.0.1 AAAA ::1 diff --git a/tests/compatibility-tests/tests/conf/bind-example.conf b/tests/compatibility-tests/tests/conf/bind-example.conf index e0e84f5b8e..c9fbb807af 100644 --- a/tests/compatibility-tests/tests/conf/bind-example.conf +++ b/tests/compatibility-tests/tests/conf/bind-example.conf @@ -1,6 +1,6 @@ /* - Trust-DNS bench setup: - this is meant to mimic the trust-dns-server config + Hickory DNS bench setup: + this is meant to mimic the hickory-server config which is in tests/test-data/test_configs/example.toml */ diff --git a/tests/compatibility-tests/tests/conf/bind-example.net.zone b/tests/compatibility-tests/tests/conf/bind-example.net.zone index 23a05dce99..e9c9cb08a2 100644 --- a/tests/compatibility-tests/tests/conf/bind-example.net.zone +++ b/tests/compatibility-tests/tests/conf/bind-example.net.zone @@ -1,11 +1,11 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name @ 86400 IN SOA example.net. root.example.net. ( 20210101 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL - NS trust-dns.org. + NS hickory-dns.org. www1 A 127.0.0.1 AAAA ::1 diff --git a/tests/compatibility-tests/tests/sig0_tests.rs b/tests/compatibility-tests/tests/sig0_tests.rs index 21a0f42c66..19a8cf32de 100644 --- a/tests/compatibility-tests/tests/sig0_tests.rs +++ b/tests/compatibility-tests/tests/sig0_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::env; @@ -17,25 +17,25 @@ use openssl::rsa::Rsa; use time::Duration; #[cfg(not(feature = "none"))] -use trust_dns_client::client::Client; -use trust_dns_client::client::{ClientConnection, SyncClient}; +use hickory_client::client::Client; +use hickory_client::client::{ClientConnection, SyncClient}; #[cfg(not(feature = "none"))] -use trust_dns_client::proto::op::ResponseCode; -use trust_dns_client::proto::rr::dnssec::rdata::key::{KeyUsage, KEY}; -use trust_dns_client::proto::rr::dnssec::{Algorithm, KeyPair, SigSigner}; -use trust_dns_client::proto::rr::Name; +use hickory_client::proto::op::ResponseCode; +use hickory_client::proto::rr::dnssec::rdata::key::{KeyUsage, KEY}; +use hickory_client::proto::rr::dnssec::{Algorithm, KeyPair, SigSigner}; +use hickory_client::proto::rr::Name; #[cfg(not(feature = "none"))] -use trust_dns_client::proto::rr::{DNSClass, RData, Record, RecordType}; +use hickory_client::proto::rr::{DNSClass, RData, Record, RecordType}; #[cfg(not(feature = "none"))] -use trust_dns_client::udp::UdpClientConnection; +use hickory_client::udp::UdpClientConnection; #[cfg(not(feature = "none"))] -use trust_dns_compatibility::named_process; +use hickory_compatibility::named_process; #[cfg(not(feature = "none"))] #[test] #[allow(unused)] fn test_get() { - use trust_dns_client::rr::rdata::A; + use hickory_client::rr::rdata::A; let (process, port) = named_process(); let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), port); @@ -94,7 +94,7 @@ where #[test] #[allow(unused)] fn test_create() { - use trust_dns_client::rr::rdata::A; + use hickory_client::rr::rdata::A; let (process, port) = named_process(); let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), port); diff --git a/tests/compatibility-tests/tests/tsig_tests.rs b/tests/compatibility-tests/tests/tsig_tests.rs index 8f7dc1422f..e6d8a74fe4 100644 --- a/tests/compatibility-tests/tests/tsig_tests.rs +++ b/tests/compatibility-tests/tests/tsig_tests.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #![allow(unused_imports)] @@ -15,16 +15,16 @@ use std::str::FromStr; use time::Duration; -use trust_dns_client::client::Client; -use trust_dns_client::client::{ClientConnection, SyncClient}; -use trust_dns_client::proto::op::ResponseCode; -use trust_dns_client::proto::rr::dnssec::rdata::tsig::TsigAlgorithm; -use trust_dns_client::proto::rr::dnssec::tsig::TSigner; -use trust_dns_client::proto::rr::Name; -use trust_dns_client::proto::rr::{RData, Record, RecordType}; -use trust_dns_client::tcp::TcpClientConnection; -use trust_dns_client::udp::UdpClientConnection; -use trust_dns_compatibility::named_process; +use hickory_client::client::Client; +use hickory_client::client::{ClientConnection, SyncClient}; +use hickory_client::proto::op::ResponseCode; +use hickory_client::proto::rr::dnssec::rdata::tsig::TsigAlgorithm; +use hickory_client::proto::rr::dnssec::tsig::TSigner; +use hickory_client::proto::rr::Name; +use hickory_client::proto::rr::{RData, Record, RecordType}; +use hickory_client::tcp::TcpClientConnection; +use hickory_client::udp::UdpClientConnection; +use hickory_compatibility::named_process; #[allow(dead_code)] pub fn create_tsig_ready_client(conn: CC) -> SyncClient @@ -50,7 +50,7 @@ where #[cfg(not(feature = "none"))] #[test] fn test_create() { - use trust_dns_client::rr::rdata::A; + use hickory_client::rr::rdata::A; let (_process, port) = named_process(); let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), port); diff --git a/tests/compatibility-tests/tests/zone_transfer.rs b/tests/compatibility-tests/tests/zone_transfer.rs index 43281d00e0..19e5fb07e1 100644 --- a/tests/compatibility-tests/tests/zone_transfer.rs +++ b/tests/compatibility-tests/tests/zone_transfer.rs @@ -1,8 +1,8 @@ // Copyright 2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. #[cfg(not(feature = "none"))] @@ -14,13 +14,13 @@ use std::str::FromStr; use time::Duration; #[cfg(not(feature = "none"))] -use trust_dns_client::client::{Client, SyncClient}; +use hickory_client::client::{Client, SyncClient}; #[cfg(not(feature = "none"))] -use trust_dns_client::rr::{Name, RData, Record, RecordType}; +use hickory_client::rr::{Name, RData, Record, RecordType}; #[cfg(not(feature = "none"))] -use trust_dns_client::tcp::TcpClientConnection; +use hickory_client::tcp::TcpClientConnection; #[cfg(not(feature = "none"))] -use trust_dns_compatibility::named_process; +use hickory_compatibility::named_process; #[allow(unused)] macro_rules! assert_serial { @@ -38,7 +38,7 @@ macro_rules! assert_serial { #[test] #[allow(unused)] fn test_zone_transfer() { - use trust_dns_client::rr::rdata::A; + use hickory_client::rr::rdata::A; let (process, port) = named_process(); let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), port); diff --git a/tests/integration-tests/Cargo.toml b/tests/integration-tests/Cargo.toml index 624a8469d6..4945932bf4 100644 --- a/tests/integration-tests/Cargo.toml +++ b/tests/integration-tests/Cargo.toml @@ -1,15 +1,15 @@ [package] -name = "trust-dns-integration" +name = "hickory-integration" publish = false # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Trust-DNS integration testing library. +Hickory DNS integration testing library. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/trust-dns" +documentation = "https://docs.rs/hickory-dns" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -26,44 +26,74 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [lib] -name = "trust_dns_integration" +name = "hickory_integration" path = "src/lib.rs" [features] -dnssec-openssl = ["dnssec", - "trust-dns-resolver/dnssec-openssl", - "trust-dns-server/dnssec-openssl", - "trust-dns-client/dnssec-openssl", - "trust-dns-proto/dnssec-openssl"] +dnssec-openssl = [ + "dnssec", + "hickory-resolver/dnssec-openssl", + "hickory-server/dnssec-openssl", + "hickory-client/dnssec-openssl", + "hickory-proto/dnssec-openssl", +] # TODO: dnssec-openssl is enabled for RSA support, we should add testing support for just the Ring toolchain -dnssec-ring = ["dnssec", - "trust-dns-resolver/dnssec-ring", - "trust-dns-server/dnssec-ring", - "trust-dns-client/dnssec-ring", "trust-dns-client/dnssec-openssl", - "trust-dns-proto/dnssec-ring"] +dnssec-ring = [ + "dnssec", + "hickory-resolver/dnssec-ring", + "hickory-server/dnssec-ring", + "hickory-client/dnssec-ring", + "hickory-client/dnssec-openssl", + "hickory-proto/dnssec-ring", +] dnssec = ["dep:openssl"] # enables experimental the mDNS (multicast) feature # TODO: revisit how mdns is implemented in resolver -# mdns = ["trust-dns-client/mdns", "trust-dns-proto/mdns", "trust-dns-resolver/mdns"] +# mdns = ["hickory-client/mdns", "hickory-proto/mdns", "hickory-resolver/mdns"] -dns-over-https-rustls = ["trust-dns-client/dns-over-https-rustls", "trust-dns-resolver/dns-over-https-rustls", "dns-over-https", "dep:rustls", "dep:webpki-roots"] -dns-over-https = ["trust-dns-proto/dns-over-https"] -dns-over-quic = ["dns-over-rustls", "trust-dns-proto/dns-over-quic", "trust-dns-resolver/dns-over-quic"] -dns-over-h3 = ["dns-over-rustls", "trust-dns-proto/dns-over-h3", "trust-dns-resolver/dns-over-h3"] +dns-over-https-rustls = [ + "hickory-client/dns-over-https-rustls", + "hickory-resolver/dns-over-https-rustls", + "dns-over-https", + "dep:rustls", + "dep:webpki-roots", +] +dns-over-https = ["hickory-proto/dns-over-https"] +dns-over-quic = [ + "dns-over-rustls", + "hickory-proto/dns-over-quic", + "hickory-resolver/dns-over-quic", +] +dns-over-h3 = [ + "dns-over-rustls", + "hickory-proto/dns-over-h3", + "hickory-resolver/dns-over-h3", +] # TODO: need to make server support rustls and native-tls -# dns-over-native-tls = ["dns-over-tls", "trust-dns-resolver/dns-over-native-tls", "trust-dns-server/dns-over-native-tls"] -dns-over-openssl = ["dns-over-tls", "trust-dns-proto/dns-over-openssl", "trust-dns-resolver/dns-over-openssl", "trust-dns-server/dns-over-openssl"] -dns-over-rustls = ["dns-over-tls", "trust-dns-proto/dns-over-rustls", "trust-dns-resolver/dns-over-rustls", "trust-dns-server/dns-over-rustls", "dep:rustls"] +# dns-over-native-tls = ["dns-over-tls", "hickory-resolver/dns-over-native-tls", "hickory-server/dns-over-native-tls"] +dns-over-openssl = [ + "dns-over-tls", + "hickory-proto/dns-over-openssl", + "hickory-resolver/dns-over-openssl", + "hickory-server/dns-over-openssl", +] +dns-over-rustls = [ + "dns-over-tls", + "hickory-proto/dns-over-rustls", + "hickory-resolver/dns-over-rustls", + "hickory-server/dns-over-rustls", + "dep:rustls", +] dns-over-tls = [] -sqlite = ["rusqlite", "trust-dns-server/sqlite"] +sqlite = ["rusqlite", "hickory-server/sqlite"] [dependencies] async-trait.workspace = true @@ -76,13 +106,17 @@ rustls = { workspace = true, optional = true } time.workspace = true tokio = { workspace = true, features = ["time", "rt"] } tracing.workspace = true -trust-dns-client.workspace = true -trust-dns-proto = { workspace = true, features = ["testing"] } -trust-dns-resolver = { workspace = true, features = ["tokio-runtime"] } -trust-dns-server = { workspace = true, features = ["testing"] } +hickory-client.workspace = true +hickory-proto = { workspace = true, features = ["testing"] } +hickory-resolver = { workspace = true, features = ["tokio-runtime"] } +hickory-server = { workspace = true, features = ["testing"] } webpki-roots = { workspace = true, optional = true } [dev-dependencies] futures = { workspace = true, features = ["thread-pool"] } tokio = { workspace = true, features = ["macros", "rt"] } -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } diff --git a/tests/integration-tests/src/example_authority.rs b/tests/integration-tests/src/example_authority.rs index 6f66630877..2d7c8251e1 100644 --- a/tests/integration-tests/src/example_authority.rs +++ b/tests/integration-tests/src/example_authority.rs @@ -1,15 +1,15 @@ use std::str::FromStr; -use trust_dns_proto::rr::*; +use hickory_proto::rr::*; -use trust_dns_server::authority::ZoneType; -use trust_dns_server::store::in_memory::InMemoryAuthority; +use hickory_server::authority::ZoneType; +use hickory_server::store::in_memory::InMemoryAuthority; #[allow(unused)] #[allow(clippy::unreadable_literal)] pub fn create_example() -> InMemoryAuthority { + use hickory_client::rr::rdata::*; use std::net::*; - use trust_dns_client::rr::rdata::*; let origin: Name = Name::parse("example.com.", None).unwrap(); let mut records = InMemoryAuthority::empty(origin.clone(), ZoneType::Primary, false); @@ -200,10 +200,10 @@ pub fn create_example() -> InMemoryAuthority { #[cfg(feature = "dnssec")] #[allow(unused)] pub fn create_secure_example() -> InMemoryAuthority { + use hickory_proto::rr::dnssec::*; + use hickory_server::authority::{Authority, DnssecAuthority}; use openssl::rsa::Rsa; use time::Duration; - use trust_dns_proto::rr::dnssec::*; - use trust_dns_server::authority::{Authority, DnssecAuthority}; let mut authority = create_example(); let rsa = Rsa::generate(2048).unwrap(); diff --git a/tests/integration-tests/src/lib.rs b/tests/integration-tests/src/lib.rs index 8980f62dba..aadf8023cf 100644 --- a/tests/integration-tests/src/lib.rs +++ b/tests/integration-tests/src/lib.rs @@ -19,19 +19,19 @@ use futures::{ }; use tokio::time::{Duration, Instant, Sleep}; -use trust_dns_client::{ +use hickory_client::{ client::{ClientConnection, Signer}, error::ClientResult, op::*, serialize::binary::*, }; -use trust_dns_proto::{ +use hickory_proto::{ error::ProtoError, rr::Record, xfer::{DnsClientStream, DnsMultiplexer, DnsMultiplexerConnect, SerialMessage, StreamReceiver}, BufDnsStreamHandle, TokioTime, }; -use trust_dns_server::{ +use hickory_server::{ authority::{Catalog, MessageRequest, MessageResponse}, server::{Protocol, Request, RequestHandler, ResponseHandler, ResponseInfo}, }; diff --git a/tests/integration-tests/src/mock_client.rs b/tests/integration-tests/src/mock_client.rs index 0474735b1b..f4d30f9c07 100644 --- a/tests/integration-tests/src/mock_client.rs +++ b/tests/integration-tests/src/mock_client.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::error::Error; @@ -15,20 +15,20 @@ use std::task::{Context, Poll}; use futures::stream::{once, Stream}; use futures::{future, AsyncRead, AsyncWrite, Future}; -use trust_dns_client::op::{Message, Query}; -use trust_dns_client::rr::rdata::{CNAME, SOA}; -use trust_dns_client::rr::{Name, RData, Record}; -use trust_dns_proto::error::ProtoError; -use trust_dns_proto::tcp::DnsTcpStream; -use trust_dns_proto::udp::DnsUdpSocket; +use hickory_client::op::{Message, Query}; +use hickory_client::rr::rdata::{CNAME, SOA}; +use hickory_client::rr::{Name, RData, Record}; +use hickory_proto::error::ProtoError; +use hickory_proto::tcp::DnsTcpStream; +use hickory_proto::udp::DnsUdpSocket; #[cfg(any(feature = "dns-over-quic", feature = "dns-over-h3"))] -use trust_dns_proto::udp::QuicLocalAddr; -use trust_dns_proto::xfer::{DnsHandle, DnsRequest, DnsResponse}; -use trust_dns_proto::TokioTime; -use trust_dns_resolver::config::{NameServerConfig, ResolverOpts}; -use trust_dns_resolver::error::ResolveError; -use trust_dns_resolver::name_server::{ConnectionProvider, RuntimeProvider}; -use trust_dns_resolver::TokioHandle; +use hickory_proto::udp::QuicLocalAddr; +use hickory_proto::xfer::{DnsHandle, DnsRequest, DnsResponse}; +use hickory_proto::TokioTime; +use hickory_resolver::config::{NameServerConfig, ResolverOpts}; +use hickory_resolver::error::ResolveError; +use hickory_resolver::name_server::{ConnectionProvider, RuntimeProvider}; +use hickory_resolver::TokioHandle; pub struct TcpPlaceholder; diff --git a/tests/integration-tests/src/tls_client_connection.rs b/tests/integration-tests/src/tls_client_connection.rs index 6b8f0b0f2a..7024203a50 100644 --- a/tests/integration-tests/src/tls_client_connection.rs +++ b/tests/integration-tests/src/tls_client_connection.rs @@ -1,12 +1,12 @@ // Copyright 2015-2021 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! TLS based DNS client connection for Client impls -//! TODO: This modules was moved from trust-dns-rustls, it really doesn't need to exist if tests are refactored... +//! TODO: This modules was moved from hickory-dns-rustls, it really doesn't need to exist if tests are refactored... use std::marker::PhantomData; use std::net::SocketAddr; @@ -16,16 +16,16 @@ use std::sync::Arc; use futures::Future; use rustls::ClientConfig; -use trust_dns_client::client::ClientConnection; -use trust_dns_client::client::Signer; -use trust_dns_proto::error::ProtoError; -use trust_dns_proto::rustls::{tls_client_connect_with_bind_addr, TlsClientStream}; -use trust_dns_proto::tcp::Connect; -use trust_dns_proto::xfer::{DnsMultiplexer, DnsMultiplexerConnect}; +use hickory_client::client::ClientConnection; +use hickory_client::client::Signer; +use hickory_proto::error::ProtoError; +use hickory_proto::rustls::{tls_client_connect_with_bind_addr, TlsClientStream}; +use hickory_proto::tcp::Connect; +use hickory_proto::xfer::{DnsMultiplexer, DnsMultiplexerConnect}; /// Tls client connection /// -/// Use with `trust_dns_client::client::Client` impls +/// Use with `hickory_client::client::Client` impls pub struct TlsClientConnection { name_server: SocketAddr, bind_addr: Option, diff --git a/tests/integration-tests/tests/catalog_tests.rs b/tests/integration-tests/tests/catalog_tests.rs index 7be68c1f47..34445a3c6d 100644 --- a/tests/integration-tests/tests/catalog_tests.rs +++ b/tests/integration-tests/tests/catalog_tests.rs @@ -1,18 +1,18 @@ use std::{str::FromStr, sync::Arc}; -use trust_dns_client::{ +use hickory_client::{ op::*, rr::{rdata::*, *}, serialize::binary::{BinDecodable, BinEncodable}, }; -use trust_dns_server::{ +use hickory_server::{ authority::{Authority, Catalog, MessageRequest, ZoneType}, server::{Protocol, Request}, store::in_memory::InMemoryAuthority, }; -use trust_dns_integration::{example_authority::create_example, *}; +use hickory_integration::{example_authority::create_example, *}; #[allow(clippy::unreadable_literal)] pub fn create_test() -> InMemoryAuthority { diff --git a/tests/integration-tests/tests/client_future_tests.rs b/tests/integration-tests/tests/client_future_tests.rs index daa9b8da68..e145678012 100644 --- a/tests/integration-tests/tests/client_future_tests.rs +++ b/tests/integration-tests/tests/client_future_tests.rs @@ -13,8 +13,8 @@ use tokio::{ }; #[cfg(all(feature = "dnssec", feature = "sqlite"))] -use trust_dns_client::client::Signer; -use trust_dns_client::{ +use hickory_client::client::Signer; +use hickory_client::{ client::{AsyncClient, ClientHandle}, error::ClientErrorKind, op::{Edns, Message, MessageType, OpCode, Query, ResponseCode}, @@ -29,16 +29,16 @@ use trust_dns_client::{ udp::UdpClientStream, }; #[cfg(feature = "dnssec")] -use trust_dns_proto::rr::{dnssec::SigSigner, Record}; +use hickory_proto::rr::{dnssec::SigSigner, Record}; #[cfg(feature = "dnssec")] -use trust_dns_proto::xfer::{DnsExchangeBackground, DnsMultiplexer}; +use hickory_proto::xfer::{DnsExchangeBackground, DnsMultiplexer}; #[cfg(all(feature = "dnssec", feature = "sqlite"))] -use trust_dns_proto::TokioTime; -use trust_dns_proto::{iocompat::AsyncIoTokioAsStd, xfer::FirstAnswer, DnsHandle}; +use hickory_proto::TokioTime; +use hickory_proto::{iocompat::AsyncIoTokioAsStd, xfer::FirstAnswer, DnsHandle}; -use trust_dns_server::authority::{Authority, Catalog}; +use hickory_server::authority::{Authority, Catalog}; -use trust_dns_integration::{ +use hickory_integration::{ example_authority::create_example, NeverReturnsClientStream, TestClientStream, }; @@ -54,7 +54,7 @@ fn test_query_nonet() { let (stream, sender) = TestClientStream::new(Arc::new(StdMutex::new(catalog))); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); io_loop.block_on(test_query(&mut client)); io_loop.block_on(test_query(&mut client)); @@ -67,7 +67,7 @@ fn test_query_udp_ipv4() { let stream = UdpClientStream::::new(addr); let client = AsyncClient::connect(stream); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // TODO: timeouts on these requests so that the test doesn't hang io_loop.block_on(test_query(&mut client)); @@ -87,7 +87,7 @@ fn test_query_udp_ipv6() { let stream = UdpClientStream::::new(addr); let client = AsyncClient::connect(stream); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // TODO: timeouts on these requests so that the test doesn't hang io_loop.block_on(test_query(&mut client)); @@ -102,7 +102,7 @@ fn test_query_tcp_ipv4() { let (stream, sender) = TcpClientStream::>::new(addr); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // TODO: timeouts on these requests so that the test doesn't hang io_loop.block_on(test_query(&mut client)); @@ -121,7 +121,7 @@ fn test_query_tcp_ipv6() { let (stream, sender) = TcpClientStream::>::new(addr); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // TODO: timeouts on these requests so that the test doesn't hang io_loop.block_on(test_query(&mut client)); @@ -131,8 +131,8 @@ fn test_query_tcp_ipv6() { #[test] #[cfg(feature = "dns-over-https-rustls")] fn test_query_https() { + use hickory_proto::h2::HttpsClientStreamBuilder; use rustls::{ClientConfig, OwnedTrustAnchor, RootCertStore}; - use trust_dns_proto::h2::HttpsClientStreamBuilder; const ALPN_H2: &[u8] = b"h2"; @@ -164,7 +164,7 @@ fn test_query_https() { .build::>(addr, "cloudflare-dns.com".to_string()), ); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // TODO: timeouts on these requests so that the test doesn't hang io_loop.block_on(test_query(&mut client)); @@ -269,7 +269,7 @@ fn test_notify() { let (stream, sender) = TestClientStream::new(Arc::new(StdMutex::new(catalog))); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let name = Name::from_str("ping.example.com").unwrap(); @@ -297,10 +297,10 @@ async fn create_sig0_ready_client() -> ( ), Name, ) { + use hickory_proto::rr::dnssec::rdata::DNSSECRData; + use hickory_proto::rr::dnssec::{Algorithm, KeyPair}; + use hickory_server::store::sqlite::SqliteAuthority; use openssl::rsa::Rsa; - use trust_dns_proto::rr::dnssec::rdata::DNSSECRData; - use trust_dns_proto::rr::dnssec::{Algorithm, KeyPair}; - use trust_dns_server::store::sqlite::SqliteAuthority; let authority = create_example(); let mut authority = SqliteAuthority::new(authority, true, false); @@ -341,7 +341,7 @@ async fn create_sig0_ready_client() -> ( fn test_create() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // create a record let mut record = Record::with( @@ -389,7 +389,7 @@ fn test_create() { fn test_create_multi() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // create a record let mut record = Record::with( @@ -447,7 +447,7 @@ fn test_create_multi() { fn test_append() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // append a record let mut record = Record::with( @@ -527,7 +527,7 @@ fn test_append() { fn test_append_multi() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // append a record let mut record = Record::with( @@ -613,7 +613,7 @@ fn test_append_multi() { fn test_compare_and_swap() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // create a record let mut record = Record::with( @@ -671,7 +671,7 @@ fn test_compare_and_swap() { fn test_compare_and_swap_multi() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // create a record let mut current = RecordSet::with_ttl( @@ -737,7 +737,7 @@ fn test_compare_and_swap_multi() { fn test_delete_by_rdata() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // append a record let mut record1 = Record::with( @@ -789,7 +789,7 @@ fn test_delete_by_rdata() { fn test_delete_by_rdata_multi() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // append a record let mut rrset = RecordSet::with_ttl( @@ -866,7 +866,7 @@ fn test_delete_by_rdata_multi() { fn test_delete_rrset() { let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // append a record let mut record = Record::with( @@ -914,11 +914,11 @@ fn test_delete_rrset() { #[cfg(all(feature = "dnssec", feature = "sqlite"))] #[test] fn test_delete_all() { - use trust_dns_proto::rr::rdata::AAAA; + use hickory_proto::rr::rdata::AAAA; let io_loop = Runtime::new().unwrap(); let ((mut client, bg), origin) = io_loop.block_on(create_sig0_ready_client()); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // append a record let mut record = Record::with( @@ -1000,7 +1000,7 @@ fn test_timeout_query_nonet() { let client = AsyncClient::with_timeout(stream, sender, std::time::Duration::from_millis(1), None); let (client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); test_timeout_query(client, io_loop); } @@ -1021,7 +1021,7 @@ fn test_timeout_query_udp() { UdpClientStream::::with_timeout(addr, std::time::Duration::from_millis(1)); let client = AsyncClient::connect(stream); let (client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); test_timeout_query(client, io_loop); } diff --git a/tests/integration-tests/tests/client_tests.rs b/tests/integration-tests/tests/client_tests.rs index 7c1e5ad818..1c33e1c548 100644 --- a/tests/integration-tests/tests/client_tests.rs +++ b/tests/integration-tests/tests/client_tests.rs @@ -8,26 +8,26 @@ use futures::Future; #[cfg(feature = "dnssec")] use time::Duration; -use trust_dns_client::client::Signer; +use hickory_client::client::Signer; #[cfg(feature = "dnssec")] -use trust_dns_client::client::SyncDnssecClient; +use hickory_client::client::SyncDnssecClient; #[allow(deprecated)] -use trust_dns_client::client::{Client, ClientConnection, SyncClient}; -use trust_dns_client::tcp::TcpClientConnection; -use trust_dns_client::udp::UdpClientConnection; -use trust_dns_client::{ +use hickory_client::client::{Client, ClientConnection, SyncClient}; +use hickory_client::tcp::TcpClientConnection; +use hickory_client::udp::UdpClientConnection; +use hickory_client::{ error::ClientErrorKind, rr::rdata::opt::{EdnsCode, EdnsOption}, }; -use trust_dns_integration::example_authority::create_example; -use trust_dns_integration::{NeverReturnsClientConnection, TestClientStream}; -use trust_dns_proto::error::ProtoError; -use trust_dns_proto::op::*; +use hickory_integration::example_authority::create_example; +use hickory_integration::{NeverReturnsClientConnection, TestClientStream}; +use hickory_proto::error::ProtoError; +use hickory_proto::op::*; #[cfg(feature = "dnssec")] -use trust_dns_proto::rr::Record; -use trust_dns_proto::rr::{rdata::A, DNSClass, Name, RData, RecordType}; -use trust_dns_proto::xfer::{DnsMultiplexer, DnsMultiplexerConnect}; -use trust_dns_server::authority::{Authority, Catalog}; +use hickory_proto::rr::Record; +use hickory_proto::rr::{rdata::A, DNSClass, Name, RData, RecordType}; +use hickory_proto::xfer::{DnsMultiplexer, DnsMultiplexerConnect}; +use hickory_server::authority::{Authority, Catalog}; pub struct TestClientConnection { catalog: Arc>, @@ -438,10 +438,10 @@ fn test_nsec_query_type() { #[allow(deprecated)] #[cfg(all(feature = "dnssec", feature = "sqlite"))] fn create_sig0_ready_client(mut catalog: Catalog) -> (SyncClient, Name) { + use hickory_proto::rr::dnssec::rdata::{DNSSECRData, KEY}; + use hickory_proto::rr::dnssec::{Algorithm, KeyPair, Signer as SigSigner}; + use hickory_server::store::sqlite::SqliteAuthority; use openssl::rsa::Rsa; - use trust_dns_proto::rr::dnssec::rdata::{DNSSECRData, KEY}; - use trust_dns_proto::rr::dnssec::{Algorithm, KeyPair, Signer as SigSigner}; - use trust_dns_server::store::sqlite::SqliteAuthority; let authority = create_example(); let mut authority = SqliteAuthority::new(authority, true, false); @@ -766,7 +766,7 @@ fn test_delete_rrset() { #[cfg(all(feature = "dnssec", feature = "sqlite"))] #[test] fn test_delete_all() { - use trust_dns_proto::rr::rdata::AAAA; + use hickory_proto::rr::rdata::AAAA; let catalog = Catalog::new(); let (client, origin) = create_sig0_ready_client(catalog); diff --git a/tests/integration-tests/tests/dnssec_client_handle_tests.rs b/tests/integration-tests/tests/dnssec_client_handle_tests.rs index 58b3b247be..1fead83ce5 100644 --- a/tests/integration-tests/tests/dnssec_client_handle_tests.rs +++ b/tests/integration-tests/tests/dnssec_client_handle_tests.rs @@ -9,21 +9,21 @@ use tokio::net::TcpStream as TokioTcpStream; use tokio::net::UdpSocket as TokioUdpSocket; use tokio::runtime::Runtime; -use trust_dns_client::client::{AsyncClient, ClientHandle, MemoizeClientHandle}; -use trust_dns_client::tcp::TcpClientStream; - -use trust_dns_proto::iocompat::AsyncIoTokioAsStd; -use trust_dns_proto::op::ResponseCode; -use trust_dns_proto::rr::dnssec::TrustAnchor; -use trust_dns_proto::rr::rdata::A; -use trust_dns_proto::rr::Name; -use trust_dns_proto::rr::{DNSClass, RData, RecordType}; -use trust_dns_proto::udp::{UdpClientConnect, UdpClientStream}; -use trust_dns_proto::DnssecDnsHandle; -use trust_dns_server::authority::{Authority, Catalog}; - -use trust_dns_integration::example_authority::create_secure_example; -use trust_dns_integration::TestClientStream; +use hickory_client::client::{AsyncClient, ClientHandle, MemoizeClientHandle}; +use hickory_client::tcp::TcpClientStream; + +use hickory_proto::iocompat::AsyncIoTokioAsStd; +use hickory_proto::op::ResponseCode; +use hickory_proto::rr::dnssec::TrustAnchor; +use hickory_proto::rr::rdata::A; +use hickory_proto::rr::Name; +use hickory_proto::rr::{DNSClass, RData, RecordType}; +use hickory_proto::udp::{UdpClientConnect, UdpClientStream}; +use hickory_proto::DnssecDnsHandle; +use hickory_server::authority::{Authority, Catalog}; + +use hickory_integration::example_authority::create_secure_example; +use hickory_integration::TestClientStream; #[test] fn test_secure_query_example_nonet() { @@ -99,7 +99,7 @@ where assert_eq!(response.response_code(), ResponseCode::NXDomain); } -// TODO: NSEC response code wrong in Trust-DNS? Issue #53 +// TODO: NSEC response code wrong in Hickory DNS? Issue #53 // #[test] // fn test_nsec_query_type_nonet() { // with_nonet(test_nsec_query_type); @@ -242,7 +242,7 @@ where .block_on(client) .expect("failed to create new client"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let client = MemoizeClientHandle::new(client); let secure_client = DnssecDnsHandle::with_trust_anchor(client, trust_anchor); @@ -278,7 +278,7 @@ where let stream: UdpClientConnect = UdpClientStream::new(addr); let client = AsyncClient::connect(stream); let (client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let client = MemoizeClientHandle::new(client); let secure_client = DnssecDnsHandle::new(client); @@ -315,7 +315,7 @@ where let (stream, sender) = TcpClientStream::>::new(addr); let client = AsyncClient::new(Box::new(stream), sender, None); let (client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let client = MemoizeClientHandle::new(client); let secure_client = DnssecDnsHandle::new(client); diff --git a/tests/integration-tests/tests/lookup_tests.rs b/tests/integration-tests/tests/lookup_tests.rs index bc80b6d60a..61aa46b725 100644 --- a/tests/integration-tests/tests/lookup_tests.rs +++ b/tests/integration-tests/tests/lookup_tests.rs @@ -6,13 +6,13 @@ use std::{ use tokio::runtime::Runtime; -use trust_dns_proto::{ +use hickory_proto::{ op::{NoopMessageFinalizer, Query}, rr::{rdata::A, DNSClass, Name, RData, Record, RecordType}, xfer::{DnsExchange, DnsMultiplexer, DnsResponse}, TokioTime, }; -use trust_dns_resolver::{ +use hickory_resolver::{ caching_client::CachingClient, config::LookupIpStrategy, error::ResolveError, @@ -20,12 +20,12 @@ use trust_dns_resolver::{ lookup_ip::LookupIpFuture, Hosts, }; -use trust_dns_server::{ +use hickory_server::{ authority::{Authority, Catalog}, store::in_memory::InMemoryAuthority, }; -use trust_dns_integration::{example_authority::create_example, mock_client::*, TestClientStream}; +use hickory_integration::{example_authority::create_example, mock_client::*, TestClientStream}; #[test] fn test_lookup() { @@ -39,7 +39,7 @@ fn test_lookup() { let client = DnsExchange::connect::<_, _, TokioTime>(dns_conn); let (client, bg) = io_loop.block_on(client).expect("client failed to connect"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let lookup = LookupFuture::lookup( vec![Name::from_str("www.example.com.").unwrap()], @@ -67,7 +67,7 @@ fn test_lookup_hosts() { let client = DnsExchange::connect::<_, _, TokioTime>(dns_conn); let (client, bg) = io_loop.block_on(client).expect("client connect failed"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let mut hosts = Hosts::default(); let record = Record::from_rdata( @@ -125,7 +125,7 @@ fn test_lookup_ipv4_like() { let client = DnsExchange::connect::<_, _, TokioTime>(dns_conn); let (client, bg) = io_loop.block_on(client).expect("client connect failed"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let lookup = LookupIpFuture::lookup( vec![Name::from_str("1.2.3.4.example.com.").unwrap()], @@ -155,7 +155,7 @@ fn test_lookup_ipv4_like_fall_through() { let client = DnsExchange::connect::<_, _, TokioTime>(dns_conn); let (client, bg) = io_loop.block_on(client).expect("client connect failed"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); let lookup = LookupIpFuture::lookup( vec![Name::from_str("198.51.100.35.example.com.").unwrap()], diff --git a/tests/integration-tests/tests/mdns_tests.rs b/tests/integration-tests/tests/mdns_tests.rs index fd438f2a82..5902b3c3c1 100644 --- a/tests/integration-tests/tests/mdns_tests.rs +++ b/tests/integration-tests/tests/mdns_tests.rs @@ -11,13 +11,13 @@ use futures::{future, StreamExt}; use once_cell::sync::Lazy; use tokio::runtime::Runtime; -use trust_dns_client::client::{AsyncClient, ClientHandle}; -use trust_dns_client::multicast::MdnsQueryType; -use trust_dns_client::multicast::{MdnsClientStream, MdnsStream}; -use trust_dns_client::op::Message; -use trust_dns_client::rr::{DNSClass, Name, RecordType}; -use trust_dns_client::serialize::binary::BinDecodable; -use trust_dns_proto::xfer::SerialMessage; +use hickory_client::client::{AsyncClient, ClientHandle}; +use hickory_client::multicast::MdnsQueryType; +use hickory_client::multicast::{MdnsClientStream, MdnsStream}; +use hickory_client::op::Message; +use hickory_client::rr::{DNSClass, Name, RecordType}; +use hickory_client::serialize::binary::BinDecodable; +use hickory_proto::xfer::SerialMessage; const MDNS_PORT: u16 = 5363; @@ -113,7 +113,7 @@ fn test_query_mdns_ipv4() { let (stream, sender) = MdnsClientStream::new(addr, MdnsQueryType::OneShot, None, None, None); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("failed to connect mDNS"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // A PTR request is the DNS-SD method for doing a directory listing... let name = Name::from_ascii("_dns._udp.local.").unwrap(); @@ -137,7 +137,7 @@ fn test_query_mdns_ipv6() { let (stream, sender) = MdnsClientStream::new(addr, MdnsQueryType::OneShot, None, None, Some(5)); let client = AsyncClient::new(stream, sender, None); let (mut client, bg) = io_loop.block_on(client).expect("failed to connect client"); - trust_dns_proto::spawn_bg(&io_loop, bg); + hickory_proto::spawn_bg(&io_loop, bg); // A PTR request is the DNS-SD method for doing a directory listing... let name = Name::from_ascii("_dns._udp.local.").unwrap(); diff --git a/tests/integration-tests/tests/name_server_pool_tests.rs b/tests/integration-tests/tests/name_server_pool_tests.rs index 37df5feeff..2600cf2a4a 100644 --- a/tests/integration-tests/tests/name_server_pool_tests.rs +++ b/tests/integration-tests/tests/name_server_pool_tests.rs @@ -10,14 +10,14 @@ use std::task::Poll; use futures::executor::block_on; use futures::{future, Future}; -use trust_dns_client::op::{Query, ResponseCode}; -use trust_dns_client::rr::{Name, RecordType}; -use trust_dns_integration::mock_client::*; -use trust_dns_proto::error::ProtoError; -use trust_dns_proto::xfer::{DnsHandle, DnsResponse, FirstAnswer}; -use trust_dns_resolver::config::*; -use trust_dns_resolver::error::{ResolveError, ResolveErrorKind}; -use trust_dns_resolver::name_server::{NameServer, NameServerPool}; +use hickory_client::op::{Query, ResponseCode}; +use hickory_client::rr::{Name, RecordType}; +use hickory_integration::mock_client::*; +use hickory_proto::error::ProtoError; +use hickory_proto::xfer::{DnsHandle, DnsResponse, FirstAnswer}; +use hickory_resolver::config::*; +use hickory_resolver::error::{ResolveError, ResolveErrorKind}; +use hickory_resolver::name_server::{NameServer, NameServerPool}; const DEFAULT_SERVER_ADDR: IpAddr = IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)); @@ -521,7 +521,7 @@ fn test_distrust_nx_responses() { #[test] fn test_user_provided_server_order() { - use trust_dns_proto::rr::Record; + use hickory_proto::rr::Record; let mut options = ResolverOpts::default(); diff --git a/tests/integration-tests/tests/retry_dns_handle_tests.rs b/tests/integration-tests/tests/retry_dns_handle_tests.rs index d158cc4a39..2883c5dd35 100644 --- a/tests/integration-tests/tests/retry_dns_handle_tests.rs +++ b/tests/integration-tests/tests/retry_dns_handle_tests.rs @@ -5,12 +5,12 @@ use std::sync::{ use futures::{executor::block_on, future, stream, Stream}; -use trust_dns_proto::{ +use hickory_proto::{ op::{Message, MessageType, OpCode, ResponseCode}, xfer::{DnsRequest, DnsResponse, FirstAnswer}, DnsHandle, RetryDnsHandle, }; -use trust_dns_resolver::error::ResolveError; +use hickory_resolver::error::ResolveError; #[derive(Clone)] struct TestClient { diff --git a/tests/integration-tests/tests/server_future_tests.rs b/tests/integration-tests/tests/server_future_tests.rs index 109d9f69dc..e7999cc078 100644 --- a/tests/integration-tests/tests/server_future_tests.rs +++ b/tests/integration-tests/tests/server_future_tests.rs @@ -10,24 +10,24 @@ use tokio::net::TcpListener; use tokio::net::UdpSocket; use tokio::runtime::Runtime; -use trust_dns_client::client::*; -use trust_dns_client::op::*; -use trust_dns_client::rr::*; -use trust_dns_client::tcp::TcpClientConnection; -use trust_dns_client::udp::UdpClientConnection; -use trust_dns_proto::error::ProtoError; -use trust_dns_proto::rr::rdata::A; -use trust_dns_proto::xfer::DnsRequestSender; +use hickory_client::client::*; +use hickory_client::op::*; +use hickory_client::rr::*; +use hickory_client::tcp::TcpClientConnection; +use hickory_client::udp::UdpClientConnection; +use hickory_proto::error::ProtoError; +use hickory_proto::rr::rdata::A; +use hickory_proto::xfer::DnsRequestSender; -use trust_dns_server::authority::{Authority, Catalog}; -use trust_dns_server::ServerFuture; +use hickory_server::authority::{Authority, Catalog}; +use hickory_server::ServerFuture; -use trust_dns_integration::example_authority::create_example; +use hickory_integration::example_authority::create_example; #[cfg(feature = "dns-over-rustls")] -use rustls::RootCertStore; +use hickory_integration::tls_client_connection::TlsClientConnection; #[cfg(feature = "dns-over-rustls")] -use trust_dns_integration::tls_client_connection::TlsClientConnection; +use rustls::RootCertStore; #[test] #[allow(clippy::uninlined_format_args)] @@ -234,9 +234,9 @@ fn read_file(path: &str) -> Vec { #[test] #[allow(clippy::uninlined_format_args)] fn test_server_www_tls() { + use hickory_proto::rustls::tls_server; use std::env; use std::path::Path; - use trust_dns_proto::rustls::tls_server; let dns_name = "ns.example.com"; @@ -303,7 +303,7 @@ fn lazy_tls_client( ipaddr: SocketAddr, dns_name: String, cert_chain: Vec, -) -> TlsClientConnection> { +) -> TlsClientConnection> { use rustls::ClientConfig; let mut root_store = RootCertStore::empty(); @@ -409,8 +409,8 @@ fn server_thread_tls( cert_chain: (Vec, rustls::PrivateKey), io_loop: Runtime, ) { + use hickory_server::config::dnssec::{self, CertType, PrivateKeyType, TlsCertConfig}; use std::path::Path; - use trust_dns_server::config::dnssec::{self, CertType, PrivateKeyType, TlsCertConfig}; let catalog = new_catalog(); let mut server = ServerFuture::new(catalog); diff --git a/tests/integration-tests/tests/sqlite_authority_tests.rs b/tests/integration-tests/tests/sqlite_authority_tests.rs index 39fa839e14..ac434e4bb8 100644 --- a/tests/integration-tests/tests/sqlite_authority_tests.rs +++ b/tests/integration-tests/tests/sqlite_authority_tests.rs @@ -4,28 +4,28 @@ use std::str::FromStr; use rusqlite::*; -use trust_dns_proto::op::*; -use trust_dns_proto::rr::dnssec::*; -use trust_dns_proto::rr::rdata::*; -use trust_dns_proto::rr::*; - -use trust_dns_server::authority::LookupOptions; -use trust_dns_server::authority::{Authority, ZoneType}; -use trust_dns_server::server::Protocol; -use trust_dns_server::server::RequestInfo; -use trust_dns_server::store::in_memory::InMemoryAuthority; -use trust_dns_server::store::sqlite::{Journal, SqliteAuthority}; +use hickory_proto::op::*; +use hickory_proto::rr::dnssec::*; +use hickory_proto::rr::rdata::*; +use hickory_proto::rr::*; + +use hickory_server::authority::LookupOptions; +use hickory_server::authority::{Authority, ZoneType}; +use hickory_server::server::Protocol; +use hickory_server::server::RequestInfo; +use hickory_server::store::in_memory::InMemoryAuthority; +use hickory_server::store::sqlite::{Journal, SqliteAuthority}; const TEST_HEADER: &Header = &Header::new(); fn create_example() -> SqliteAuthority { - let authority = trust_dns_integration::example_authority::create_example(); + let authority = hickory_integration::example_authority::create_example(); SqliteAuthority::new(authority, true, false) } #[cfg(feature = "dnssec")] fn create_secure_example() -> SqliteAuthority { - let authority = trust_dns_integration::example_authority::create_secure_example(); + let authority = hickory_integration::example_authority::create_secure_example(); SqliteAuthority::new(authority, true, true) } @@ -207,8 +207,8 @@ async fn test_authority() { #[cfg(feature = "dnssec")] #[tokio::test] async fn test_authorize() { - use trust_dns_client::serialize::binary::{BinDecodable, BinEncodable}; - use trust_dns_server::authority::MessageRequest; + use hickory_client::serialize::binary::{BinDecodable, BinEncodable}; + use hickory_server::authority::MessageRequest; let authority = create_example(); @@ -904,7 +904,7 @@ async fn test_update() { #[tokio::test] #[allow(clippy::uninlined_format_args)] async fn test_zone_signing() { - use trust_dns_proto::rr::dnssec::rdata::RRSIG; + use hickory_proto::rr::dnssec::rdata::RRSIG; let authority = create_secure_example(); diff --git a/tests/integration-tests/tests/truncation_tests.rs b/tests/integration-tests/tests/truncation_tests.rs index 3fb3b203e4..8baa0048c7 100644 --- a/tests/integration-tests/tests/truncation_tests.rs +++ b/tests/integration-tests/tests/truncation_tests.rs @@ -1,18 +1,18 @@ +use hickory_client::client::AsyncClient; +use hickory_proto::op::{Edns, Message, MessageType, OpCode, Query}; +use hickory_proto::rr::rdata::{A, SOA}; +use hickory_proto::rr::{DNSClass, Name, RData, Record, RecordSet, RecordType, RrKey}; +use hickory_proto::udp::UdpClientStream; +use hickory_proto::xfer::FirstAnswer; +use hickory_proto::DnsHandle; +use hickory_server::authority::{Catalog, ZoneType}; +use hickory_server::store::in_memory::InMemoryAuthority; +use hickory_server::ServerFuture; use std::collections::BTreeMap; use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; use std::str::FromStr; use std::sync::Arc; use tokio::net::UdpSocket; -use trust_dns_client::client::AsyncClient; -use trust_dns_proto::op::{Edns, Message, MessageType, OpCode, Query}; -use trust_dns_proto::rr::rdata::{A, SOA}; -use trust_dns_proto::rr::{DNSClass, Name, RData, Record, RecordSet, RecordType, RrKey}; -use trust_dns_proto::udp::UdpClientStream; -use trust_dns_proto::xfer::FirstAnswer; -use trust_dns_proto::DnsHandle; -use trust_dns_server::authority::{Catalog, ZoneType}; -use trust_dns_server::store::in_memory::InMemoryAuthority; -use trust_dns_server::ServerFuture; #[tokio::test] async fn test_truncation() { diff --git a/tests/test-data/test_configs/default/0.zone b/tests/test-data/test_configs/default/0.zone index 482d90573e..371e385fce 100644 --- a/tests/test-data/test_configs/default/0.zone +++ b/tests/test-data/test_configs/default/0.zone @@ -1,9 +1,9 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name $TTL 3D -@ IN SOA trust-dns.org. root.trust-dns.org. ( +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL - NS trust-dns.org. + NS hickory-dns.org. diff --git a/tests/test-data/test_configs/default/127.0.0.1.zone b/tests/test-data/test_configs/default/127.0.0.1.zone index 82639656ac..d55b876ec2 100644 --- a/tests/test-data/test_configs/default/127.0.0.1.zone +++ b/tests/test-data/test_configs/default/127.0.0.1.zone @@ -1,11 +1,11 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name $TTL 3D -@ IN SOA trust-dns.org. root.trust-dns.org. ( +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL - NS trust-dns.org. + NS hickory-dns.org. 1 PTR localhost. diff --git a/tests/test-data/test_configs/default/255.zone b/tests/test-data/test_configs/default/255.zone index 482d90573e..371e385fce 100644 --- a/tests/test-data/test_configs/default/255.zone +++ b/tests/test-data/test_configs/default/255.zone @@ -1,9 +1,9 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name $TTL 3D -@ IN SOA trust-dns.org. root.trust-dns.org. ( +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL - NS trust-dns.org. + NS hickory-dns.org. diff --git a/tests/test-data/test_configs/default/implicitclass.zone b/tests/test-data/test_configs/default/implicitclass.zone index 62cc6ea598..c581842109 100644 --- a/tests/test-data/test_configs/default/implicitclass.zone +++ b/tests/test-data/test_configs/default/implicitclass.zone @@ -1,6 +1,6 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name $TTL 3D -@ SOA trust-dns.org. root.trust-dns.org. ( +@ SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry diff --git a/tests/test-data/test_configs/default/ipv6_1.zone b/tests/test-data/test_configs/default/ipv6_1.zone index 82639656ac..d55b876ec2 100644 --- a/tests/test-data/test_configs/default/ipv6_1.zone +++ b/tests/test-data/test_configs/default/ipv6_1.zone @@ -1,11 +1,11 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name $TTL 3D -@ IN SOA trust-dns.org. root.trust-dns.org. ( +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL - NS trust-dns.org. + NS hickory-dns.org. 1 PTR localhost. diff --git a/tests/test-data/test_configs/default/localhost.zone b/tests/test-data/test_configs/default/localhost.zone index 3660cbd7a3..b9e4693b90 100644 --- a/tests/test-data/test_configs/default/localhost.zone +++ b/tests/test-data/test_configs/default/localhost.zone @@ -1,12 +1,12 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name $TTL 3D -@ IN SOA trust-dns.org. root.trust-dns.org. ( +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry 604800 ; Expire 86400) ; Minimum TTL - NS trust-dns.org. + NS hickory-dns.org. localhost. A 127.0.0.1 AAAA ::1 diff --git a/tests/test-data/test_configs/default/nonewline.zone b/tests/test-data/test_configs/default/nonewline.zone index 2b332dd3c2..1bdc4c5059 100644 --- a/tests/test-data/test_configs/default/nonewline.zone +++ b/tests/test-data/test_configs/default/nonewline.zone @@ -1,6 +1,6 @@ -; replace the trust-dns.org with your own name +; replace the hickory-dns.org with your own name $TTL 3D -@ IN SOA trust-dns.org. root.trust-dns.org. ( +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry diff --git a/tests/test-data/test_configs/dnssec/example.com.zone b/tests/test-data/test_configs/dnssec/example.com.zone index 55a6de1a32..5a25ffd98b 100644 --- a/tests/test-data/test_configs/dnssec/example.com.zone +++ b/tests/test-data/test_configs/dnssec/example.com.zone @@ -1,5 +1,5 @@ -; replace the trust-dns.org with your own name -@ IN SOA trust-dns.org. root.trust-dns.org. ( +; replace the hickory-dns.org with your own name +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 28800 ; Refresh 7200 ; Retry diff --git a/tests/test-data/test_configs/example.com.zone b/tests/test-data/test_configs/example.com.zone index a36165e7e6..94ee3a107c 100644 --- a/tests/test-data/test_configs/example.com.zone +++ b/tests/test-data/test_configs/example.com.zone @@ -1,5 +1,5 @@ -; replace the trust-dns.org with your own name -@ IN SOA trust-dns.org. root.trust-dns.org. ( +; replace the hickory-dns.org with your own name +@ IN SOA hickory-dns.org. root.hickory-dns.org. ( 199609203 ; Serial 8h ; Refresh 120m ; Retry diff --git a/tests/test-data/test_configs/example.toml b/tests/test-data/test_configs/example.toml index b259ab37f3..6244320e97 100644 --- a/tests/test-data/test_configs/example.toml +++ b/tests/test-data/test_configs/example.toml @@ -1,11 +1,11 @@ ## -## This is an example configuration file for the Trust-DNS named server. +## This is an example configuration file for the Hickory DNS named server. ## ## The format is in TOML: https://github.com/toml-lang/toml which was chosen -## as the configuration format for Trust-DNS. While Trust-DNS is intended to +## as the configuration format for Hickory DNS. While Hickory DNS is intended to ## be a drop-in replacement for BIND9, it will not support the named.conf files ## directly. At some point, there will be a binary tool for converting the -## BIND9 configuration files over to Trust-DNS TOML. +## BIND9 configuration files over to Hickory DNS TOML. ## ## Many of these options are available as both command line options and ## configuration options in these files. In that case, the command line option @@ -93,7 +93,7 @@ file = "example.com.zone" ## set of DNSSEC algorithms to use to sign the zone. enable_dnssec must be true. ## these will be lookedup by $file.{key_name}.pem, for backward compatibility -## with previous versions of Trust-DNS, if enable_dnssec is enabled but +## with previous versions of Hickory DNS, if enable_dnssec is enabled but ## supported_algorithms is not specified, it will default to "RSASHA256" and ## look for the $file.pem for the key. To control key length, or other options ## keys of the specified formats can be generated in PEM format. Instructions diff --git a/tests/test-data/test_configs/sec/gen-keys.sh b/tests/test-data/test_configs/sec/gen-keys.sh index 370f759368..8359c970dd 100755 --- a/tests/test-data/test_configs/sec/gen-keys.sh +++ b/tests/test-data/test_configs/sec/gen-keys.sh @@ -24,7 +24,7 @@ echo "====> generating cert" ${OPENSSL:?} req -new -x509 -days 365 -sha256 \ -key ${KEY_FILE:?} -keyform der \ -out ${CRT_FILE:?} -outform der \ - -subj '/O=Trust-DNS/CN=ns.example.com' \ + -subj '/O=Hickory DNS/CN=ns.example.com' \ -config <(cat /etc/ssl/openssl.cnf <(printf "\n[x509v3]\nsubjectAltName=critical,DNS:ns.example.com\nkeyUsage=critical,digitalSignature,keyAgreement,keyCertSign\nextendedKeyUsage=critical,serverAuth,clientAuth\nbasicConstraints=critical,pathlen:0")) \ -extensions x509v3 \ -reqexts x509v3 diff --git a/util/Cargo.toml b/util/Cargo.toml index 13fc6733c7..5ebf264a7c 100644 --- a/util/Cargo.toml +++ b/util/Cargo.toml @@ -1,14 +1,14 @@ [package] -name = "trust-dns-util" +name = "hickory-util" # A short blurb about the package. This is not rendered in any format when # uploaded to crates.io (aka this is not markdown) description = """ -Utilities that complement Trust-DNS. +Utilities that complement Hickory DNS. """ # These URLs point to more information about the repository -documentation = "https://docs.rs/crate/trust-dns-util" +documentation = "https://docs.rs/crate/hickory-util" # This points to a file in the repository (relative to this Cargo.toml). The # contents of this file are stored and indexed in the registry. @@ -25,23 +25,59 @@ categories.workspace = true license.workspace = true [badges] -#github-actions = { repository = "bluejekyll/trust-dns", branch = "main", workflow = "test" } -codecov = { repository = "bluejekyll/trust-dns", branch = "main", service = "github" } +#github-actions = { repository = "bluejekyll/hickory", branch = "main", workflow = "test" } +codecov = { repository = "hickory-dns/hickory-dns", branch = "main", service = "github" } maintenance = { status = "actively-developed" } [features] -dns-over-rustls = ["rustls", "trust-dns-proto/dns-over-rustls", "trust-dns-client/dns-over-rustls", "trust-dns-resolver/dns-over-rustls"] -dns-over-https-rustls = ["dns-over-https", "dns-over-rustls", "trust-dns-proto/dns-over-https-rustls", "trust-dns-client/dns-over-https-rustls", "trust-dns-resolver/dns-over-https-rustls"] -dns-over-https = ["trust-dns-proto/dns-over-https", "trust-dns-client/dns-over-https","trust-dns-resolver/dns-over-https"] -dns-over-quic = ["dns-over-rustls", "trust-dns-resolver/dns-over-quic"] -dns-over-h3 = ["dns-over-rustls", "trust-dns-resolver/dns-over-h3"] +dns-over-rustls = [ + "rustls", + "hickory-proto/dns-over-rustls", + "hickory-client/dns-over-rustls", + "hickory-resolver/dns-over-rustls", +] +dns-over-https-rustls = [ + "dns-over-https", + "dns-over-rustls", + "hickory-proto/dns-over-https-rustls", + "hickory-client/dns-over-https-rustls", + "hickory-resolver/dns-over-https-rustls", +] +dns-over-https = [ + "hickory-proto/dns-over-https", + "hickory-client/dns-over-https", + "hickory-resolver/dns-over-https", +] +dns-over-quic = ["dns-over-rustls", "hickory-resolver/dns-over-quic"] +dns-over-h3 = ["dns-over-rustls", "hickory-resolver/dns-over-h3"] -webpki-roots = ["dep:webpki-roots", "trust-dns-proto/webpki-roots", "trust-dns-client/webpki-roots", "trust-dns-resolver/webpki-roots"] -native-certs = ["dep:rustls-native-certs", "trust-dns-proto/native-certs", "trust-dns-client/native-certs", "trust-dns-resolver/native-certs"] +webpki-roots = [ + "dep:webpki-roots", + "hickory-proto/webpki-roots", + "hickory-client/webpki-roots", + "hickory-resolver/webpki-roots", +] +native-certs = [ + "dep:rustls-native-certs", + "hickory-proto/native-certs", + "hickory-client/native-certs", + "hickory-resolver/native-certs", +] dnssec = [] -dnssec-openssl = ["dnssec", "openssl", "trust-dns-client/dnssec-openssl", "trust-dns-proto/dnssec-openssl", "trust-dns-resolver/dnssec-openssl"] -dnssec-ring = ["dnssec", "trust-dns-client/dnssec-ring", "trust-dns-proto/dnssec-ring", "trust-dns-resolver/dnssec-ring"] +dnssec-openssl = [ + "dnssec", + "openssl", + "hickory-client/dnssec-openssl", + "hickory-proto/dnssec-openssl", + "hickory-resolver/dnssec-openssl", +] +dnssec-ring = [ + "dnssec", + "hickory-client/dnssec-ring", + "hickory-proto/dnssec-ring", + "hickory-resolver/dnssec-ring", +] [[bin]] name = "dnskey-to-pem" @@ -56,17 +92,31 @@ name = "pem-to-public-dnskey" required-features = ["dnssec-openssl"] [dependencies] -clap = { workspace = true, default-features = false, features = ["std", "cargo", "derive", "color", "suggestions", "help", "usage"] } +clap = { workspace = true, default-features = false, features = [ + "std", + "cargo", + "derive", + "color", + "suggestions", + "help", + "usage", +] } console.workspace = true data-encoding.workspace = true openssl = { workspace = true, features = ["v102", "v110"], optional = true } -rustls = { workspace = true, features = ["dangerous_configuration"], optional = true } +rustls = { workspace = true, features = [ + "dangerous_configuration", +], optional = true } rustls-native-certs = { workspace = true, optional = true } tracing.workspace = true -tracing-subscriber = { workspace = true, features = ["std", "fmt", "env-filter"] } -trust-dns-client.workspace = true -trust-dns-proto.workspace = true -trust-dns-recursor.workspace = true -trust-dns-resolver = { workspace = true, features = ["system-config"] } +tracing-subscriber = { workspace = true, features = [ + "std", + "fmt", + "env-filter", +] } +hickory-client.workspace = true +hickory-proto.workspace = true +hickory-recursor.workspace = true +hickory-resolver = { workspace = true, features = ["system-config"] } tokio = { workspace = true, features = ["rt-multi-thread", "macros", "time"] } webpki-roots = { workspace = true, optional = true } diff --git a/util/README.md b/util/README.md index 0aaa86c2d5..618aa7fef2 100644 --- a/util/README.md +++ b/util/README.md @@ -1,13 +1,13 @@ # Overview -Trust-DNS Util is a support library for the Trust-DNS libraries. +Hickory DNS Util is a support library for the Hickory DNS libraries. ## resolve -Useful for testing trust-dns-resolver and it's features via an independent CLI +Useful for testing hickory-resolver and it's features via an independent CLI ```shell -$ cargo install --bin resolve trust-dns-util +$ cargo install --bin resolve hickory-util ``` ### example @@ -24,10 +24,10 @@ Success for query name: www.example.com. type: A class: IN ```shell $ resolve -h resolve 0.20.0-alpha.3 -A CLI interface for the trust-dns-resolver. +A CLI interface for the hickory-resolver. -This utility directly uses the trust-dns-resolver to perform a lookup to a set of nameservers. Many of the features can -be directly tested via the FLAGS and OPTIONS. By default (like trust-dns-resolver) the configured nameservers are the +This utility directly uses the hickory-resolver to perform a lookup to a set of nameservers. Many of the features can +be directly tested via the FLAGS and OPTIONS. By default (like hickory-resolver) the configured nameservers are the Google provided ones. The system configured ones can be used with the `--system` FLAG. Other nameservers, as many as desired, can be configured directly with the `--nameserver` OPTION. @@ -66,7 +66,7 @@ This will take a private DNSKEY as generated by BIND9 and output an OpenSSL comp ```console $ cargo run --bin pem-to-public-dnskey -- --help -Trust-DNS dnskey-to-pem 0.11.3 +Hickory DNS dnskey-to-pem 0.11.3 Benjamin Fry Converts a dnskey, as generated from BIND's dnssec-keygen, into pem format @@ -87,11 +87,11 @@ ARGS: ## pem-to-public-dnskey -This utility can be used to output raw bytes in the DNSKEY RDATA format. This is useful for associating custom public keys with the TrustAnchor facility in Trust-DNS. +This utility can be used to output raw bytes in the DNSKEY RDATA format. This is useful for associating custom public keys with the TrustAnchor facility in Hickory DNS. ```console $ cargo run --bin pem-to-public-dnskey -- --help -Trust-DNS pem-to-public-dnskey 0.11.3 +Hickory DNS pem-to-public-dnskey 0.11.3 Benjamin Fry Converts a PEM formatted public key into a raw public dnskey (this is not the inverse of bind_dnskey_to_pem). This can be used to create a dnskey in the TrustAnchor internal format. @@ -112,4 +112,4 @@ ARGS: ## Versioning -Trust-DNS does it's best job to follow semver. Trust-DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Trust-DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Trust-DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. +Hickory DNS does it's best job to follow semver. Hickory DNS will be promoted to 1.0 upon stabilization of the publicly exposed APIs. This does not mean that Hickory DNS will necessarily break on upgrades between 0.x updates. Whenever possible, old APIs will be deprecated with notes on what replaced those deprecations. Hickory DNS will make a best effort to never break software which depends on it due to API changes, though this can not be guaranteed. Deprecated interfaces will be maintained for at minimum one major release after that in which they were deprecated (where possible), with the exception of the upgrade to 1.0 where all deprecated interfaces will be planned to be removed. diff --git a/util/src/bin/dns.rs b/util/src/bin/dns.rs index 2299ed6716..dba43fdcb0 100644 --- a/util/src/bin/dns.rs +++ b/util/src/bin/dns.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The dns client program @@ -33,7 +33,7 @@ use rustls::{ use tokio::net::{TcpStream as TokioTcpStream, UdpSocket}; use tracing::Level; -use trust_dns_client::{ +use hickory_client::{ client::{AsyncClient, ClientHandle}, rr::{DNSClass, RData, RecordSet, RecordType}, serialize::txt::RDataParser, @@ -41,12 +41,12 @@ use trust_dns_client::{ udp::UdpClientStream, }; #[cfg(feature = "dns-over-rustls")] -use trust_dns_proto::rustls::tls_client_connect; -use trust_dns_proto::{iocompat::AsyncIoTokioAsStd, rr::Name}; +use hickory_proto::rustls::tls_client_connect; +use hickory_proto::{iocompat::AsyncIoTokioAsStd, rr::Name}; -/// A CLI interface for the trust-dns-client. +/// A CLI interface for the hickory-client. /// -/// This utility directly uses the trust-dns-client to perform actions with a single +/// This utility directly uses the hickory-client to perform actions with a single /// DNS server #[derive(Debug, Parser)] #[clap(name = "trust dns client", version)] @@ -230,7 +230,7 @@ pub async fn main() -> Result<(), Box> { None }; - trust_dns_util::logger(env!("CARGO_BIN_NAME"), log_level); + hickory_util::logger(env!("CARGO_BIN_NAME"), log_level); // TODO: need to cleanup all of ClientHandle and the Client in general to make it dynamically usable. match opts.protocol { @@ -314,7 +314,7 @@ async fn https(_opts: Opts) -> Result<(), Box> { #[cfg(feature = "dns-over-https")] async fn https(opts: Opts) -> Result<(), Box> { - use trust_dns_proto::h2::HttpsClientStreamBuilder; + use hickory_proto::h2::HttpsClientStreamBuilder; let nameserver = opts.nameserver; let alpn = opts @@ -353,7 +353,7 @@ async fn quic(_opts: Opts) -> Result<(), Box> { #[cfg(feature = "dns-over-quic")] async fn quic(opts: Opts) -> Result<(), Box> { - use trust_dns_proto::quic::{self, QuicClientStream}; + use hickory_proto::quic::{self, QuicClientStream}; let nameserver = opts.nameserver; let alpn = opts @@ -389,7 +389,7 @@ async fn h3(_opts: Opts) -> Result<(), Box> { #[cfg(feature = "dns-over-h3")] async fn h3(opts: Opts) -> Result<(), Box> { - use trust_dns_proto::h3::{self, H3ClientStream}; + use hickory_proto::h3::{self, H3ClientStream}; let nameserver = opts.nameserver; let alpn = opts @@ -523,7 +523,7 @@ fn tls_config() -> Result> { let mut root_store = RootCertStore::empty(); #[cfg(all(feature = "native-certs", not(feature = "webpki-roots")))] { - use trust_dns_proto::error::ProtoErrorKind; + use hickory_proto::error::ProtoErrorKind; let (added, ignored) = root_store.add_parsable_certificates(&rustls_native_certs::load_native_certs()?); diff --git a/util/src/bin/dnskey-to-pem.rs b/util/src/bin/dnskey-to-pem.rs index 26c0eb52b3..bb68c147e4 100644 --- a/util/src/bin/dnskey-to-pem.rs +++ b/util/src/bin/dnskey-to-pem.rs @@ -2,8 +2,8 @@ // Copyright 2017 Google LLC. // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The bind_dnskey_to_pem program @@ -32,12 +32,12 @@ use openssl::bn::BigNum; use openssl::rsa::Rsa; use tracing::{info, warn, Level}; -use trust_dns_proto::rr::dnssec::Algorithm; +use hickory_proto::rr::dnssec::Algorithm; /// Cli struct for all options managed with clap derive api. #[derive(Debug, Parser)] #[clap( - name = "Trust-DNS dnskey-to-pem", + name = "Hickory DNS dnskey-to-pem", version, about = "Converts a dnskey, as generated from BIND's dnssec-keygen, into pem format", author = "Benjamin Fry " @@ -64,7 +64,7 @@ struct Cli { /// Run the bind_dnskey_to_pem program pub fn main() { - trust_dns_util::logger(env!("CARGO_BIN_NAME"), Some(Level::INFO)); + hickory_util::logger(env!("CARGO_BIN_NAME"), Some(Level::INFO)); let args = Cli::parse(); let key_path = args.key; diff --git a/util/src/bin/get-root-ksks.rs b/util/src/bin/get-root-ksks.rs index 33b3a31778..8612ca9105 100644 --- a/util/src/bin/get-root-ksks.rs +++ b/util/src/bin/get-root-ksks.rs @@ -2,8 +2,8 @@ // Copyright 2017 Google LLC. // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The get_root_ksks program @@ -27,11 +27,11 @@ use std::path::PathBuf; use clap::{command, ArgMatches}; -use trust_dns_proto::rr::dnssec::rdata::DNSSECRData; -use trust_dns_proto::rr::dnssec::Algorithm; -use trust_dns_proto::rr::record_data::RData; -use trust_dns_proto::rr::record_type::RecordType; -use trust_dns_resolver::Resolver; +use hickory_proto::rr::dnssec::rdata::DNSSECRData; +use hickory_proto::rr::dnssec::Algorithm; +use hickory_proto::rr::record_data::RData; +use hickory_proto::rr::record_type::RecordType; +use hickory_resolver::Resolver; fn args() -> ArgMatches { command!().bin_name("get-root-ksks").get_matches() @@ -39,7 +39,7 @@ fn args() -> ArgMatches { /// Run the get_root_ksks program pub fn main() { - trust_dns_util::logger(env!("CARGO_BIN_NAME"), Some(tracing::Level::INFO)); + hickory_util::logger(env!("CARGO_BIN_NAME"), Some(tracing::Level::INFO)); let _matches = args(); diff --git a/util/src/bin/pem-to-public-dnskey.rs b/util/src/bin/pem-to-public-dnskey.rs index 198d1c7efa..a294124b32 100644 --- a/util/src/bin/pem-to-public-dnskey.rs +++ b/util/src/bin/pem-to-public-dnskey.rs @@ -1,8 +1,8 @@ // Copyright 2015-2017 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The pem_to_public_dnskey program @@ -28,14 +28,14 @@ use clap::Parser; use openssl::pkey::PKey; use tracing::info; -use trust_dns_proto::rr::dnssec::{KeyPair, Public}; +use hickory_proto::rr::dnssec::{KeyPair, Public}; /// Cli struct for all options managed with clap derive api. #[derive(Debug, Parser)] #[clap( - name = "Trust-DNS pem-to-public-dnskey", + name = "Hickory DNS pem-to-public-dnskey", version, - about = "Converts a PEM formatted public key into a raw public dnskey (not the inverse of dnskey-to-pem). This can be used to create a dnskey in the TrustAnchor internal format in Trust-DNS.", + about = "Converts a PEM formatted public key into a raw public dnskey (not the inverse of dnskey-to-pem). This can be used to create a dnskey in the TrustAnchor internal format in Hickory DNS.", author = "Benjamin Fry " )] struct Cli { @@ -60,7 +60,7 @@ struct Cli { /// Run the pem_to_public_dnskey program pub fn main() { - trust_dns_util::logger(env!("CARGO_BIN_NAME"), Some(tracing::Level::INFO)); + hickory_util::logger(env!("CARGO_BIN_NAME"), Some(tracing::Level::INFO)); let args = Cli::parse(); let key_path = args.key; diff --git a/util/src/bin/recurse.rs b/util/src/bin/recurse.rs index 916e3ee709..3e42d99a22 100644 --- a/util/src/bin/recurse.rs +++ b/util/src/bin/recurse.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The resolve program @@ -29,17 +29,17 @@ use std::{ use clap::Parser; use console::style; -use trust_dns_client::op::Query; -use trust_dns_recursor::Recursor; -use trust_dns_resolver::{ +use hickory_client::op::Query; +use hickory_recursor::Recursor; +use hickory_resolver::{ config::{NameServerConfig, NameServerConfigGroup, Protocol}, proto::rr::RecordType, Name, }; -/// A CLI interface for the trust-dns-recursor. +/// A CLI interface for the hickory-dns-recursor. /// -/// This utility directly uses the trust-dns-recursor to perform a recursive lookup +/// This utility directly uses the hickory-dns-recursor to perform a recursive lookup /// starting with a set of root dns servers, aka hints. #[derive(Debug, Parser)] #[clap(name = "recurse")] @@ -115,7 +115,7 @@ pub async fn main() -> Result<(), Box> { None }; - trust_dns_util::logger(env!("CARGO_BIN_NAME"), log_level); + hickory_util::logger(env!("CARGO_BIN_NAME"), log_level); // Configure all the name servers let mut roots = NameServerConfigGroup::new(); diff --git a/util/src/bin/resolve.rs b/util/src/bin/resolve.rs index 4634383f77..1c108375d2 100644 --- a/util/src/bin/resolve.rs +++ b/util/src/bin/resolve.rs @@ -1,8 +1,8 @@ // Copyright 2015-2023 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. //! The resolve program @@ -34,21 +34,21 @@ use clap::{ArgGroup, Parser}; use console::style; use tokio::task::JoinSet; -use tokio::time::MissedTickBehavior; -use trust_dns_client::rr::{Record, RecordData}; -use trust_dns_resolver::{ +use hickory_client::rr::{Record, RecordData}; +use hickory_resolver::{ config::{NameServerConfig, NameServerConfigGroup, Protocol, ResolverConfig, ResolverOpts}, error::{ResolveError, ResolveErrorKind}, lookup::Lookup, proto::rr::RecordType, TokioAsyncResolver, }; +use tokio::time::MissedTickBehavior; -/// A CLI interface for the trust-dns-resolver. +/// A CLI interface for the hickory-resolver. /// -/// This utility directly uses the trust-dns-resolver to perform a lookup to a +/// This utility directly uses the hickory-resolver to perform a lookup to a /// set of nameservers. Many of the features can be directly tested via the -/// FLAGS and OPTIONS. By default (like trust-dns-resolver) the configured +/// FLAGS and OPTIONS. By default (like hickory-resolver) the configured /// nameservers are the Google provided ones. The system configured ones can be /// used with the `--system` FLAG. Other nameservers, as many as desired, can /// be configured directly with the `--nameserver` OPTION. @@ -259,11 +259,11 @@ pub async fn main() -> Result<(), Box> { None }; - trust_dns_util::logger(env!("CARGO_BIN_NAME"), log_level); + hickory_util::logger(env!("CARGO_BIN_NAME"), log_level); // read system configuration let (sys_config, sys_options): (Option, Option) = if opts.system { - let (config, options) = trust_dns_resolver::system_conf::read_system_conf()?; + let (config, options) = hickory_resolver::system_conf::read_system_conf()?; (Some(config), Some(options)) } else { @@ -336,7 +336,7 @@ pub async fn main() -> Result<(), Box> { // configure the resolver options let mut options = sys_options.unwrap_or_default(); if opts.happy { - options.ip_strategy = trust_dns_resolver::config::LookupIpStrategy::Ipv4AndIpv6; + options.ip_strategy = hickory_resolver::config::LookupIpStrategy::Ipv4AndIpv6; } let resolver_arc = Arc::new(TokioAsyncResolver::tokio(config, options)); diff --git a/util/src/lib.rs b/util/src/lib.rs index 8a73852241..20e66d4c72 100644 --- a/util/src/lib.rs +++ b/util/src/lib.rs @@ -1,8 +1,8 @@ // Copyright 2015-2022 Benjamin Fry // // Licensed under the Apache License, Version 2.0, or the MIT license , at your option. This file may not be +// https://apache.org/licenses/LICENSE-2.0> or the MIT license , at your option. This file may not be // copied, modified, or distributed except according to those terms. use std::env; @@ -15,18 +15,18 @@ fn get_env() -> String { } fn get_levels(bin: &str, level: Option) -> String { - let trust_dns_crates = level.map(|level| { + let hickory_crates = level.map(|level| { format!( - "{bin}={level},trust_dns={level}", + "{bin}={level},hickory_dns={level}", bin = bin, level = level.to_string().to_lowercase(), ) }); - if let Some(trust_dns_crates) = trust_dns_crates { + if let Some(hickory_crates) = hickory_crates { format!( - "{trust_dns_crates},{env}", - trust_dns_crates = trust_dns_crates, + "{hickory_crates},{env}", + hickory_crates = hickory_crates, env = get_env() ) } else { @@ -34,7 +34,7 @@ fn get_levels(bin: &str, level: Option) -> String { } } -/// Setup the logging for the given Level of output and all trust-dns crates +/// Setup the logging for the given Level of output and all hickory-dns crates /// /// # Panic ///