Releases: NLnetLabs/domain
Releases · NLnetLabs/domain
0.10.3
New
- Added
Deserialize
impl for thebase::net::nostd::Ipv6Addr
and fixed the impl forIpv4Addr
. (#413)
Bug fixes
0.10.2
New
- Added an optional push size limit to
MessageBuilder
. (#348) - Added
FromStr
impls forRcode
andOptRcode
. (#357) - Added
OptRcode::is_ext
to check if the code is an extended code. (#358) - Added
Rtype::is_glue
to check if the Rtype may be used as glue. (#363) - Added
MessageBuilder::start_error
, likestart_answer
but infallible. (#369) - Added
AnswerBuilder::push_ref
, likepush
but takes the record by reference. (#383) - Added
Rtype::NXNAME
andExtendedErrorCode::INVALID_QUERY_TYPE
. (#392) - Added a
Serialize
impl toAllRecordData
and as a consequence to the OPT record and all OPT options, as well asParsedName
. (#343) - Added
Display
impl 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
NOTAUTH
rcode – 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
tsig
module 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-validator
that adds a DNSSEC validator. (#328) - New unstable feature
unstable-xfr
that addsXfrResponseInterpreter
for iterating over XFR responses as a sequence of high levelZoneUpdate
s, andXfrMiddlewareSvc
andXfrDataProvider
for responding to received XFR requests. (#375, #384) unstable-client-transport
:- Fixed an issue with slow responses in the
multi_stream
transport by not waiting in the first iteration if an underlying stream reports its connection being closed. (#338) - Added an option called
idle_timeout
to 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
ComposeRequestMulti
and other*Multi
types. 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
Service
and middleware traits. (#369) - Added
TsigMiddlewareSvc
request validating and response signing middleware innet::server::middleware::tsig
. (#380) - Added
NotifyMiddlewareSvc
innet::server::middleware::notify
to parse and acknowledge SOA NOTIFY requests, for use by secondary nameservers to detect outdated zones compared to the primary. (#382) CookiesMiddlewareSvc
now allows requests with invalid cookies to proceed if they are authenticated or not required to authenticate. (#336)- Added an
enabled
flag toCookiesMiddlewareSvc
. (#369) - Added trait
ResourceRecordBatcher
and implCallbackBatcher
innet::server::batcher
for 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
SendRequest
andSendRequestMulti
impls for boxes. (#397) EdnsMiddlewareSvc
fixes: (#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
,InMemoryZoneDiff
and improvedZoneUpdate
. (#376, #384) - Improved zonefile parsing error messages. (#362).
TryFrom<inplace::Zonefile> for Zonefile
now 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
clean
inzonetree::in_memory
toremove
. (#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_any
method andClone
andDebug
impls 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_cut
was added to the callback interface. (#401)
- Added
0.10.1
New
- Allow AllRecordData’s parsing impls to accept an unsized [u8] as the source octets. (#310 by @xofyarg)
- Made
sign::records::FamilyName
public. (#312 by @achow101) - Added an impl of
FromStr
forQuestion
. (#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
?Sized
bounds toMessage::is_answer
andParsedRecord::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_before
now stops at the first name in zone even if the apex itself doesn’t appear. (#314 by @achow101)- Fix a counting error in
SliceLabelsIter::next
that broke compression viaStaticCompressor
. (#321 by @hunts)
Unstable features
- New unstable feature
unstable-stelline
for the Stelline testing framework as a “normal” module of domain. (#315) - Renamed the domain name types in
zonetree
fromDname
toName
. (#308)
Other changes
- The minimum Rust version is now 1.78. (#320)
0.10.0
Breaking changes
- All types and functions referring to domain names have been changed from using the term “dname” to just “name.” For instance,
Dname
has becomeName
,ToDname
has becomeToName
, andToDname::to_dname
has becomeToName::to_name
. (#290) - The
ToName
andToRelativeName
traits have been changed to have a pair of methods a latry_to_name
andto_name
for octets builders with limited and unlimited buffers, reflecting the pattern used elsewhere. (#285) - The types for IANA-registered parameters in
base::iana
have 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
Txt
record data type now rejects empty record data as invalid. As a consequenceTxtBuilder
converts an empty builder into TXT record data consisting of one empty character string which requiresTxtBuilder::finish
to be able to return an error. (#267) Txt
record 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
CharStr
has been redesigned. TheDisplay
impl 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::RrsigExt
trait 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
Transport
type has been changed to be eitherTransport::UdpTcp
for trying UDP and if that leads to a truncated answer try TCP andTransport::Tcp
for 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_zsk
tois_zone_key
. (#292) - Split RRSIG timestamp handling from
Serial
into a new typerdata::dnssec::Timestamp
. ([#294]) - Upgraded
octseq
to 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_dots
to format an absolute chained name with a final dot. (#253) - Added a new
ParseAnyRecordData
trait for record data types that can parse any type of record data. (#256) - Added implementations of
OctetsFrom
andDebug
toAllOptData
and 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_addr
that creates a domain name for the reverse lookup of an IP address. (#289) - Added
OptBuilder::clone_from
to replace the OPT record with the content of another OPT record. (#299) - Added
Message::for_slice_ref
that 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 theInt
variant inOptRcode::to_int
. (#258) - Fixed a bug in the
inplace
zonefile parser that made it reject character string of length 255. (#284)
Unstable features
- Added the module
net::client
with 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-transport
feature. (#215,#275) - Added the module
net::server
with experimental support for server transports, processing requests through a middleware chain and a service trait.
This is gated by theunstable-server-transport
feature. (#274) - Added the module
zonetree
providing basic traits representing a collection of zones and their data. Thezonetree::in_memory
module provides an in-memory implementation. Thezonetree::parsed
module provides a way to classify RRsets before inserting them into a tree.
This is gated by theunstable-zonetree
feature. (#286)
0.9.3
Bug fixes
- Fixed various issues preventing building in a no-std environment. (#247 by @dzamlo, #248 by @reitermarkus)
Other changes
- The
resolv
feature now depends onfutures_util
instead offutures
, trimming unused dependencies from the dependency tree. (#246 by @WhyNotHugo)
0.9.2
New
- Removed the
Sized
bound for octets types used by thetsig
module. (#241 by @torin-carey) - Added an impl for
AsRef<Message<[u8]>>
for any message. (#242 by @torin-carey)
Bug fixes
0.9.1
0.9.0
Breaking changes
- Move the
flatten_into
method for converting domain names into a straight, flat form into a newFlattenInto
trait. 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::merge
to use a non-mutother
. (#232) - The minimum Rust version is now 1.67. (#235)
New
0.8.1
New
- Added a new method
FoundSrvs::into_srvs
that 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_dot
that 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_stream
to 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::SymbolConverter
to also include the final group in the output if there is padding. (#212)
0.8.0
Breaking Changes
- The minimal required Rust version is now 1.65. (#160)
- The
random
feature 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
Dname
that require type changes. The split methods now take references and don’t changeself
anymore. (#160) - The
Parse
,Compose
, andScan
traits 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 areParseRecordData
andComposeRecordData
traits that are implemented by all record data types. (#160) - The
Deref
andDerefMut
impls 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.len
andis_empty
methods have been added where appropriate, additional methods may be added. (#205) - Various functions and methods of the
tsig
module 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_slice
to create a reference to a value wrapping an (unsized) octets slice and methodfor_slice
that converts a&self
into 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_octets
instead. (#168) Message::from_octets
now returns a new error typeShortMessage
. (#168)- Dropped
Deref
impls forDname<_>
,RelativeDname<_>
. (#168) - Renamed
opt::KeyTag::new
toopt::KeyTag::from_octets
. (#168) - Renamed
rdata::Txt::try_from_slice
tobuild_from_slice
. (#168) - The
new
method 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
new
function forrdata::Null<_>
has been replaced with afrom_octets
andfrom_slice
pair. TheDeref
impl was removed. (#169) - The
rdata::svcb
module 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::SvcbParamKey
type has been renamed toSvcParamKey
to match the terms used in the SVCB draft. (#176) - The
TcpKeepalive
option 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
rdata
that 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::opt
that contain option data types to use short-hand names rather than their RFC number. (#190) - TTL values are now using a newtype
base::record::Ttl
that wraps the rawu32
and 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_octets
tonew
and 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_text
to()
. (#193) - Changed the type
TcpKeepalive
’s content to a newtypeIdleTimeout
to make it easier to convert to and from durations. (#193) - Changes Padding to just contain the padding octets and drop
PaddingMode
. Instead, the methods onOptBuilder
should be used to add padding. (#193)
New
Display
impls are now available for all EDNS0 options. (#157)- Adds a
FromStr
implementation and related functions toRelativeDname
. (#177) - Add a
Debug
impl tobase::message::Message
so it can be unwrapped etc. (#199) - New methods
make_canonical
onDname
andRelativeDname
that convert the name into its canonical, i.e., lowercase form. Similarly, new methodsToDname::to_canonical_dname
andToRelativeDname::to_canonical_relative_dname
that produce new
canonical names. (#200) - Added a
MAX_LEN
constant to various types that wrap length-limited octets sequences. (#201 by @CrabNejonas)