Resolved - a simple DNS server for home networks

Overview

resolved

resolved (pronounced "resolved", not "resolved") is a simple DNS server for home networks. To that end, it supports:

  • Recursive and non-recursive resolution
  • Caching
  • Hosts files
  • Zone files

It does not support querying upstream nameservers over IPv6: I don't have IPv6 at home, so this code doesn't support it yet.

Usage

The DNS Server

I use resolved for my home network with no problems, but it may not work for you. You also probably don't want to expose this to the internet!

Compile it in release mode and run it like so:

cargo build --release
sudo ./target/release/resolved -Z config/zones

Since resolved binds to port 53 (both UDP and TCP), it needs to be run as root or to have the CAP_NET_BIND_SERVICE capability.

See the --help text for options.

Signals:

  • SIGUSR1 - reload the configuration

Monitoring:

  • Prometheus metrics are exposed at http://127.0.0.1:9420/metrics
  • Log level can be controlled with the RUST_LOG environment variable:
    • RUST_LOG=trace - verbose messages useful for development, like "entered function X"
    • RUST_LOG=debug - warns about strange but recoverable situations, like "socket read error"
    • RUST_LOG=info - gives top-level information, like "new connection" or "reloading configuration"
    • RUST_LOG=warn - warns about recoverable internal errors and invalid configuration, like "could not serialise message" or "invalid record in cache"
    • RUST_LOG=error - warns about fatal errors and then terminates the process, like "could not bind socket"
  • Log format can be controlled with the RUST_LOG_FORMAT environment variable, which is a sequence of comma-separated values:
    • One of full (default), compact, pretty, or json - see the tracing_subscriber crate
    • One of ansi (default), no-ansi
    • One of time (default), no-time

Other Tools

There are also four utility programs---htoh, htoz, ztoh, and ztoz---to convert between hosts files and zone files. They accept any syntactically valid file as input, and output it in a consistent format regardless of how the input is structured. So htoh and ztoz can be used to normalise existing files.

Development

The project structure should hopefully be fairly straightforward. The modules are:

  • lib-dns-types - basic types used in other packages

    • hosts - hosts files
    • protocol - the DNS message types and serialisation / deserialisation logic
    • zones - authoritative and non-authoritative zones
  • lib-dns-resolver - the DNS resolvers

    • cache - the cache
    • forwarding - the forwarding resolver
    • metrics - resolver-specific metrics
    • nonrecursive - the non-recursive resolver
    • recursive - the recursive resolver
    • util - shared types and functions
  • bin-resolved - the DNS server

  • bin-htoh - utility to normalise hosts files

  • bin-htoz - utility to convert hosts files to zone files

  • bin-ztoh - utility to convert zone files to hosts files

  • bin-ztoz - utility to normalise zone files

Testing

Run the unit and integration tests with:

cargo test

There are also fuzz tests in the fuzz/ directory, using cargo-fuzz:

cargo install cargo-fuzz

# list targets
cargo fuzz list

# run a target until it panics or is killed with ctrl-c
cargo fuzz run 
   

   

Supported standards

