dns/Changelog.md

204 lines
8.5 KiB
Markdown
Raw Normal View History

2018-10-22 07:26:32 +03:00
# 4.0.0
2018-10-11 08:32:33 +03:00
2018-10-26 10:15:24 +03:00
- Safety: Both 'decode' and 'decodeAt' must now consume exactly
the complete input buffer or a DecodeError is returned.
* The same applies to each complete message with 'decodeMany'
and 'decodeManyAt'. Any final encoded message segment at the
end of the input buffer is still returned as the second
element of the result pair.
- Bugfix: fixed incorrect decoding of TXT records, and corrected
the associated test.
- Cleanup: More precise control over decoder error messages via
'failSGet', which avoids the unhelpful Attoparsec "Failure
reading: " error prefix.
- Cleanup: Simplified loop detection in name decompression, making
use of a monotone strictly decreasing limit on valid "pointer"
targets.
- Breaking change: In the "Decode" module, expose only the
decode{,Many}{,At} functions. The rest of the "Decode" module's
functions are now internal, exposed only for testing. These
include:
* decodeDNSHeader
* decodeDNSFlags
* decodeResourceRecord
* decodeDomain
* decodeMailbox
- Cleanup: Reworked Decode module structure:
* Moved Decode.Internal to Decode.Parsers
* Created a new Decode.Internal which is now exposed, and
moved some functions there from Decode which are only
exposed for testing, since they could not reliably be used
except as part of decoding a full message.
- Feature: RRSIG support, we can now encode, decode and show RRSIG
records. This uses the new 'decodeAt' and 'decodeManyAt' API.
- New API: 'decodeAt' and 'decodeManyAt' make it possible for
the decoder to get the current time, in order to decode some
RR types (like RRSIG) whose full meaning is time-dependent.
- Re-export 'sendAll' and export 'encodeVC' for use with TCP.
- No longer using sendAll with UDP, UDP datagrams must not be sent
piece-by-piece
- Removed socket I/O work-around for no longer supported GHC versions
on Windows.
- TCP queries now also use EDNS, since the DO bit and other options
may be relevant, even when the UDP buffer size is not. Therefore,
TCP now also does a non-EDNS fallback.
- The resolvEDNS field is subsumed in resolvQueryControls and
removed. The encodeQuestion function changes to no longer take
an explicit "EDNSheader" argument, instead the EDNS record is
built based on the supplied options. Also the encodeQuestions
function has been removed, since we're deprecating it, but the
legacy interface can no longer be maintained.
2018-10-22 07:28:48 +03:00
- New API: lookupRawCtl
2018-10-22 18:59:32 +03:00
- New API: ODataOp, doFlag, ednsEnable, ednsSetVersion, ednsSetSize
and ednsSetOptions make it possible for 'QueryControls' to adjust
EDNS settings.
- New API: FlagOp, rdFlag, adFlag and cdFlag make it possible to
override the default settings of the query-related DNS header
flags.
Overhaul of EDNS support * The DNSMessage structure now has a new 'ednsHeader' field to hold the EDNS pseudo-header. It's type is 'EDNSheader', with "EDNSheader _" holding valid EDNS data, "NoEDNS" indicating no EDNS data present and "InvalidEDNS" indicating multiple or malformed additional OPT records. When a single valid OPT record is found, it is removed from the additional section, and replaced with the "EDNSheader _" form of the pseudo-header. Otherwise any invalid OPT records are left in place (to aid problem resolution). * fromEDNS and toEDNS are gone from the public API, they are now internal to the message encoder and decoder. * More reliable error handling, with the EDNS pseudo-header automatically processed when decoding. The 'rcode' in the message header now always holds the full 12-bit extended error code (or legacy error code if EDNS was not used). This avoids misinterpretation of error conditions that can happen if only the original header RCODE is used. The EDNS record no longer has an error field. But it does have a new "ednsVersion" field, set to 0 in the "defaultEDNS" record. The EDNS version is no longer ignored on input, it can be read from the decoded EDNS structure, and non-zero values can be sent in the encoded output. The remaining EDNS record fields have been renamed: udpSize -> ednsBufferSize dnssecOk -> ednsDnssecOk options -> ednsOptions The default UDP buffer size has been reduced to 1216 bytes for IPv6 safety. * Added more RCODEs * The BadOpt RCODE is renamed to BadVers to better resemble the term used in RFCs. * Decoding of the ClientSubnet option is now a total function, provided the RDATA is structurally sound. Unexpected values cause the structure to be decoded as OD_ECSgeneric which tolerates invalid combinations of fields.
2018-10-20 13:12:40 +03:00
- Breaking change: the decoded EDNS record no longer contains
an error field. Instead the header of decoded messages is
updated hold the extended error code when valid EDNS OPT records
(EDNS pseudo-headers) are found. The remaining EDNS record
fields have been renamed:
udpSize -> ednsBufferSize
dnssecOk -> ednsDnssecOk
options -> ednsOptions
The reverse process happens on output with the 12-bit header
RCODE split across the wire-form DNS header and the OPT record.
When EDNS is not enabled, and the RCODE > 15, it is mapped to
FormatErr instead.
- Breaking change: The fromRCODEforHeader and toRCODEforHeader
functions have been removed.
2018-10-22 07:35:24 +03:00
- Breaking change: DNSFormat and fromDNSFormat
have been removed.
Overhaul of EDNS support * The DNSMessage structure now has a new 'ednsHeader' field to hold the EDNS pseudo-header. It's type is 'EDNSheader', with "EDNSheader _" holding valid EDNS data, "NoEDNS" indicating no EDNS data present and "InvalidEDNS" indicating multiple or malformed additional OPT records. When a single valid OPT record is found, it is removed from the additional section, and replaced with the "EDNSheader _" form of the pseudo-header. Otherwise any invalid OPT records are left in place (to aid problem resolution). * fromEDNS and toEDNS are gone from the public API, they are now internal to the message encoder and decoder. * More reliable error handling, with the EDNS pseudo-header automatically processed when decoding. The 'rcode' in the message header now always holds the full 12-bit extended error code (or legacy error code if EDNS was not used). This avoids misinterpretation of error conditions that can happen if only the original header RCODE is used. The EDNS record no longer has an error field. But it does have a new "ednsVersion" field, set to 0 in the "defaultEDNS" record. The EDNS version is no longer ignored on input, it can be read from the decoded EDNS structure, and non-zero values can be sent in the encoded output. The remaining EDNS record fields have been renamed: udpSize -> ednsBufferSize dnssecOk -> ednsDnssecOk options -> ednsOptions The default UDP buffer size has been reduced to 1216 bytes for IPv6 safety. * Added more RCODEs * The BadOpt RCODE is renamed to BadVers to better resemble the term used in RFCs. * Decoding of the ClientSubnet option is now a total function, provided the RDATA is structurally sound. Unexpected values cause the structure to be decoded as OD_ECSgeneric which tolerates invalid combinations of fields.
2018-10-20 13:12:40 +03:00
- The fromDNSMessage function now distinguishes between FormatErr
responses without an OPT record (which signal no EDNS support),
and FormatErr with an OPT record, which signal problems
(malformed or unsupported version) with the OPT record received
in the request. For the latter the 'BadOptRecord' error is
returned.
- Added more RCODEs, including a BadRCODE that is generated
locally, rather than parsed from the message. The value
lies just above the EDNS 12-bit range, with the bottom
12-bits matching FormatErr.
- Breaking change: The DNSMessage structure now has an
"ednsHeader" field, initialized to "EDNSheader defaultEDNS"
in "defaultQuery" and to "NoEDNS" in "defaultResponse".
The former enables EDNS(0) with default options, the latter
leaves EDNS unconfigured.
- The BadOpt RCODE is renamed to BadVers to better resemble
the term used in RFCs.
- Added EDNS OPTIONS: NSID, DAU, DHU, N3U
- Decoding of the ClientSubnet option is now a total function,
provided the RDATA is structurally sound. Unexpected values
just yield OD_ECSgeneric results.
Overhaul of EDNS support * The DNSMessage structure now has a new 'ednsHeader' field to hold the EDNS pseudo-header. It's type is 'EDNSheader', with "EDNSheader _" holding valid EDNS data, "NoEDNS" indicating no EDNS data present and "InvalidEDNS" indicating multiple or malformed additional OPT records. When a single valid OPT record is found, it is removed from the additional section, and replaced with the "EDNSheader _" form of the pseudo-header. Otherwise any invalid OPT records are left in place (to aid problem resolution). * fromEDNS and toEDNS are gone from the public API, they are now internal to the message encoder and decoder. * More reliable error handling, with the EDNS pseudo-header automatically processed when decoding. The 'rcode' in the message header now always holds the full 12-bit extended error code (or legacy error code if EDNS was not used). This avoids misinterpretation of error conditions that can happen if only the original header RCODE is used. The EDNS record no longer has an error field. But it does have a new "ednsVersion" field, set to 0 in the "defaultEDNS" record. The EDNS version is no longer ignored on input, it can be read from the decoded EDNS structure, and non-zero values can be sent in the encoded output. The remaining EDNS record fields have been renamed: udpSize -> ednsBufferSize dnssecOk -> ednsDnssecOk options -> ednsOptions The default UDP buffer size has been reduced to 1216 bytes for IPv6 safety. * Added more RCODEs * The BadOpt RCODE is renamed to BadVers to better resemble the term used in RFCs. * Decoding of the ClientSubnet option is now a total function, provided the RDATA is structurally sound. Unexpected values cause the structure to be decoded as OD_ECSgeneric which tolerates invalid combinations of fields.
2018-10-20 13:12:40 +03:00
- Breaking change: New OD_ECSgeneric EDNS constructor, represents
ClientSubnet values whose address family is not IP or that violate
the specification. The "family" field distinguishes the two cases.
Overhaul of EDNS support * The DNSMessage structure now has a new 'ednsHeader' field to hold the EDNS pseudo-header. It's type is 'EDNSheader', with "EDNSheader _" holding valid EDNS data, "NoEDNS" indicating no EDNS data present and "InvalidEDNS" indicating multiple or malformed additional OPT records. When a single valid OPT record is found, it is removed from the additional section, and replaced with the "EDNSheader _" form of the pseudo-header. Otherwise any invalid OPT records are left in place (to aid problem resolution). * fromEDNS and toEDNS are gone from the public API, they are now internal to the message encoder and decoder. * More reliable error handling, with the EDNS pseudo-header automatically processed when decoding. The 'rcode' in the message header now always holds the full 12-bit extended error code (or legacy error code if EDNS was not used). This avoids misinterpretation of error conditions that can happen if only the original header RCODE is used. The EDNS record no longer has an error field. But it does have a new "ednsVersion" field, set to 0 in the "defaultEDNS" record. The EDNS version is no longer ignored on input, it can be read from the decoded EDNS structure, and non-zero values can be sent in the encoded output. The remaining EDNS record fields have been renamed: udpSize -> ednsBufferSize dnssecOk -> ednsDnssecOk options -> ednsOptions The default UDP buffer size has been reduced to 1216 bytes for IPv6 safety. * Added more RCODEs * The BadOpt RCODE is renamed to BadVers to better resemble the term used in RFCs. * Decoding of the ClientSubnet option is now a total function, provided the RDATA is structurally sound. Unexpected values cause the structure to be decoded as OD_ECSgeneric which tolerates invalid combinations of fields.
2018-10-20 13:12:40 +03:00
- The ClientSubnet EDNS option is now encoded correctly even when the
source bits match some trailing all-zero bytes.
Overhaul of EDNS support * The DNSMessage structure now has a new 'ednsHeader' field to hold the EDNS pseudo-header. It's type is 'EDNSheader', with "EDNSheader _" holding valid EDNS data, "NoEDNS" indicating no EDNS data present and "InvalidEDNS" indicating multiple or malformed additional OPT records. When a single valid OPT record is found, it is removed from the additional section, and replaced with the "EDNSheader _" form of the pseudo-header. Otherwise any invalid OPT records are left in place (to aid problem resolution). * fromEDNS and toEDNS are gone from the public API, they are now internal to the message encoder and decoder. * More reliable error handling, with the EDNS pseudo-header automatically processed when decoding. The 'rcode' in the message header now always holds the full 12-bit extended error code (or legacy error code if EDNS was not used). This avoids misinterpretation of error conditions that can happen if only the original header RCODE is used. The EDNS record no longer has an error field. But it does have a new "ednsVersion" field, set to 0 in the "defaultEDNS" record. The EDNS version is no longer ignored on input, it can be read from the decoded EDNS structure, and non-zero values can be sent in the encoded output. The remaining EDNS record fields have been renamed: udpSize -> ednsBufferSize dnssecOk -> ednsDnssecOk options -> ednsOptions The default UDP buffer size has been reduced to 1216 bytes for IPv6 safety. * Added more RCODEs * The BadOpt RCODE is renamed to BadVers to better resemble the term used in RFCs. * Decoding of the ClientSubnet option is now a total function, provided the RDATA is structurally sound. Unexpected values cause the structure to be decoded as OD_ECSgeneric which tolerates invalid combinations of fields.
2018-10-20 13:12:40 +03:00
- Breaking change: EDNS0 is renamed to EDNS.
- Breaking change: lookupRawAD, composeQuery, composeQueryAD are removed.
- New OP codes: OP_NOTIFY and OP_UPDATE.
2018-10-11 08:32:33 +03:00
[#113](https://github.com/kazu-yamamoto/dns/pull/113)
2018-05-21 08:19:57 +03:00
# 3.0.4
- Drop unexpected UDP answers [#112](https://github.com/kazu-yamamoto/dns/pull/112)
2018-05-15 04:00:57 +03:00
# 3.0.3
- Implementing NSEC3PARAM [#109](https://github.com/kazu-yamamoto/dns/pull/109)
- Fixing an example of DNS server.
- Improving DNS decoder [#111](https://github.com/kazu-yamamoto/dns/pull/111)
2018-03-07 06:13:13 +03:00
# 3.0.2
- Supporting conduit 1.3 [#105](https://github.com/kazu-yamamoto/dns/pull/105)
- Supporting GHC 8.4 with semigroup hack.
2018-01-22 04:50:56 +03:00
# 3.0.1
- Supporting GHC 7.8 again.
2017-09-29 07:04:43 +03:00
# 3.0.0
2017-11-07 09:41:15 +03:00
- The version introduces some breaking changes internally. But upper layer APIs in the `Lookup` module remain the same.
2017-09-29 07:04:43 +03:00
- Breaking change: `Network.DNS.Types` is redesigned. `ResourceRecord` is not a sum type anymore. It holds only normal RRs. For EDNS0, a new scheme is implemented. [#63](https://github.com/kazu-yamamoto/dns/issues/63)
- Breaking change: the `Encode` and `Decode` modules use strict ByteString instead of lazy one. [#59](https://github.com/kazu-yamamoto/dns/issues/59)
- Default DNS servers are detected automatically on Windows if `RCFilePath` is used. Use vanilla `defaultResolvConf` on Windows! [#83](https://github.com/kazu-yamamoto/dns/pull/83)
2017-11-07 09:41:15 +03:00
- Multiple DNS servers can be used. You can choose either sequential lookup or concurrent lookup. See `resolvConcurrent`. [#81](https://github.com/kazu-yamamoto/dns/pull/81)
- EDNS0 queries are used by default. [#95](https://github.com/kazu-yamamoto/dns/pull/95)
2017-10-23 05:54:26 +03:00
- `lookupSOA` is defined. [#93](https://github.com/kazu-yamamoto/dns/pull/93)
2017-11-15 06:28:22 +03:00
- Cache mechanism is provided. See `resolvCache`.
2017-09-29 07:04:43 +03:00
- Some constructors such as ANY are added in the `Types` module.
- Some bug fixes and code clean-up.
2017-09-05 10:41:06 +03:00
# 2.0.13
- Testing with AppVeyor.
- Detecting a default DNS server on Windows.
- Fixing sendAll on Windows [#72](https://github.com/kazu-yamamoto/dns/pull/72)
# 2.0.12
- Fixing Windows build again
# 2.0.11
- Fixing the StateBinary.get32 parser [#57](https://github.com/kazu-yamamoto/dns/pull/57)
- Removing bytestring-builder dependency [#61](https://github.com/kazu-yamamoto/dns/pull/61)
- Fixing Windows build [#62](https://github.com/kazu-yamamoto/dns/pull/62)
# 2.0.10
- Cleaning up the code. [#47](https://github.com/kazu-yamamoto/dns/pull/47)
# 2.0.9
- Implemented TCP fallback after a truncated UDP response. [#46](https://github.com/kazu-yamamoto/dns/pull/46)
# 2.0.8
- Better handling of encoding and decoding the "root" domain ".". [#45](https://github.com/kazu-yamamoto/dns/pull/45)
# 2.0.7
- Add length checks for A and AAAA records. [#43](https://github.com/kazu-yamamoto/dns/pull/43)
# 2.0.6
- Adding Ord instance. [#41](https://github.com/kazu-yamamoto/dns/pull/41)
- Adding DNSSEC-related RRTYPEs [#40](https://github.com/kazu-yamamoto/dns/pull/40)
# 2.0.5
- Supporting DNS-SEC AD (authenticated data). [#38](https://github.com/kazu-yamamoto/dns/pull/38)
- Removing the dependency to blaze-builder.
# 2.0.4
- Renaming a variable to fix preprocessor conflicts [#37](https://github.com/kazu-yamamoto/dns/pull/37)
# 2.0.3
- Handle invalid opcodes gracefully. [#36](https://github.com/kazu-yamamoto/dns/pull/36)
# 2.0.2
- Providing a new API: decodeMany.
# 2.0.1
- Updating document.
# 2.0.0
- DNSMessage is now monomorphic
- RDATA is now monomorphic
- Removed traversal instance for DNSMessage
- EDNS0 encoding/decoding is now supported
- Removed dnsMapWithType and dnsTraverseWithType functions
- responseA and responseAAAA now take lists of IP addresses as their arguments
- DNSHeader type no longer has qdCount, anCount, nsCount, and arCount fields