pharos-plugins 0.1.0

CoreDNS-compatible Plugins for the Pharos DNS server
Documentation
# Third-party notices

## CoreDNS

- Source: https://github.com/coredns/coredns
- License: Apache-2.0
- Copyright 2016-2020 The CoreDNS authors and contributors
- DNS wire fixture in `crates/pharos-proto/tests/corpus` is from CoreDNS test source; see the corpus README for the revision and original test.
- DNSSEC black-lie bitmaps and tests in `crates/pharos-dnssec` follow CoreDNS v1.15.0's `plugin/dnssec/black_lies.go`.
- The BIND key pair in `crates/pharos-dnssec/tests/fixtures` is from CoreDNS v1.15.0's `plugin/sign/testdata`.
- `crates/pharos-plugins/plugin.cfg` follows CoreDNS v1.15.0.
- The whoami Plugin and tests follow CoreDNS v1.15.0's `plugin/whoami`.
- The nsid Plugin, tests and differential scenario follow CoreDNS v1.15.0's `plugin/nsid`.
- The bufsize Plugin, tests and differential scenarios follow CoreDNS v1.15.0's `plugin/bufsize`.
- The any Plugin, tests and differential scenario follow CoreDNS v1.15.0's `plugin/any`.
- The chaos Plugin, tests and differential scenarios follow CoreDNS v1.15.0's `plugin/chaos`.
- The header Plugin, tests and differential scenarios follow CoreDNS v1.15.0's `plugin/header`.
- The minimal Plugin, tests and differential scenarios follow CoreDNS v1.15.0's `plugin/minimal`.
- The local Plugin, tests and differential scenarios follow CoreDNS v1.15.0's `plugin/local`.
- Upstream proxy exchange and tests follow CoreDNS v1.15.0's `plugin/pkg/proxy`.
- The forward Plugin and tests follow CoreDNS v1.15.0's `plugin/forward`.
- The cache Plugin and tests follow CoreDNS v1.15.0's `plugin/cache`, `plugin/pkg/cache` and `plugin/pkg/dnsutil`.
- The hosts Plugin and tests follow CoreDNS v1.15.0's `plugin/hosts` and `plugin/pkg/fall`.
- The loadbalance Plugin and tests follow CoreDNS v1.15.0's `plugin/loadbalance`.
- The loop Plugin and tests follow CoreDNS v1.15.0's `plugin/loop`.
- The Kubernetes client, controller, object conversions, metrics and tests follow CoreDNS v1.15.0's `plugin/kubernetes`.
- The Kubernetes Plugin, name parsing, record synthesis and ported handler, namespace, NS, reverse, informer, controller and metrics tests follow CoreDNS v1.15.0's `plugin/kubernetes`, `plugin/backend_lookup.go` and `plugin/pkg/dnsutil`.
- The Kubernetes differential scenarios follow CoreDNS v1.15.0's `plugin/kubernetes/README.md`.
- Multicluster object conversion, watches, query handling and tests follow CoreDNS v1.15.0's `plugin/kubernetes`.
- The bind Plugin and tests follow CoreDNS v1.15.0's `plugin/bind`.
- Multisocket setup and tests follow CoreDNS v1.15.0's `plugin/multisocket` and `core/dnsserver/register.go`.
- The log Plugin, formatter and tests follow CoreDNS v1.15.0's `plugin/log`, `plugin/pkg/replacer` and `plugin/pkg/response`.
- The metadata Plugin and tests follow CoreDNS v1.15.0's `plugin/metadata` and `plugin/kubernetes/metadata_test.go`.
- The prometheus Plugin and tests follow CoreDNS v1.15.0's `plugin/metrics`.
- The ready Plugin and tests follow CoreDNS v1.15.0's `plugin/ready`.
- The health Plugin and tests follow CoreDNS v1.15.0's `plugin/health`.
- The errors Plugin and tests follow CoreDNS v1.15.0's `plugin/errors`.
- Reload timing setup and tests follow CoreDNS v1.15.0's `plugin/reload`.
- EDNS helpers and tests in `crates/pharos-proto` follow CoreDNS v1.15.0's `plugin/pkg/edns` and `request`.
- Zone parser fixtures include CoreDNS v1.15.0's `plugin/file/example_org.go` and `plugin/file/*_test.go`.
- TSIG key-file parsing and tests follow CoreDNS v1.15.0's `plugin/tsig/setup.go`.
- TSIG unsupported-algorithm error handling and its regression test follow CoreDNS v1.15.0's `plugin/tsig/tsig.go`.
- Self Lookup Query copying follows CoreDNS v1.15.0's `request.NewWithQuestion`.
- Self Lookup routing and capture follow CoreDNS v1.15.0's `plugin/pkg/upstream` and `plugin/pkg/nonwriter`.
- Response Type and Class classification and tests follow CoreDNS v1.15.0's `plugin/pkg/response`.
- Server routing, startup formatting, and tests in `crates/pharos-server` follow CoreDNS v1.15.0's `core/dnsserver/server.go`, `server_test.go`, and `onstartup.go`.
- Metric names, help text, buckets and reporting in `crates/pharos-server` follow CoreDNS v1.15.0's `plugin/metrics` and `plugin/pkg/proxy/metrics.go`.
- The CLI layout and lifecycle in `crates/pharos` follow CoreDNS v1.15.0's `coremain/run.go` and `core/dnsserver/onstartup.go`.
- The container capability and distroless stages follow CoreDNS v1.15.0's `Dockerfile`.

## Prometheus Go client, common, and procfs