Comments
  • Bump clap from 3.1.15 to 3.1.16

    Bump clap from 3.1.15 to 3.1.16

    Bumps clap from 3.1.15 to 3.1.16.

    Release notes

    Sourced from clap's releases.

    v3.1.16

    [3.1.16] - 2022-05-06

    Fixes

    • (parser) Arg::exclusive overrides Arg::required, like other conflicts
    • (error) Don't duplicate arguments in usage
    • (error) Don't show hidden arguments in conflict error usage
    • (help) New help_template variable {name} to fix problems with {bin}
    • (help) Don't wrap URLs

    gated behind unstable-v4

    • Leading dashes in Arg::long are no longer allowed
    • (help) Use Command::display_name in the help title rather than Command::bin_name
    Changelog

    Sourced from clap's changelog.

    [3.1.16] - 2022-05-06

    Fixes

    • (parser) Arg::exclusive overrides Arg::required, like other conflicts
    • (error) Don't duplicate arguments in usage
    • (error) Don't show hidden arguments in conflict error usage
    • (help) New help_template variable {name} to fix problems with {bin}
    • (help) Don't wrap URLs

    gated behind unstable-v4

    • Leading dashes in Arg::long are no longer allowed
    • (help) Use Command::display_name in the help title rather than Command::bin_name
    Commits
    • 17b930c chore: Release
    • e748649 docs: Update changelog
    • 0e1e952 Merge pull request #3696 from epage/usage
    • 05aecf8 refactor(help): Remove more redundant required checks
    • dcda237 Merge pull request #3689 from epage/usage
    • e23c786 refactor(help): Remove redundant required check
    • f7c2dea fix(help): Don't show hidden arguments for conflicts
    • 2375a8e Merge pull request #3693 from epage/template
    • e4c096e fix(help): Use display name instead of bin name (unstable-v4)
    • 16791ab test(help): Update for display name change
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 2
  • Make recursive resolver correctly handle `CNAME`d or delegated responses from the non-recursive resolver

    Make recursive resolver correctly handle `CNAME`d or delegated responses from the non-recursive resolver

    The recursive resolver starts with:

        if let resolved @ Some(_) = resolve_nonrecursive(zones, cache, question) {
            return resolved;
        }
    

    But:

    • If this is a CNAME response, then we should restart recursive resolution at that CNAME
    • If this is a delegation response, then we should call those upstream nameservers

    Fixing this may require making resolve_nonrecursive return something richer than a ResolvedRecord, unfortunately. I feel that there's an abstraction missing somewhere now that I have ResolvedRecords, ZoneResponses, and NameserverResponses.

    bug 
    opened by barrucadu 2
  • Build(deps): bump clap from 4.0.28 to 4.0.30

    Build(deps): bump clap from 4.0.28 to 4.0.30

    Bumps clap from 4.0.28 to 4.0.30.

    Release notes

    Sourced from clap's releases.

    v4.0.30

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand

    v4.0.29

    [4.0.29] - 2022-11-29

    Changelog

    Sourced from clap's changelog.

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand

    [4.0.29] - 2022-11-29

    Commits
    • d2d0222 chore: Release
    • 56a0bb6 docs: Update changelog
    • b941a3e Merge pull request #4567 from epage/error
    • 453ac0b fix(parser): Be less confusing with args/subcommand conflicts
    • 2a374db test(parser): Show bad behavior
    • f632424 test(parser): Consolidate args_conflicts_with tests
    • a72f962 docs(builder): Escape non-tags
    • ac48e2d docs: Make less brittle for rust versions
    • a3381a2 docs(readme): Fix build status badge (#4559)
    • aa54204 Merge pull request #4555 from epage/reset
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump clap from 4.0.28 to 4.0.29

    Build(deps): bump clap from 4.0.28 to 4.0.29

    Bumps clap from 4.0.28 to 4.0.29.

    Release notes

    Sourced from clap's releases.

    v4.0.29

    [4.0.29] - 2022-11-29

    Changelog

    Sourced from clap's changelog.

    [4.0.29] - 2022-11-29

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump clap from 4.0.10 to 4.0.18

    Build(deps): bump clap from 4.0.10 to 4.0.18

    Bumps clap from 4.0.10 to 4.0.18.

    Release notes

    Sourced from clap's releases.

    v4.0.18

    [4.0.18] - 2022-10-20

    Fixes

    • (derive) Allow #[command(skip)] to also work with enum variants with a value

    v4.0.17

    [4.0.17] - 2022-10-18

    Fixes

    • Allow using Arg::last(true) with Arg::value_hint(ValueHint::CommandWithArguments)

    v4.0.16

    [4.0.16] - 2022-10-18

    Fixes

    • Arg::exclusive(true) should not be exclusive with the argument's own ArgGroup

    v4.0.15

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    v4.0.14

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    v4.0.13

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    v4.0.12

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    ... (truncated)

    Changelog

    Sourced from clap's changelog.

    [4.0.18] - 2022-10-20

    Fixes

    • (derive) Allow #[command(skip)] to also work with enum variants with a value

    [4.0.17] - 2022-10-18

    Fixes

    • Allow using Arg::last(true) with Arg::value_hint(ValueHint::CommandWithArguments)

    [4.0.16] - 2022-10-18

    Fixes

    • Arg::exclusive(true) should not be exclusive with the argument's own ArgGroup

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    [4.0.11] - 2022-10-09

    Fixes

    • (help) Fix wrapping calculations with ANSI escape codes
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump prometheus from 0.13.2 to 0.13.3

    Build(deps): bump prometheus from 0.13.2 to 0.13.3

    Bumps prometheus from 0.13.2 to 0.13.3.

    Changelog

    Sourced from prometheus's changelog.

    0.13.3

    • Bug fix: Prevent ProcessCollector underflow with CPU time counter (#465)

    • Internal change: Update dependencies

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump arbitrary from 1.1.7 to 1.2.0

    Build(deps): bump arbitrary from 1.1.7 to 1.2.0

    Bumps arbitrary from 1.1.7 to 1.2.0.

    Changelog

    Sourced from arbitrary's changelog.

    1.2.0

    Released 2022-10-20.

    Added

    • Support custom arbitrary implementation for fields on derive. #129

    1.1.6

    Released 2022-09-08.

    Fixed

    • Fixed a potential panic due to an off-by-one error in the Arbitrary implementation for std::ops::Bound<T>.

    1.1.5

    Released 2022-09-20.

    Added

    • Implemented Arbitrary for std::ops::Bound<T>.

    Fixed

    • Fixed a bug where Unstructured::int_in_range could return out-of-range integers when generating arbitrary signed integers.

    1.1.4

    Released 2022-08-29.

    Added

    • Implemented Arbitrary for Rc<str> and Arc<str>

    Changed

    • Allow overriding the error type in arbitrary::Result
    • The Unstructured::arbitrary_loop method will consume fewer bytes of input now.

    ... (truncated)

    Commits
    • 48c4bfd Bump to version 1.2.0
    • 33b855f Merge pull request #129 from greyblake/customize-fields
    • 755b8e0 Replace trybuild ui tests with doc tests
    • 4fdf16f Fix compiletest, make it pass on stable (not on nightly)
    • 2701ed8 Update CHANGELOG.md
    • 479da32 Get rid of the rest of panics within determine_field_constructor()
    • 8cbad14 Return syn::Error instead of panic!()
    • fb58d7a Return syn::Error instead of panic!() in proc_macro
    • f3225dd Refactor derive functions return syn::Result<_>
    • 727ab88 Support #[arbitrary(with = ...)] with closures
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump libfuzzer-sys from 0.4.4 to 0.4.5 in /fuzz

    Build(deps): bump libfuzzer-sys from 0.4.4 to 0.4.5 in /fuzz

    Bumps libfuzzer-sys from 0.4.4 to 0.4.5.

    Changelog

    Sourced from libfuzzer-sys's changelog.

    0.4.5

    Released 2022-10-18.

    Added

    • Added the ability to tell libfuzzer whether to keep files inputs in the corpus or not. See the Corpus type and extended documentation for the fuzz_target! macro for details.

    Changed

    • Ensured that there is always at least one inline-never frame on the stack per fuzz target. This helps prevent oss-fuzz from "deduplicating" different bugs from different fuzz targets into the same bug.

    Commits
    • 396dc4c Bump to version 0.4.5
    • 393082d Merge pull request #97 from dacut/corpus
    • 1a0499e Remove trailing whitespace
    • 7ae224a Fix missing return branch.
    • 028f4e1 Add changes suggested from code review.
    • dfe756f Enable keep/reject inputs from the corpus
    • 64ad66a Merge pull request #95 from alexcrichton/add-inline-never-frame
    • 63b9226 Force at least one unique stack frame per fuzzer
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump clap from 4.0.10 to 4.0.17

    Build(deps): bump clap from 4.0.10 to 4.0.17

    Bumps clap from 4.0.10 to 4.0.17.

    Release notes

    Sourced from clap's releases.

    v4.0.17

    [4.0.17] - 2022-10-18

    Fixes

    • Allow using Arg::last(true) with Arg::value_hint(ValueHint::CommandWithArguments)

    v4.0.16

    [4.0.16] - 2022-10-18

    Fixes

    • Arg::exclusive(true) should not be exclusive with the argument's own ArgGroup

    v4.0.15

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    v4.0.14

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    v4.0.13

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    v4.0.12

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    v4.0.11

    [4.0.11] - 2022-10-09

    Fixes

    • (help) Fix wrapping calculations with ANSI escape codes
    Changelog

    Sourced from clap's changelog.

    [4.0.17] - 2022-10-18

    Fixes

    • Allow using Arg::last(true) with Arg::value_hint(ValueHint::CommandWithArguments)

    [4.0.16] - 2022-10-18

    Fixes

    • Arg::exclusive(true) should not be exclusive with the argument's own ArgGroup

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    [4.0.11] - 2022-10-09

    Fixes

    • (help) Fix wrapping calculations with ANSI escape codes
    Commits
    • b9dfbbf chore: Release
    • a6c8f6a docs: Update changelog
    • e11afa2 Merge pull request #4401 from epage/last
    • 1ead5ef fix(complete): Support last(true) with CommandWithArguments
    • e50a11a Merge pull request #4399 from j-browne/link-fix
    • a1d4476 Fix a broken link in ValueEnum docs
    • cbb05d5 chore: Release
    • b77bd0c docs: Update changelog
    • 466b6f8 Merge pull request #4397 from epage/exclusive
    • 45dcf0e fix(parser): Don't make Args exclusive with their ArgGroup
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump clap from 4.0.10 to 4.0.16

    Build(deps): bump clap from 4.0.10 to 4.0.16

    Bumps clap from 4.0.10 to 4.0.16.

    Release notes

    Sourced from clap's releases.

    v4.0.16

    [4.0.16] - 2022-10-18

    Fixes

    • Arg::exclusive(true) should not be exclusive with the argument's own ArgGroup

    v4.0.15

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    v4.0.14

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    v4.0.13

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    v4.0.12

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    v4.0.11

    [4.0.11] - 2022-10-09

    Fixes

    • (help) Fix wrapping calculations with ANSI escape codes
    Changelog

    Sourced from clap's changelog.

    [4.0.16] - 2022-10-18

    Fixes

    • Arg::exclusive(true) should not be exclusive with the argument's own ArgGroup

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    [4.0.11] - 2022-10-09

    Fixes

    • (help) Fix wrapping calculations with ANSI escape codes
    Commits
    • cbb05d5 chore: Release
    • b77bd0c docs: Update changelog
    • 466b6f8 Merge pull request #4397 from epage/exclusive
    • 45dcf0e fix(parser): Don't make Args exclusive with their ArgGroup
    • a40c7b4 Merge pull request #4390 from sergejp/master
    • 3250bce docs: Provide a better example for positional arg append under derive
    • e6436a0 docs: Provide a better example for positional arg append
    • bd5a6ea chore: Release
    • 7eaeed3 docs: Update changelog
    • 0f6ef30 Merge pull request #4384 from epage/consistent
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump clap from 4.0.10 to 4.0.15

    Build(deps): bump clap from 4.0.10 to 4.0.15

    Bumps clap from 4.0.10 to 4.0.15.

    Release notes

    Sourced from clap's releases.

    v4.0.15

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    v4.0.14

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    v4.0.13

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    v4.0.12

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    v4.0.11

    [4.0.11] - 2022-10-09

    Fixes

    • (help) Fix wrapping calculations with ANSI escape codes
    Changelog

    Sourced from clap's changelog.

    [4.0.15] - 2022-10-13

    Fixes

    • (error) Don't suggest -- when it doesn't help
    • (error) Be more consistent in quoting, punctuation, and indentation in errors

    [4.0.14] - 2022-10-12

    Fixes

    • Only put ArgGroup in ArgMatches when explicitly specified, fixing derives handling of option-flattened fields (#4375)

    [4.0.13] - 2022-10-11

    Features

    • (derive) Allow () for fields to mean "don't read" (#4371)

    [4.0.12] - 2022-10-10

    Features

    • Added TypedValueParser::try_map for when adapting an existing TypedValueParser can fail
    • (error) Create errors like clap with Error::new, Error::with_cmd, and Error::insert

    [4.0.11] - 2022-10-09

    Fixes

    • (help) Fix wrapping calculations with ANSI escape codes
    Commits
    • bd5a6ea chore: Release
    • 7eaeed3 docs: Update changelog
    • 0f6ef30 Merge pull request #4384 from epage/consistent
    • 0f3c98a fix(error): Be consistent in puncutation
    • 6422046 Merge pull request #4383 from epage/error
    • b9d2980 refactor(error): Move subcommand suggestion to general suggestions
    • 63eec40 refactor(error): Clarify distinct suggestion cases
    • 5275660 refactor(error): Move escape suggestion to general suggestion
    • 813060e refactor(error): Move bad-escape suggestion to general suggestion
    • 7417c75 refactor(error): Move escaped-subcmd suggestion to general suggestions
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 1
  • Build(deps): bump arbitrary from 1.2.0 to 1.2.2

    Build(deps): bump arbitrary from 1.2.0 to 1.2.2

    Bumps arbitrary from 1.2.0 to 1.2.2.

    Changelog

    Sourced from arbitrary's changelog.

    1.2.2

    Released 2023-01-03.

    Fixed

    • Ensured that arbitrary and derive_arbitrary versions are synced up so that they don't, e.g., emit generated code that depends on newer versions of arbitrary than the one currently in use. #134

    1.2.1

    Fixed

    • Fixed an issue where std::thread_local! macro invocations in derive code were not fully prefixed, causing confusing build errors in certain situations.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
  • Build(deps): bump clap from 4.0.28 to 4.0.32

    Build(deps): bump clap from 4.0.28 to 4.0.32

    Bumps clap from 4.0.28 to 4.0.32.

    Release notes

    Sourced from clap's releases.

    v4.0.32

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    v4.0.31

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    v4.0.30

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand

    v4.0.29

    [4.0.29] - 2022-11-29

    Changelog

    Sourced from clap's changelog.

    [4.0.32] - 2022-12-22

    Fixes

    • (parser) When overriding required(true), consider args that conflict with its group

    [4.0.31] - 2022-12-22

    Performance

    • Speed up parsing when a lot of different flags are present (100 unique flags)

    [4.0.30] - 2022-12-21

    Fixes

    • (error) Improve error for args_conflicts_with_subcommand

    [4.0.29] - 2022-11-29

    Commits
    • ec4ccf0 chore: Release
    • 13fdb83 docs: Update changelog
    • b877345 Merge pull request #4573 from epage/conflict
    • 85ecb3e fix(parser): Override required when parent group has conflict
    • d145b8b test(parser): Demonstrate required-overload bug
    • 0eccd55 chore: Release
    • 1e37c25 docs: Update changelog
    • dcd5fec Merge pull request #4572 from epage/group
    • dde22e7 style: Update for latest clippy
    • dd8435d perf(parser): Reduce duplicate lookups
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
  • Build(deps): bump tokio from 1.22.0 to 1.23.0

    Build(deps): bump tokio from 1.22.0 to 1.23.0

    Bumps tokio from 1.22.0 to 1.23.0.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.23.0

    Fixed

    • net: fix Windows named pipe connect (#5208)
    • io: support vectored writes for ChildStdin (#5216)
    • io: fix async fn ready() false positive for OS-specific events (#5231)

    Changed

    • runtime: yield_now defers task until after driver poll (#5223)
    • runtime: reduce amount of codegen needed per spawned task (#5213)
    • windows: replace winapi dependency with windows-sys (#5204)

    #5208: tokio-rs/tokio#5208 #5216: tokio-rs/tokio#5216 #5213: tokio-rs/tokio#5213 #5204: tokio-rs/tokio#5204 #5223: tokio-rs/tokio#5223 #5231: tokio-rs/tokio#5231

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 0
  • Integration tests

    Integration tests

    Right now I have no confidence that a change to the binary is good without manually starting and poking it, which makes (eg) dependabot changes to clap a bit risky.

    I could add a basic integration test which starts the server in a known configuration and makes a query.

    enhancement 
    opened by barrucadu 0
  • Purify the recursive resolver

    Purify the recursive resolver

    The recursive resolver is awkward to test because it mixes network calls with business logic. So I just don't test it right now. I test the things it uses, but not it directly. This is a shame, as the recursive resolver is nontrivial.

    Purifying it somehow - either making it return some state object and handling the network calls & iteration from a very small function outside it which can easily be eyeballed, or by passing in some "network handle" which can be mocked (ew) - would let me directly test it.

    enhancement 
    opened by barrucadu 0
Owner
Michael Walker
GitHub does bios now?
Michael Walker
Obtain (wildcard) certificates from let's encrypt using dns-01 without the need for API access to your DNS provider.

Agnos Presentation Agnos is a single-binary program allowing you to easily obtain certificates (including wildcards) from Let's Encrypt using DNS-01 c

Arthur Carcano 246 Dec 20, 2022
A Rust based DNS client, server, and resolver

Trust-DNS A Rust based DNS client, server, and Resolver, built to be safe and secure from the ground up. This repo consists of multiple crates: Librar

Benjamin Fry 2.7k Dec 30, 2022
A primitive DNS server written in Rust for fun.

vòdo A primitive DNS server written in Rust for fun. @lucavallin ➜ /workspaces/vodo (main) $ ./target/debug/vodo -h A primitive DNS server written in

Luca Cavallin 3 Jul 27, 2023
SOCKS5 implement library, with some useful utilities such as dns-query, socks5-server, dns2socks, udp-client, etc.

socks5-impl Fundamental abstractions and async read / write functions for SOCKS5 protocol and Relatively low-level asynchronized SOCKS5 server impleme

null 5 Aug 3, 2023
RDE1 (Rusty Data Exfiltrator) is client and server tool allowing auditor to extract files from DNS and HTTPS protocols written in Rust. 🦀

Information: RDE1 is an old personal project (end 2022) that I didn't continue development on. It's part of a list of projects that helped me to learn

Quentin Texier (g0h4n) 32 Oct 6, 2023
Minimal DNS server built in Rust with rule system and logging.

MinDNS MinDNS is a minimal DNS server written in Rust. It is intended to be used as a firewall, black-hole or proxy DNS server. ⚡ Features Fully async

Sammwy 142 Oct 23, 2023
Convert TeleInfo frames from a Linky meter's serial port to Home Assistant-compatible MQTT messages.

teleinfo2mqtt-rs Convert TeleInfo frames from a Linky meter's serial port to Home Assistant-compatible MQTT messages. Overview sequenceDiagram par

Stanislas 4 Mar 19, 2024
Test the interception/filter of UDP 53 of your local networks or hotspots.

udp53_lookup Test the interception/filter of UDP 53 of your local networks or hotspots. Inspired by BennyThink/UDP53-Filter-Type . What's the purpose?

null 1 Dec 6, 2021
Library + CLI-Tool to measure the TTFB (time to first byte) of HTTP requests. Additionally, this crate measures the times of DNS lookup, TCP connect and TLS handshake.

TTFB: CLI + Lib to Measure the TTFB of HTTP/1.1 Requests Similar to the network tab in Google Chrome or Mozilla Firefox, this crate helps you find the

Philipp Schuster 24 Dec 1, 2022
Utility for working with reverse DNS

RDNS RDNS is a small Rust CLI utility for performing single and bulk reverse DNS (PTR) lookups. Usage RDNS 0.1.0 Joe Banks <[email protected]> Utilities for

Joe Banks 2 Sep 22, 2021
Dropping GFW DNS contaminated packets based on Rust + eBPF

Dropping GFW DNS contaminated packets based on Rust + eBPF

ihc童鞋@提不起劲 1k Jan 3, 2023
Implementation of algorithms for Domain Name System (DNS) Cookies construction

DNS Cookie RFC7873 left the construction of Server Cookies to the discretion of the DNS Server (implementer) which has resulted in a gallimaufry of di

Rushmore Mushambi 2 Feb 4, 2022
Third party Google DNS client for rust.

google-dns-rs Documentation Install Add the following line to your Cargo.toml file: google-dns-rs = "0.3.0" Usage use google_dns_rs::api::{Dns, DoH, R

Eduardo Stuart 2 Nov 13, 2021
A wrapper for the Google Cloud DNS API

cloud-dns is a crate providing a client to interact with Google Cloud DNS v1

Embark 5 May 24, 2022
Automatically updates your Cloudflare DNS records for specific zones. Especially useful if you have dynamic IP address

Cloudflare DNS updater What does it do? Cloudflare DNS updater updates specified dns records for specified zones effortlessly and automatically. It wa

Niko Huuskonen 8 Aug 30, 2022
Userspace libpcap-based tool to mirror your dns traffic

DNS traffic mirroring tool (dns-mirror) Description Userspace libpcap-based tool. dns-mirror sniffs dns packets on the given interface and proxies it

Timofey 1 Mar 15, 2022
DNS resolver for split-horizon scenarios

polyresolver is a resolver for split-horizon scenarios polyresolver is used to root domain names to different nameservers for the purposes of resolvin

Erik Hollensbe 7 Aug 23, 2022
Command-line DNS client using bitvec, nom and RFC 1035

Dingo Domain INformation Gatherer, Obviously. Installation Install cargo, see instructions on the Rust website Run ./install.sh (it just does cargo bu

Adam Chalmers 94 Oct 18, 2022
Flexible DNS hijacking and proxy tool.

kungfu Flexible DNS hijacking and proxy tool. Features Flexible rules e.g. glob pattern domain, static routes, response CIDR Host file include /etc/ho

yinheli 30 Dec 22, 2022