Skip to content

Releases: NLnetLabs/domain

0.9.0

18 Oct 10:02

Choose a tag to compare

Breaking changes

  • Move the flatten_into method for converting domain names into a straight, flat form into a new FlattenInto 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-mut other. (#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)

0.8.1

18 Sep 14:14
ddcf5fe

Choose a tag to compare

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]>> and AsRef<Dname<[u8]>> for Dname<_>. (#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

12 May 13:32
3ed40a8

Choose a tag to compare

Breaking Changes

  • The minimal required Rust version is now 1.65. (#160)
  • The random feature has been dropped in favour of using rand. (#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 change self anymore. (#160)
  • The Parse, Compose, and Scan traits have been demoted to mere extension traits for foreign types (primarily the built-in integers, so that you can do things like u16::parse). All other types now simply have methods matching the patterns. Where generics are necessary, dedicated traits have been added. E.g., there now are ParseRecordData and ComposeRecordData traits that are implemented by all record data types. (#160)
  • The Deref and DerefMut 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 and is_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 method for_slice that converts a &self into such a reference. Where the latter already existed but returned a value wrapping a &[u8] (e.g., Dname<_> and Message<_>, the return type has changed accordingly. (#168)
  • Removed CharStr::from_bytes. Use CharStr::from_octets instead. (#168)
  • Message::from_octets now returns a new error type ShortMessage. (#168)
  • Dropped Deref impls for Dname<_>, RelativeDname<_>. (#168)
  • Renamed opt::KeyTag::new to opt::KeyTag::from_octets. (#168)
  • Renamed rdata::Txt::try_from_slice to build_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 for rdata::Null<_> has been replaced with a from_octets and from_slice pair. The Deref 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 to SvcParamKey to match the terms used in the SVCB draft. (#176)
  • The TcpKeepalive option has been changed to use an Option<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 of rdata::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 raw u32 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 to new 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 to Str<Octs> and change the return type of set_text to (). (#193)
  • Changed the type TcpKeepalive’s content to a newtype IdleTimeout 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 on OptBuilder 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 to RelativeDname. (#177)
  • Add a Debug impl to base::message::Message so it can be unwrapped etc. (#199)
  • New methods make_canonical on Dname and RelativeDname that convert the name into its canonical, i.e., lowercase form. Similarly, new methods ToDname::to_canonical_dname and ToRelativeDname::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)

0.7.2

02 Mar 10:43
25a7c60

Choose a tag to compare

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)

Bug Fixes

  • Fix trait bounds on FoundSrvs::into_stream to make it usable again. (#174)

0.7.1

06 Oct 19:06

Choose a tag to compare

New

  • Added a method flatten_into to 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

0.7.0

15 Sep 12:50
bccf089

Choose a tag to compare

Breaking Changes

  • The minimum supported Rust version is now 1.56.1. (#128)

  • The OctetsBuilder trait does not require AsRef<[u8]> and AsMut<[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 where AsMut<[u8]> is not needed. (#130).

  • The Display implementation for UncertainDname now ends an absolute name with a dot to match the behaviour of the FromStr implementation. (#116)

  • The salt and hash parameters of Nsec3 and Nsec3Param have been wrapped in newtypes. (#116)

  • Functions depending on the rand crate have been moved behind a new random feature as rand is 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, and opt::rfc7830::PaddingMode::Random are only available if the feature is enabled. (#117 by @Jezza)

  • resolv::Resolver::Query now has to be Send. 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::OwnedLabel now implements Clone and Copy as well as Display and Debug. (#112)
  • base::record::Record::into_owner_and_name allows decomposing a record into its two parts that aren’t Copy. (#114)
  • Initial support for SVCB and HTTPS record types. (#115 by @xofyarg)
  • Introduced Serde support for all relevant types. (#116)
  • The OctetsBuilder trait 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 new heapless feature. (#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:
    • Check for the correct public key size instead of infering if from the RRSIG length. (#110 by @vavrusa)
    • Canonalize the security algorithm before evaluation to avoid missing algorithm provided via the unknown integer variant. (#127 by @vavrusa)
  • Support for no-std environments now actually works. (#117 by @Jezza)
  • Canonalize IANA types when scanning so that, e.g., CLASS3 becomes Class::Ch instead of Class::Int(3). (#127 by @vavrusa)
  • resolv: Fixed generation of the domain name to be used for reverse IPv6 lookups. (#131)

Other Changes

0.6.1

30 Mar 15:10
0a4c008

Choose a tag to compare

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)

0.6.0

22 Mar 10:03
6d0f956

Choose a tag to compare

Breaking Changes

  • The crate domain-resolv has been merged into this crate as the domain::resolv crate. It requires the resolv feature to be enabled. The sync feature from domain-resolv has been renamed to resolv-sync. (#74)
  • The trait domain::base::octets::IntoOctets has been merged into domain::base::octets::OctetsBuilder. It’s method into_octets is now available as freeze on OctetsBuilder. (#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::OctetsFrom and OctetsInto to 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])

domain 0.5.3 & domain-resolv 0.5.1

25 Aug 12:50
ca3f788

Choose a tag to compare

domain 0.5.3

New

  • validate: enable 1024 bit RSASHA512 as supported algorithm.
    (#67, by @vavrusa)

Bug Fixes

  • Various minor fixes for building in no-std mode. (#72)

domain-resolv 0.5.1

New

  • The UDP payload size announced in a request can now be set as part of the
    server config. It defaults to 1232 octets for both IPv4 and IPv6. (#71)

Bug Fixes

  • The receive buffer size was smaller than the size advertised in a request,
    resulting to very long UDP responses being cut off. (#71)