Files
Martin HoffmannandGitHub eb383a7f07 Release 0.12.0. (#643)
Breaking changes

* Added new `LimitExceeded` variant to `MessageBuilder`'s `PushError`.
  ([#349])
* Changed the `Resolver` and `SearchNames` traits of the stub resolver to
  use lifetimes for associated types. This makes it easier to keep the stub
  resolver behind an arc or other smart pointer. ([#596])

New

* Added `rdata::dnssec::Timestamp::to_system_time` to help sorting timestamps.
  ([#548])
* Added support for the `TLSA`, `OPENPGPKEY`, `SSHFP`, and `IPSECKEY`
  record types and added presentation format support for the `SVCB`/`HTTPS`
  record types. ([#569])
* Added support for the `CAA` record type. ([#434] by [@weilence])
* Added `FreezeBuilder` to the message compressors. ([#601] by
  [@rossmacarthur])
* Added support for the `RP` record type. ([#620])
* Added a position counter to the zonefile parser, available via
  `Zonefile::current_offset`. ([#642])

Improvements

* Excluded `moka` dependency from the `resolv` feature, reducing the number
  of dependencies and compile time significantly. ([#575] by [@WhyNotHugo])
* Made various methods in `RelativeName` into const fns. ([#576] by
  [@WhyNotHugo])

Bug fixes

* When parsing a Bind-style public key file, allow an optional TTL field.
  ([#593])
* `XfrMiddlewareService` should always support at least one concurrent XFR.
  ([#599])
* Fixed generating an ED448 keypair. ([#608])

Unstable features

* `unstable-crypto-sign`
  * Added support for RSA/SHA-512 to openssl signer. ([#550])
  * `generate` now takes `&GenerateParams`. This breaks existing uses of
    `generate` ([#608])
* `unstable-server-transport`
  * Return an error response when a `Service` returns a `ServiceError`.
    ([#390])
  * Implemented `std::error::Error` for `ServiceError`. ([#570] by
    [@rossmacarthur])
  * Be more lenient when timing out connections while they are in a
    transaction. ([#399])
  * Removed defaults for type arguments to prevent intermediate types that
    impl the trait from not allowing the defaults to be overridden.
    ([#484])
  * Added commonly required bounds to the `Service` trait rather than
    leaving them to the impl. ([#484])
  * Removed unnecessary `?Sized` bound on `impl Service for U where U: Deref`.
    ([#484])
* `unstable-sign`
   * keyset improvements ([#551])
     * Store the algorithm and key tag of a key to be able to reject duplicate
       key tags and accidental algorithm rolls.
     * Store whether a key is considered available for a key roll. Rolls with
       new keys that are not available are rejected.
     * Added two alternative key rolls for KSK and ZSK key rolls.
     * Added an algorithm roll.
     * Added more operations on UnixTime.
     * Added more actions
     * Allow loading public keys only. ([#594])
     * Added support for decoupled keys. ([#594])
   * `RecordsIter::new` has been replaced with `RecordsIter::new_from_owned`.
     There is a new `RecordsIter::new_from_refs` that takes a `&[&Record]]`.
     This breaks existing uses of `RecordsIter? and related types. ([#614])
* `unstable-xfr`
  * Various fixes and improvements. ([#507])

Other changes

* Dependency upgrades:
  * [hashbrown] to 0.17, ([#633])
  * [heapless] to 0.9, ([#634])
  * [octseq] to 0.6, ([#634])
  * [rand] to 0.10. ([#631])
2026-04-23 15:53:52 +02:00

204 lines
8.0 KiB
TOML

[workspace]
resolver = "3"
members = [".", "./macros"]
[workspace.package]
version = "0.12.0"
edition = "2021"
authors = ["NLnet Labs <dns-team@nlnetlabs.nl>"]
homepage = "https://nlnetlabs.nl/projects/domain/"
repository = "https://github.com/nlnetlabs/domain/"
keywords = ["DNS", "domain"]
license = "BSD-3-Clause"
# The MSRV is at least 4 versions behind stable (about half a year).
rust-version = "1.87.0"
[package]
name = "domain"
version.workspace = true
edition.workspace = true
authors.workspace = true
homepage.workspace = true
repository.workspace = true
rust-version.workspace = true
keywords.workspace = true
license.workspace = true
description = "A DNS library for Rust."
documentation = "https://docs.rs/domain"
readme = "README.md"
[dependencies]
domain-macros = { path = "./macros", version = "=0.12.0" }
# TODO: This _should_ be optional, but it is used by some record-type-specific
# zonefile scanning code that is not gated behind a feature flag.
jiff = { version = "0.2.1", default-features = false }
# Optional dependencies:
arbitrary = { version = "1.4.1", optional = true, features = ["derive"] }
bumpalo = { version = "3.12", optional = true }
constant_time_eq = { version = "0.4.2", optional = true }
octseq = { version = "0.6.0", default-features = false }
rand = { version = "0.10.1", optional = true }
arc-swap = { version = "1.7.0", optional = true }
bytes = { version = "1.2", optional = true, default-features = false }
chrono = { version = "0.4.35", optional = true, default-features = false } # 0.4.35 deprecates Duration::seconds()
futures-util = { version = "0.3", optional = true }
hashbrown = { version = "0.17.0", optional = true, default-features = false, features = ["allocator-api2", "inline-more"] } # 0.14.2 introduces explicit hashing
heapless = { version = "0.9.2", optional = true }
libc = { version = "0.2.153", default-features = false, optional = true } # 0.2.79 is the first version that has IP_PMTUDISC_OMIT
log = { version = "0.4.22", optional = true }
parking_lot = { version = "0.12", optional = true }
moka = { version = "0.12.3", optional = true, features = ["future"] }
openssl = { version = "0.10.72", optional = true } # 0.10.70 upgrades to 'bitflags' 2.x
proc-macro2 = { version = "1.0.69", optional = true } # Force proc-macro2 to at least 1.0.69 for minimal-version build
ring = { version = "0.17.2", optional = true }
rustversion = { version = "1", optional = true }
secrecy = { version = "0.10", optional = true }
serde = { version = "1.0.130", optional = true, features = ["derive"] }
siphasher = { version = "1", optional = true }
smallvec = { version = "1.3", optional = true }
tokio = { version = "1.33", optional = true, features = ["io-util", "macros", "net", "time", "sync", "rt-multi-thread" ] }
tokio-rustls = { version = "0.26", optional = true, default-features = false }
tokio-stream = { version = "0.1.17", optional = true }
tracing = { version = "0.1.40", optional = true, features = ["log"] }
tracing-subscriber = { version = "0.3.18", optional = true, features = ["env-filter"] }
[features]
default = ["std", "rand"]
# Support for libraries
alloc = ["jiff/alloc"]
bumpalo = ["dep:bumpalo", "std"]
bytes = ["dep:bytes", "octseq/bytes"]
chrono = ["dep:chrono"]
heapless = ["dep:heapless", "octseq/heapless"]
rand = ["dep:rand"]
serde = ["std", "dep:serde", "octseq/serde"]
smallvec = ["dep:smallvec", "octseq/smallvec"]
std = ["alloc", "dep:hashbrown", "bumpalo?/std", "bytes?/std", "octseq/std", "jiff/std"]
tracing = ["dep:log", "dep:tracing"]
# Cryptographic backends
ring = ["dep:ring", "unstable-crypto-backend"]
openssl = ["dep:openssl", "unstable-crypto-backend"]
# Crate features
net = ["bytes", "futures-util", "rand", "std", "tokio"]
resolv = ["net", "smallvec", "unstable-client-transport"]
resolv-sync = ["resolv", "tokio/rt"]
tsig = ["bytes", "constant_time_eq", "ring", "smallvec"]
zonefile = ["bytes", "serde", "std"]
# Unstable features
unstable-new = []
unstable-client-cache = ["unstable-client-transport", "moka"]
unstable-client-transport = ["net", "tracing"]
unstable-crypto = ["bytes", "std"]
unstable-crypto-sign = ["dep:secrecy", "unstable-crypto"]
# Internal; also requires 'ring' or 'openssl' to be enabled.
unstable-crypto-backend = ["unstable-crypto"]
unstable-server-transport = ["arc-swap", "libc", "net", "siphasher", "tracing"]
unstable-sign = ["dep:smallvec", "dep:serde", "tracing", "unstable-crypto-sign"]
unstable-stelline = ["tokio/test-util", "tracing", "tracing-subscriber", "tsig", "unstable-client-transport", "unstable-server-transport", "zonefile"]
# Also requires 'ring' or 'openssl' to be enabled.
unstable-validator = ["zonefile", "unstable-client-transport", "unstable-crypto", "moka"]
unstable-xfr = ["net"]
unstable-zonetree = ["futures-util", "parking_lot", "rustversion", "serde", "std", "tokio", "tracing", "unstable-xfr", "zonefile"]
# Support for testing
arbitrary = ["dep:arbitrary"]
[dev-dependencies]
itertools = "0.14.0"
lazy_static = { version = "1.4.0" }
pretty_assertions = "1.4.1"
rstest = "0.26.1"
rustls-pemfile = { version = "2.1.2" }
serde_test = "1.0.130"
serde_json = "1.0.113"
yaml_serde = "0.10.3"
socket2 = { version = "0.6.3" }
tokio = { version = "1.37", features = ["rt-multi-thread", "io-util", "net", "test-util"] }
tokio-rustls = { version = "0.26", default-features = false, features = [ "ring", "logging", "tls12" ] }
tokio-test = "0.4"
tokio-tfo = { version = "0.4.3" }
webpki-roots = { version = "1.0.7" }
# For the "mysql-zone" example
#sqlx = { version = "0.6", features = [ "runtime-tokio-native-tls", "mysql" ] }
# For testing in integration tests:
mock_instant = { version = "0.6.0" }
[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
[[example]]
name = "download-rust-lang"
required-features = ["resolv"]
[[example]]
name = "lookup"
required-features = ["resolv"]
[[example]]
name = "resolv-sync"
required-features = ["resolv-sync"]
[[example]]
name = "client"
required-features = ["std", "rand"]
[[example]]
name = "client-transports"
required-features = ["net", "tokio-rustls", "unstable-client-transport"]
[[example]]
name = "client-cache-transport"
required-features = ["net", "unstable-client-cache"]
[[example]]
name = "server-transports"
required-features = ["net", "tokio-stream", "tracing-subscriber", "unstable-client-transport", "unstable-server-transport"]
[[example]]
name = "read-zone"
required-features = ["zonefile"]
[[example]]
name = "query-zone"
required-features = ["tracing-subscriber", "unstable-zonetree", "zonefile"]
[[example]]
name = "serve-zone"
required-features = ["zonefile", "net", "tokio-stream", "tracing-subscriber", "tsig", "unstable-client-transport", "unstable-server-transport", "unstable-zonetree"]
[[example]]
name = "ixfr-client"
required-features = ["zonefile", "net", "unstable-client-transport", "unstable-zonetree"]
[[example]]
name = "query-routing"
required-features = ["net", "unstable-client-transport", "unstable-server-transport", "tracing-subscriber"]
[[example]]
name = "keyset"
# Note that we have to pick a crypto backend eventhough the example doesn't
# need one.
required-features = ["serde", "unstable-sign", "ring"]
# This example is commented out because it is difficult, if not impossible,
# when including the sqlx dependency, to make the dependency tree compatible
# with both `cargo +nightly update -Z minimal versions` and the crate minimum
# supported Rust version (1.67 at the time of writing), both of which are
# tested by our CI setup. To try this example, uncomment the lines below and
# the sqlx dependency above, then run `cargo run --example mysql-zone`.
#[[example]]
#name = "mysql-zone"
#path = "examples/other/mysql-zone.rs"
#required-features = ["zonefile", "net", "unstable-server-transport", "unstable-zonetree"]