Breaking changes
- Add new
LimitExceededvariant toMessageBuilder'sPushError. (#349) StubResolvernow keeps its state in anArcand can be cloned cheaply. (#393)
New
- Add
rdata::dnssec::Timestamp::to_system_timeto help sorting timestamps. (#548) - Added support for the
TLSA,OPENPGPKEY,SSHFP, andIPSECKEYrecord types and added presentation format support for theSVCB/HTTPSrecord types. (#569) - Add support for the
CAArecord type. (#434 by @weilence) - Added
FreezeBuilderto the message compressors. (#601 by @rossmacarthur)
Improvements
- Exclude
mokadependency from theresolvfeature, reducing the number of dependencies and compile time significantly. ([#575] 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)
- Fix generating an ED448 keypair (#608)
Unstable features
unstable-crypto-sign- Add support for RSA/SHA-512 to openssl signer. (#550)
unstable-server-transport- Return an error response when a
Servicereturns aServiceError. (#390) - Implement
std::error::ErrorforServiceError. (#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
Servicetrait rather than leaving them to the impl. (#484) - Removed unnecessary
?Sizedbound onimpl Service for U where U: Deref. (#484)
- Return an error response when a
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.
- Add two alternative key rolls for KSK and ZSK key rolls.
- Add an algorithm roll.
- Add more operations on UnixTime.
- Add more actions
- Allow loading public keys only. (#594)
- Add support for decoupled keys. (#594)
- keyset improvements (#551)
unstable-xfr- Various fixes and improvements. (#507)
Other changes
Released 2025-10-22.
Bug fixes
- Fix handling of tabs when formatting RDATA using
DisplayKind::Tabbed. (#516) - Fix for in-place zone parser yielding incorrect TTLs. (#538)
- Generalize
ZoneUpdaterto support anyRecordtype, not justParsedRecord. (#535) - Trim leading modulus and public exponent zeroes per RFC 3110 section 2. (#541)
- Fix panic in zonetree from in-place zonefile after encountering a malformed record. (#573)
Unstable features
unstable-server-transport:- Don't discard the NOTIFY SOA serial, if one is received. Existing users
of the
Notifiabletrait will need to update their code as this change adds an argument toNotifiable::notify_zone_changed(). #562)
- Don't discard the NOTIFY SOA serial, if one is received. Existing users
of the
unstable-client-transport:
Other changes
- Fix docs on
XfrResponseInterpreter. (#510)
Released 2025-05-21.
Breaking changes
- FIX: Use base 16 per RFC 4034 for the DS digest, not base 64. (#423)
- FIX: NSEC3 salt strings should only be accepted if within the salt size limit. (#431)
- Stricter RFC 1035 compliance by default in the
Zonefileparser. (#477) - Rename {DigestAlg, Nsec3HashAlg, SecAlg, ZonemdAlg} to {DigestAlgorithm, Nsec3HashAlgorithm, SecurityAlgorithm, ZonemdAlgorithm}
New
- Added
HashCompressor, an unlimited name compressor that uses a hash map rather than a tree. (#396) - Changed
fmt::DisplayforHINFOrecords to a show a quoted string. (#421) - Added support for
NAPTRrecord type. (#427 by @weilence) - Added initial fuzz testing support for some types via a new
arbitraryfeature (not enabled by default). (#441) - Added
StubResolver::add_connection()to allow adding a connection to the running resolver. In combination withResolvConf::new()this can also be used to control the connections made when testing code that uses the stub resolver. (#440) - Added
ZonefileFmttrait for printing records as zonefiles. (#379, #446, #463)
Bug fixes
- NSEC records should include themselves in the generated bitmap. (#417)
- Trailing double quote wrongly preserved when parsing record data. (#470, #472)
- Don't error with unexpected end of entry for RFC 3597 RDATA of length zero. ([475])
Unstable features
-
New unstable feature
unstable-cryptothat enable cryptography support for features that do not rely on secret keys. This feature needs either or both of the featuresringandopenssl(#416) -
New unstable feature
unstable-crypto-signthat enable cryptography support including features that rely on secret keys. This feature needs either or both of the featuresringandopenssl(#416) -
New unstable feature
unstable-client-cachethat enable the client transport cache. The reason is that the client cache uses themokacrate. -
New unstable feature
unstable-newthat introduces a new API for all of domain (currently only withbase,rdata, andednsmodules). Also see the associated blog post. -
unstable-server-transport- The trait
SingleServicewhich is a simplified service trait for requests that should generate a single response (#353). - The trait
ComposeReplyand an implementation of the trait (ReplyMessage) to assist in capturing EDNS(0) options that should be included in a response message (#353). - Adapters to implement
ServiceforSingleServiceand to implementSingleServiceforSendRequest(#353). - Conversion of a
Requestto aRequestMessage(#353). - A sample query router, called
QnameRouter, that routes requests based on the QNAME field in the request (#353).
- The trait
-
unstable-client-transport- introduce timeout option in multi_stream (#424).
- improve probing in redundant (#424).
- restructure configuration for multi_stream and redundant (#424).
- introduce a load balancer client transport. This transport tries to distribute requests equally over upstream transports (#425).
- the client cache now has it's own feature
unstable-client-cache.
-
unstable-sign- add key lifecycle management (#459).
- add support for adding NSEC3 records when signing.
- add support for ZONEMD.
-
unstable-validator- The
validatecrate is moved todnssec::validator::base. - The
validatorcrate is moved todnssec::validator.
- The
Other changes
Released 2025-03-31.
Other changes
Released 2024-10-14.
New
- Added
Deserializeimpl for thebase::net::nostd::Ipv6Addrand fixed the impl forIpv4Addr. (#413)
Bug fixes
- Fixed an incorrect feature gate that blocks compilation if only
"net"is enabled. (#412) - Added (all? most?) missing feature dependencies for all features.
- Fixed
Deserializeimpls forParsedNameandExtendedErrorto compile and work withoutstd. (#413)
Released 2024-10-10.
New
- Added an optional push size limit to
MessageBuilder. (#348) - Added
FromStrimpls forRcodeandOptRcode. (#357) - Added
OptRcode::is_extto check if the code is an extended code. (#358) - Added
Rtype::is_glueto check if the Rtype may be used as glue. (#363) - Added
MessageBuilder::start_error, likestart_answerbut infallible. (#369) - Added
AnswerBuilder::push_ref, likepushbut takes the record by reference. (#383) - Added
Rtype::NXNAMEandExtendedErrorCode::INVALID_QUERY_TYPE. (#392) - Added a
Serializeimpl toAllRecordDataand as a consequence to the OPT record and all OPT options, as well asParsedName. (#343) - Added
Displayimpl totsig::Key. (#397)
Bug fixes
- Fixed a mistake in the tsig module while calculating the start of the TSIG record when there were other records in the additional section, causing the TSIG code to fail if OPT records were in use. (#333)
- Fixed the mnemonic for the
NOTAUTHrcode – it wasNOAUTH. (#360) - Fixed the way the
Txt<_>record data implements comparison-related traits. They now directly compare the underlying octets, i.e., the wire format bytes. (#374 by @dklbreitling) - Fixed the
tsigmodule to reject messages with multiple TSIG records. (#334) - Fixed Display rendering of empty NSEC3 salt to be '-' per RFC 5155 section 3.3. (#407)
Unstable features
- New unstable feature
unstable-validatorthat adds a DNSSEC validator. (#328) - New unstable feature
unstable-xfrthat addsXfrResponseInterpreterfor iterating over XFR responses as a sequence of high levelZoneUpdates, andXfrMiddlewareSvcandXfrDataProviderfor responding to received XFR requests. (#375, #384) unstable-client-transport:- Fixed an issue with slow responses in the
multi_streamtransport by not waiting in the first iteration if an underlying stream reports its connection being closed. (#338) - Added an option called
idle_timeoutto stream that allows a TCP or TLS connection to stay open even if no TcpKeepalive option is received from the server. (#341) - Fixed an off-by-one error in Dgram client retry count checking. (#354)
- Added support for requests that may result in multiple responses. This
adds
ComposeRequestMultiand other*Multitypes. The main change is to the stream transport, which is the only transport that implementsSendRequestMulti. (#377) - Added a TSIG request signing and response validating passthrough
transport in
net::client:tsig. (#373)
- Fixed an issue with slow responses in the
unstable-server-transport- Breaking changes to the
Serviceand middleware traits. (#369) - Added
TsigMiddlewareSvcrequest validating and response signing middleware innet::server::middleware::tsig. (#380) - Added
NotifyMiddlewareSvcinnet::server::middleware::notifyto parse and acknowledge SOA NOTIFY requests, for use by secondary nameservers to detect outdated zones compared to the primary. (#382) CookiesMiddlewareSvcnow allows requests with invalid cookies to proceed if they are authenticated or not required to authenticate. (#336)- Added an
enabledflag toCookiesMiddlewareSvc. (#369) - Added trait
ResourceRecordBatcherand implCallbackBatcherinnet::server::batcherfor pushing as many records into a response as will fit according to defined limits. (#383) - Enforce dgram max response size limit. (#398)
- Extended MandatoryMiddlewareSvc with an RFC 9619 check for opcode QUERY with QDCOUNT > 1. (#365)
- Added blanket
SendRequestandSendRequestMultiimpls for boxes. (#397) EdnsMiddlewareSvcfixes: (#355)- Reply with FORMERR if an OPT RR cannot be parsed.
- Don't reply with FORMERR if an edns-tcp-keepalive option is received via UDP, instead ignore it per RFC 7828 3.2.1.
- Only reserve space for an edns-tcp-keepalive option for TCP requests, not UDP requests.
- Always reserve space for an OPT RR in the response for any request that has an OPT RR, not just TCP requests.
- Servers now drop received DNS response messages. (#381)
- Improved handling of errors while sending TCP responses. (#309)
- Correctly reserve space for OPT in
EdnsMiddlewareSvc. (#403)
- Breaking changes to the
unstable-zonetree:- Added
ZoneUpdate. (#375) - Added
ZoneUpdater,ZoneDiff,InMemoryZoneDiffBuilder,InMemoryZoneDiffand improvedZoneUpdate. (#376, #384) - Improved zonefile parsing error messages. (#362).
TryFrom<inplace::Zonefile> for Zonefilenow returns the set of errors instead of logging and ignoring them. (#362)- Allow both glue (A/AAAA) and zone cuts at the same owner when zone parsing. (#363)
- Altered the logic in
Versioned::remove_all()(formerlyVersioned::clean()) as it made destructive changes to the zone that would have impacted readers of the current zone version while the new zone version was being created. (#376) - Removed / renamed references to
cleaninzonetree::in_memorytoremove. (#376) - Fixed zone walking to include non-leaf CNAMEs. (#352)
- Fixed zone walking to pass the correct owner name to the callback. (#384)
- Added an
as_anymethod andCloneandDebugimpls to various zonetree types. (#397) - Added
AsRef<dyn ZoneStore>toZone. (#397) - Added handling of the AA flag and additional records to answer generation. (#400)
- Zone walking now includes glue records. A new flag
at_zone_cutwas added to the callback interface. (#401)
- Added
Release 2024-06-03.
New
- Allow AllRecordData’s parsing impls to accept an unsized [u8] as the source octets. (#310 by @xofyarg)
- Made
sign::records::FamilyNamepublic. (#312 by @achow101) - Added an impl of
FromStrforQuestion. (#317)
Bug fixes
- Accept an empty record type bitmap when scanning NSEC/NSEC3 data. (#310 by @xofyarg)
- Fix serialization of ProtoRrsig to conform with RFC 4034. ([#313 by @achow101)
- Add
?Sizedbounds toMessage::is_answerandParsedRecord::to_record. (#318 by @xofyarg, #325 by @hunts) - Bring back
MessageBuilder::as_target. (#318 by @xofyarg) - Bring back
impl FreezeBuilder for StaticCompressor. (#318 by @xofyarg) sign::records::RecordsIter::skip_beforenow stops at the first name in zone even if the apex itself doesn’t appear. (#314 by @achow101)- Fix a counting error in
SliceLabelsIter::nextthat broke compression viaStaticCompressor. (#321 by @hunts)
Unstable features
- New unstable feature
unstable-stellinefor the Stelline testing framework as a “normal” module of domain. (#315) unstable-server-transport:- Redesigned the service trait and changes middleware processors as services that take an upstream service to pass requests on to. (#307)
unstable-zonetree:- Renamed the domain name types in
zonetreefromDnametoName. (#308)
- Renamed the domain name types in
Other changes
- The minimum Rust version is now 1.78. (#320)
Released 2024-04-30.
Breaking changes
- All types and functions referring to domain names have been changed from
using the term “dname” to just “name.” For instance,
Dnamehas becomeName,ToDnamehas becomeToName, andToDname::to_dnamehas becomeToName::to_name. (#290) - The
ToNameandToRelativeNametraits have been changed to have a pair of methods a latry_to_nameandto_namefor octets builders with limited and unlimited buffers, reflecting the pattern used elsewhere. (#285) - The types for IANA-registered parameters in
base::ianahave been changed from enums to a newtypes around their underlying integer type and associated constants for the registered values. (This was really always the better way to structure this.) (#276, #298) - The
Txtrecord data type now rejects empty record data as invalid. As a consequenceTxtBuilderconverts an empty builder into TXT record data consisting of one empty character string which requiresTxtBuilder::finishto be able to return an error. (#267) Txtrecord data serialization has been redesigned. It now serialized as a sequence of character strings. It also deserializes from such a sequence. If supported by the format, it alternatively deserializes from a string that is broken up into 255 octet chunks if necessary. (#268)- The text formatting for
CharStrhas been redesigned. TheDisplayimpl now uses a modified version of the representation format that doesn’t escape white space but also doesn’t enclose the string in quotes. Methods for explicitly formatting in quoted and unquoted presentation format are provided. (#270) - The
validate::RrsigExttrait now accepts anything that implsAsRef<Record<..>>to allow the use of smart pointers. (#288 by @hunts) - The stub resolver now uses the new client transports. This doesn’t change how it is used but does change how it queries the configured servers. (#215)
- The sub resolver’s server configuration
Transporttype has been changed to be eitherTransport::UdpTcpfor trying UDP and if that leads to a truncated answer try TCP andTransport::Tcpfor only trying TCP. The stub resolver uses these accordingly now (#296) - Many error types have been changed from enums to structs that hide internal error details. Enums have been kept for errors where distinguishing variants might be meaningful for dealing with the error. (#277)
- Renamed
Dnskey::is_zsktois_zone_key. (#292) - Split RRSIG timestamp handling from
Serialinto a new typerdata::dnssec::Timestamp. ([#294]) - Upgraded
octseqto 0.5. (#257) - The minimum Rust version is now 1.70. (#304)
New
- Add impls for
AsRef<RelativeDname<[u8]>>andBorrow<RelativeDname<[u8]>>toRelativeDname<_>. (#251 by @torin-carey) - Added
name::Chain::fmt_with_dotsto format an absolute chained name with a final dot. (#253) - Added a new
ParseAnyRecordDatatrait for record data types that can parse any type of record data. (#256) - Added implementations of
OctetsFromandDebugtoAllOptDataand the specific options types that didn’t have them yet. (#257) - Added missing ordering impls to
ZoneRecordData,AllRecordData,Opt, andSvcbRdata. (#293) - Added
Name::reverse_from_addrthat creates a domain name for the reverse lookup of an IP address. (#289) - Added
OptBuilder::clone_fromto replace the OPT record with the content of another OPT record. (#299) - Added
Message::for_slice_refthat returns aMessage<&[u8]>. (#300)
Bug fixes
- Fixed the display implementation of
name::Chain<_, _>. (#253) - Fixed the display implementation of
rdata::Txt<..>. It now displays each embedded character string separately in quoted form. (#259) - Fixed the extended part returned by
OptRcode::to_parts(it was shifted by 4 bits too many) and return all 12 bits for theIntvariant inOptRcode::to_int. (#258) - Fixed a bug in the
inplacezonefile parser that made it reject character string of length 255. (#284)
Unstable features
- Added the module
net::clientwith experimental support for client message transport, i.e., sending of requests and receiving responses as well as caching of responses. This is gated by theunstable-client-transportfeature. (#215,#275) - Added the module
net::serverwith experimental support for server transports, processing requests through a middleware chain and a service trait. This is gated by theunstable-server-transportfeature. (#274) - Added the module
zonetreeproviding basic traits representing a collection of zones and their data. Thezonetree::in_memorymodule provides an in-memory implementation. Thezonetree::parsedmodule provides a way to classify RRsets before inserting them into a tree. This is gated by theunstable-zonetreefeature. (#286)
Released 2023-12-29.
Bug fixes
- Fixed various issues preventing building in a no-std environment. (#247 by @dzamlo, #248 by @reitermarkus)
Other changes
- The
resolvfeature now depends onfutures_utilinstead offutures, trimming unused dependencies from the dependency tree. (#246 by @WhyNotHugo)
Released 2023-11-16.
New
- Removed the
Sizedbound for octets types used by thetsigmodule. (#241 by @torin-carey) - Added an impl for
AsRef<Message<[u8]>>for any message. (#242 by @torin-carey)
Bug fixes
- Fixed in scanning absolute domain names from a zonefile that resulted in illegal wire data being produced. (#240 by [@xofyarg)]
Released 2023-10-27.
Bug fixes
- Added missing
?Sizedbounds to the octets type for parsingZoneRecordDataandUnknownRecordData. (#237 by @hunts)
Released 2023-09-18.
Breaking changes
- Move the
flatten_intomethod for converting domain names into a straight, flat form into a newFlattenIntotrait. This trait is only implemented for types that actually are or contain domain names. (#216) - Marked various methods and functions that return values without side
effects as
#[must_use]. ([#228] by @WhyNotHugo) - Changed the signature of
FoundSrvs::mergeto use a non-mutother. (#232) - The minimum Rust version is now 1.67. (#235)
New
- Added support for the ZONEMD record type. (#229 by @xofyarg)
- Re-exported the octseq crate as
dep::octseq. (#230) - Added a blanket impl for mut refs to
Composer. (#231 by @xofyarg)
Released 2023-09-18
New
- Added a new method
FoundSrvs::into_srvsthat converts the value into an iterator over the found SRV records without resolving them further. (#174, #214 by @WhyNotHugo); this was added in 0.7.2 but missing in 0.8.0) - Added impl of
Borrow<Dname<[u8]>>andAsRef<Dname<[u8]>>forDname<_>. (#219 by [@iximeow}], #225) - Added
Dname::fmt_with_dotthat can be used when wanting to display a domain name with a dot at the end. (#210)
Bug Fixes
- Fixed trait bounds on
FoundSrvs::into_streamto make it usable again. (#174, [#214 by @WhyNotHugo]; this was fixed in 0.7.2 but missing in 0.8.0) - Fixed scanning of domain names that are just the root label. (#210)
- Fixed
util::base64::SymbolConverterto also include the final group in the output if there is padding. (#212)
Released 2023-05-12
Breaking Changes
- The minimal required Rust version is now 1.65. (#160)
- The
randomfeature has been dropped in favour of usingrand. (#204) - The generic octets foundation has been moved to a new crate octseq and completely revamped with Generic Associated Types stabilized in Rust 1.65. This required changes all over the code but, hopefully, should result in relatively few changes when using the crate. (#160)
- The range, slice, and split methods on the domain name types have changed.
They have been merge into a single method taking ranges – except for those
on
Dnamethat require type changes. The split methods now take references and don’t changeselfanymore. (#160) - The
Parse,Compose, andScantraits have been demoted to mere extension traits for foreign types (primarily the built-in integers, so that you can do things likeu16::parse). All other types now simply have methods matching the patterns. Where generics are necessary, dedicated traits have been added. E.g., there now areParseRecordDataandComposeRecordDatatraits that are implemented by all record data types. (#160) - The
DerefandDerefMutimpls have been removed for most types that had them to follow guidance that they are exclusively for use by pointer types – which none of them are.lenandis_emptymethods have been added where appropriate, additional methods may be added. (#205) - Various functions and methods of the
tsigmodule now expect the current time as an argument to allow use of the module in a no-std environment. (#152) - Parsing of representation format and zonefiles has been completely re-written. (#142, based on work in #109 by Martin Fischer)
- All types that wrap an octets sequence only now allow unsized octets
sequence types. They all have an associated function
from_sliceto create a reference to a value wrapping an (unsized) octets slice and methodfor_slicethat converts a&selfinto such a reference. Where the latter already existed but returned a value wrapping a&[u8](e.g.,Dname<_>andMessage<_>, the return type has changed accordingly. (#168) - Removed
CharStr::from_bytes. UseCharStr::from_octetsinstead. (#168) Message::from_octetsnow returns a new error typeShortMessage. (#168)- Dropped
Derefimpls forDname<_>,RelativeDname<_>. (#168) - Renamed
opt::KeyTag::newtoopt::KeyTag::from_octets. (#168) - Renamed
rdata::Txt::try_from_slicetobuild_from_slice. (#168) - The
newmethod of the following record data types now check whether the wire format representation of the record data is too long and thus returns a result:Tsig<_, _>,Dnskey<_>,Rrsig<_, _>,Ds<_>,Cdnskey<_>,Cds<_>. (#169) - The
newfunction forrdata::Null<_>has been replaced with afrom_octetsandfrom_slicepair. TheDerefimpl was removed. (#169) - The
rdata::svcbmodule has been refactored to work in the same way as other type-length-value constructs. The names of types, methods, and functions have changed both to match the usual nomenclature as well as to match the terms used in the SVCB draft. (#176) - The
base::iana::SvcbParamKeytype has been renamed toSvcParamKeyto match the terms used in the SVCB draft. (#176) - The
TcpKeepaliveoption has been changed to use anOption<u16>as its data and allow for an empty option in accordance with the RFC. (#185) - Renamed the sub-modules of
rdatathat contain record data types to use a name derived from their content rather than their RFC number – with the exception ofrdata::rfc1035. (#189) - Renamed the sub-modules of
base::optthat contain option data types to use short-hand names rather than their RFC number. (#190) - TTL values are now using a newtype
base::record::Ttlthat wraps the rawu32and improves conversions. (#202 by @CrabNejonas) - Changes all option data types to ensure their wire format is at most 65,535 octets long. This requires changing the signatures of some creator functions. Their naming scheme and signatures are also changed to follow the pattern established with record data. (#193)
- Renamed
UnknownOptData::from_octetstonewand return a result. (#193) - Completely redesigns DNS cookie options, adding support for standard server cookies introduced in RFC 9018. (#193)
- Change the type of
ExtendedError’s text toStr<Octs>and change the return type ofset_textto(). (#193) - Changed the type
TcpKeepalive’s content to a newtypeIdleTimeoutto make it easier to convert to and from durations. (#193) - Changes Padding to just contain the padding octets and drop
PaddingMode. Instead, the methods onOptBuildershould be used to add padding. (#193)
New
Displayimpls are now available for all EDNS0 options. (#157)- Adds a
FromStrimplementation and related functions toRelativeDname. (#177) - Add a
Debugimpl tobase::message::Messageso it can be unwrapped etc. (#199) - New methods
make_canonicalonDnameandRelativeDnamethat convert the name into its canonical, i.e., lowercase form. Similarly, new methodsToDname::to_canonical_dnameandToRelativeDname::to_canonical_relative_dnamethat produce new canonical names. (#200) - Added a
MAX_LENconstant to various types that wrap length-limited octets sequences. (#201 by @CrabNejonas)
Released 2023-03-02
New
- Added a new method
FoundSrvs::into_srvsthat converts the value into an iterator over the found SRV records without resolving them further. (#174)
Bug Fixes
- Fix trait bounds on
FoundSrvs::into_streamto make it usable again. (#174)
Released 2022-10-06.
New
- Added a method
flatten_intoto record data types that converts a value with a parsed (and thus possibly compressed) domain name into a one with a normal domain name. (#151 by @xofyarg)
Other Changes
Released 2022-09-15.
Breaking Changes
-
The minimum supported Rust version is now 1.56.1. (#128)
-
The
OctetsBuildertrait does not requireAsRef<[u8]>andAsMut<[u8]>any more. These have been added as explicit trait bounds where needed. In return,Cow<[u8]>can now be used as an octets builder whereAsMut<[u8]>is not needed. (#130). -
The
Displayimplementation forUncertainDnamenow ends an absolute name with a dot to match the behaviour of theFromStrimplementation. (#116) -
The salt and hash parameters of
Nsec3andNsec3Paramhave been wrapped in newtypes. (#116) -
Functions depending on the
randcrate have been moved behind a newrandomfeature asrandis not available on all systems, even with std support. The feature is, however, part of the default features.In particular, this means that
Header::set_random_id,MessageBuilder::request_axfr, andopt::rfc7830::PaddingMode::Randomare only available if the feature is enabled. (#117 by @Jezza) -
resolv::Resolver::Querynow has to beSend. This will allow the resolver to be used in async functions spawned onto a Tokio runtime.The stub resolver’s query struct is already Send, so no actual changes are necessary. However, because this changes the definition of the Resolver trait, this is a breaking change, anyway. (#125)
New
- ``base::header::Flag` for easier working for the flags of a message header. (#109 by @tomaskrizek)
base::name::OwnedLabelnow implementsCloneandCopyas well asDisplayandDebug. (#112)base::record::Record::into_owner_and_nameallows decomposing a record into its two parts that aren’tCopy. (#114)- Initial support for SVCB and HTTPS record types. (#115 by @xofyarg)
- Introduced Serde support for all relevant types. (#116)
- The
OctetsBuildertrait is now also implemented for mutable references of types that are octet builders and turn into themselves when frozen (i.e.,OctetsBuilder::Octets = Self). (#121) - Support for [
heapless::Vec<u8, N>] as an octets sequence via the newheaplessfeature. (#122 by @bugadani) - The parameter types for SVCB record data now also implement
Eq(#135)
Bug Fixes
- Correctly encode and decode the address in EDNS client subnet when the number of bits isn’t divisible by 8. (#101 and #102 by @xofyarg)
validate:- Support for no-std environments now actually works. (#117 by @Jezza)
- Canonalize IANA types when scanning so that, e.g.,
CLASS3becomesClass::Chinstead ofClass::Int(3). (#127 by @vavrusa) resolv: Fixed generation of the domain name to be used for reverse IPv6 lookups. (#131)
Other Changes
- Enable
doc_cfgfeature flag documentation for docs.rs. (#104 by Martin Fischer)
Released 2021-03-31.
This release is a maintenance release only in order to show the complete documentation on docs.rs.
Other Changes
- Enables all features when building for doc.rs. (#99)
Released 2021-03-22.
Breaking
- The crate
domain-resolvhas been merged into this crate as thedomain::resolvcrate. It requires theresolvfeature to be enabled. Thesyncfeature fromdomain-resolvhas been renamed toresolv-sync. (#74) - The trait
domain::base::octets::IntoOctetshas been merged intodomain::base::octets::OctetsBuilder. It’s methodinto_octetsis now available asfreezeonOctetsBuilder. (#75) - Upgrade to tokio 1.0, bytes 1.0, and latest of other dependencies (#84 by @koivunej)
New
- Support for extended errors defined in RFC 8914. (#79 by @xofyarg)
- New traits
domain::base::octets::OctetsFromandOctetsIntoto convert types that are generic over octets sequences between different octets sequences. (#77)
Bug Fixes
- Fix domain name compressors when giving a root label only. (#76 by @vavrusa)
- Fix OptIter not skipping over other options correctly. (#76 by @vavrusa)
- Fix canonical comparison of TXT RDATA by taking the length labels into account. (#76 by @vavrusa)
- Fix parser not rejecting malformed TXT RDATA. (#80 by @vavrusa)
- Resolver: Host lookup now considers possibly separate CNAME chains for the responses to the A and AAAA queries. (#90 by [@varusa])
Other Changes
New
Bug Fixes
- Various minor fixes for building in no-std mode. (#72)
New
Dependencies
- Upgraded ring to 0.6.14 for fixes to 1024 bit RSASHA512. (#62)
New
Bug Fixes
- Fix calculation of block lengths in
TxtBuilder. (#57, by @vavrusa) - Fix construction of options in OPT records. (#59, by @vavrusa)
This release contains a major restructuring and refactoring of the entire library. The previous set of crates has been merged into a single crate yet again with various modules being optional and available via features.
The following notes list the changes relative to the domain-core crate.
Reorganization
- The modules in
domain_core::bitshave been moved todomain::base. - The modules
domain_core::{iana, utils}have been moved todomain::base::{iana, utils}respectively. - Master file parsing and generation functionality is now only available
if the feature
"master"is enabled.
Breaking Changes
- All types that use octets sequences are now generic over the specific
type of sequence. For details of the mechanism, please have a look at
the documentation of the
base::octetsmodule. rdata::rfc4035::Nsecis now generic over the type of the next name. This is necessary because [RFC 6762] allows compression for its next name. (#20, reported by Tom Pusateri)- Removed the failure crate. All error types now impl
fmt::Displayand, if the"std"feature is enabled,std::error::Error. (#33)
New
base::message::Message::optreturns a message’s OPT record if present. (#6, thanks to Marek Vavruša!)- unsafe
base::name::Dname::from_bytes_uncheckedin order to create names from well-known sequences. (#31) compose::Compose::compose_canonicalfor composing the canonical form for DNSSEC signing. It has a default implementation just doingcomposeand has been implemented for all relevant types. [(#XX)]base::cmp::CanonicalOrdfor the ordering of record data and records for DNSSEC signing. Implemented for all relevant types. Also improved implementations ofPartialEqandPartialOrdfor types generic over domain name types to be generic over the other values domain name type.- Allow
serial::Serialto be created from datetimes, provide a constructor fornowand addsub. - Record data types for CDS and CDSKEY record types. (Provided by @vendemiat in #24).
Bug fixes
- Do not compress the target of an SRV record’s data. [(#18)]
- Fix multiple issues with
rdata::rfc4043. (#42 via #38 by @vavrusa) - Fix multiple issues with
base::opt. (#42 via #38 by @vavrusa) - Fixed infinite loops in
Message::canonical_name. (#42 via #38 by @vavrusa)
Dependencies
- The
std,bytes, andchronocrates are now optional and can be enabled via features.
- The new
signmodule provides DNSSEC signing. It is available if the"sign"feature is enabled. - The new
tsigmodule provides TSIG signing and validation. It is only available if the"tsig"feature is enabled. - The new
validatemodule provides functionality necessary for DNSSEC validation. It is only available if the"validate"feature is enabled.