- Source: https://github.com/prometheus/client_golang, https://github.com/prometheus/common, and https://github.com/prometheus/procfs
- License: Apache-2.0
- Copyright The Prometheus Authors
- Text exposition, process metric descriptions and Linux `/proc` fields in `crates/pharos-server` follow the Go client, common, and procfs.

## webpki-root-certs

- Source: https://github.com/rustls/webpki-roots
- Mozilla root certificate data derived from CCADB data.
- License: CDLA-Permissive-2.0; https://cdla.dev/permissive-2-0/
- `cargo tree -i webpki-root-certs --target x86_64-unknown-linux-gnu` shows no dependency on this Linux target in the current workspace. The crate is selected by `rustls-platform-verifier` for wasm32.

Community Data License Agreement - Permissive - Version 2.0

This is the Community Data License Agreement - Permissive, Version
2.0 (the "agreement"). Data Provider(s) and Data Recipient(s) agree
as follows:

1. Provision of the Data

1.1. A Data Recipient may use, modify, and share the Data made
available by Data Provider(s) under this agreement if that Data
Recipient follows the terms of this agreement.

1.2. This agreement does not impose any restriction on a Data
Recipient's use, modification, or sharing of any portions of the
Data that are in the public domain or that may be used, modified,
or shared under any other legal exception or limitation.

2. Conditions for Sharing Data

2.1. A Data Recipient may share Data, with or without modifications, so
long as the Data Recipient makes available the text of this agreement
with the shared Data.

3. No Restrictions on Results

3.1. This agreement does not impose any restriction or obligations
with respect to the use, modification, or sharing of Results.

4. No Warranty; Limitation of Liability

4.1. All Data Recipients receive the Data subject to the following
terms:

THE DATA IS PROVIDED ON AN "AS IS" BASIS, WITHOUT REPRESENTATIONS,
WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED
INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

NO DATA PROVIDER SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE DATA OR RESULTS,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

5. Definitions

5.1. "Data" means the material received by a Data Recipient under
this agreement.

5.2. "Data Provider" means any person who is the source of Data
provided under this agreement and in reliance on a Data Recipient's
agreement to its terms.

5.3. "Data Recipient" means any person who receives Data directly
or indirectly from a Data Provider and agrees to the terms of this
agreement.

5.4. "Results" means any outcome obtained by computational analysis
of Data, including for example machine learning models and models'
insights.

## coredns/caddy

- Source: https://github.com/coredns/caddy
- License: Apache-2.0
- Copyright 2015 Light Code Labs, LLC
- The signal and exit-code behavior in `crates/pharos` follows coredns/caddy v1.1.4's `sigtrap.go`, `sigtrap_posix.go`, and `caddy.go`.

## miekg/dns

- Source: https://github.com/miekg/dns
- License: BSD-3-Clause
- Copyright (c) 2009, The Go Authors. Extensions copyright (c) 2011, Miek Gieben.
- DNS code presentation names in `crates/pharos-proto/src/codes.rs` follow miekg/dns v1.1.73.
- The DNSSEC interoperability verifier in `crates/pharos-dnssec/tests/interop` uses miekg/dns v1.1.73.
- Response classification's signature validity check follows miekg/dns v1.1.73's `RRSIG.ValidityPeriod`.
- DNS wire fixtures in `crates/pharos-proto/tests/corpus` are from miekg/dns tests; see the corpus README for the revision and original tests.
- Zone parsing, presentation RDATA and tests follow miekg/dns's `scan.go`, `scan_rr.go`, `generate.go`, `scan_test.go` and `parse_test.go`; the live Go oracle uses miekg/dns directly.
- TSIG error handling in `crates/pharos-proto/src/tsig.rs`, tests and generated interoperability fixtures in `tests/tsig.rs` and `tests/corpus/tsig-miekg.txt` follow miekg/dns v1.1.73's `tsig_test.go` and `tsig.go`.
- EDNS option formatting and tests in `crates/pharos-proto` follow miekg/dns v1.1.73's `edns.go` and `edns_test.go`.
- RDATA presentation in `crates/pharos-proto/src/rdata.rs` follows miekg/dns v1.1.73; fixtures in `crates/pharos-proto/tests/rdata_*.rs` adapt its `parse_test.go`, `dns_test.go`, `msg_helpers_test.go`, `svcb_test.go` and `tsig_test.go`.
- Response truncation in `crates/pharos-server` follows miekg/dns v1.1.73's `msg_truncate.go`, without recompression.
- The hosts file parser follows CoreDNS's adaptation of Go's `net/hosts.go` (Copyright 2009 The Go Authors).

BSD 3-Clause License

Copyright (c) 2009, The Go Authors. Extensions copyright (c) 2011, Miek Gieben.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

## NLnet Labs domain

- Source: https://github.com/NLnetLabs/domain
- License: BSD-3-Clause
- Copyright (c) 2018-2025, NLnet Labs. All rights reserved.
- The fixed-size name compression table follows the StaticCompressor reference design.
- EDNS differential tests in `crates/pharos-proto` use domain as a reference.

## Kubernetes and k3s

- Sources: https://github.com/kubernetes/kubernetes and https://github.com/k3s-io/k3s
- License: Apache-2.0
- Copyright The Kubernetes Authors and k3s contributors
- Default Corefile fixtures under `crates/pharos/tests/fixtures/corefiles` follow the versions identified in each file; the Helm fixture follows https://github.com/coredns/helm (Apache-2.0).
- `deploy/kubernetes/pharos.yaml` follows kubeadm's DNS manifests and embeds the kubeadm Corefile fixture.