-
-
Notifications
You must be signed in to change notification settings - Fork 63
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a queryable zone tree #286
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Import DefMinMax from PR #275 and use it to make stream server and connection limits configurable. - Remove the timeout on the network read operation as there is nothing in the RFC 7766 about it and it's unclear how to handle it or how it helps on top of the existing DNS idle time out. - Cleanup the idle timeout code naming and behaiour and use Tokio Instants which also makes the behaviour compatible with the existing `stop_service_test()` which uses `start_paused = true`. - When compiled in test mode detect incomplete reads due to async future cancellation. - For use by the test but also generally useful, add two metrics: num_received_requests and num_sent_responses. - Change the queueing of responses for sending so that it respects the queue limit rather than accumulating and endless number of Tokio tasks. - Don't return unused JoinHandles. - Accept but then drop connections beyond the max conncurrent TCP connections configured.
…s to allow the caller to keep a reference to some middleware, and pass the messagse receipt time in the messge context. Demonstrate both of these by adding a statistics gathering middleware ot the example. Also introduce MessageDetails to avoid Clippy too many args warning, maybe we can design this better but this works around it for now.
…rom the RFC 6891 EDNS(0) OPT RR class field.
…ntirely, leaving the middleware and/or service free to decide for themselves what to do.
This is needed because feedback comes from `Service` impls which don't know which Server passed them a request and will handle their response, and so they can only request reconfiguration of properties common to all servers., Commands however are sent to servers by the owner of the server and can reconfigure any aspect of the server, not just those common to all servers. An example is DNS idle timeout reconfiguration which only applies to stream transports, not to datagram transports. Also includes the following related changes: - Fixes the wrongly swapped handling of `CloseConnection` and `Shutdown` in the stream `Connection`. - Removes an irrelevant RFC related comment.
Required some interface changes to make the permitted response size available at the point where it needs to be acted upon.
…f this PR. This may be reverted or done differently, this is just to make it compile at the moment.
…urrently offer recursion, and checking for it thus fails.
…eepalive option was receved and so the client disconnects, then do_client tries to send the next request over the same (now disconnected) client.
- Add `CookiesMiddlewareProcessor::default()` using a randomly generated secret. - Fix typo in `CookiesMiddlewareProcesor` name. - Add `MiddlewareBuilder::push_front()`. - Add `MiddlewareBuilder::modern()` using `CookiesMiddlewareProcessor::default()`. - Simplify trait bounds.
…y handled where it should be in the EDNS middleware processor.
…ed an OPT record.
… commit updates ALL occurences, not just those in the code changed in this branch.
… coding style max line length.
… no agreed use case for it at present.
…nnot be pushed. Try to adhere to RFC 6891 and push an OPT record in that case.
… more than one request.
…T being set on query responses.
…ith_or_default()`.
partim
added a commit
that referenced
this pull request
Apr 30, 2024
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 become `Name`, `ToDname` has become `ToName`, and `ToDname::to_dname` has become `ToName::to_name`. ([#290]) * The `ToName` and `ToRelativeName` traits have been changed to have a pair of methods a la `try_to_name` and `to_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 consequence `TxtBuilder` converts an empty builder into TXT record data consisting of one empty character string which requires `TxtBuilder::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. The `Display` 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 impls `AsRef<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 either `Transport::UdpTcp` for trying UDP and if that leads to a truncated answer try TCP and `Transport::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` to `is_zone_key`. ([#292]) * Split RRSIG timestamp handling from `Serial` into a new type `rdata::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]>>` and `Borrow<RelativeDname<[u8]>>` to `RelativeDname<_>`. ([#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` and `Debug` to `AllOptData` and the specific options types that didn’t have them yet. ([#257]) * Added missing ordering impls to `ZoneRecordData`, `AllRecordData`, `Opt`, and `SvcbRdata`. ([#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 a `Message<&[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 the `Int` variant in `OptRcode::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 the `unstable-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 the `unstable-server-transport` feature. ([#274]) * Added the module `zonetree` providing basic traits representing a collection of zones and their data. The `zonetree::in_memory` module provides an in-memory implementation. The `zonetree::parsed` module provides a way to classify RRsets before inserting them into a tree. This is gated by the `unstable-zonetree` feature. ([#286])
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds
zonefile/parsed.rs
,zonetree/
and relatedexamples/
, which together enable, and show a library user how, to go from a zone file in presentation format to an in-memory tree of zones which can be queried to provide an answer, or walked (iterated over).The tree also supports versioned write operations and a trait based zone implementation allowing for the in-memory tree for a zone to instead be some other (a)synchornous backing store (as demonstrated by the
mysql-zone.rs
example).It also simplifies the return type of
Service::call()
slightly by moving part of the type signature to theTransaction
type.