mirror of
https://github.com/cloudflare/cloudflared.git
synced 2025-07-27 23:09:58 +00:00
TUN-9467: bump coredns to solve CVE
* TUN-9467: bump coredns to solve CVE
This commit is contained in:

committed by
João "Pisco" Fernandes

parent
f8d12c9d39
commit
a408612f26
4
vendor/github.com/coredns/caddy/README.md
generated
vendored
4
vendor/github.com/coredns/caddy/README.md
generated
vendored
@@ -1,5 +1,9 @@
|
||||
THIS IS A FORK OF CADDY v1 - EVERYTHING IS STRIPPED EXCEPT THE PIECES NEEDED IN COREDNS.
|
||||
|
||||
Issues are not enabled in this repository. Please raise any issues in coredns/coredns.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Caddy is a **production-ready** open-source web server that is fast, easy to use, and makes you more productive.
|
||||
|
||||
|
25
vendor/github.com/coredns/caddy/caddy.go
generated
vendored
25
vendor/github.com/coredns/caddy/caddy.go
generated
vendored
@@ -1,5 +1,7 @@
|
||||
// Copyright 2015 Light Code Labs, LLC
|
||||
//
|
||||
// Copyright 2024 MWS
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
@@ -218,22 +220,22 @@ func (i *Instance) Restart(newCaddyfile Input) (*Instance, error) {
|
||||
}
|
||||
|
||||
// Add file descriptors of all the sockets that are capable of it
|
||||
restartFds := make(map[string]restartTriple)
|
||||
restartFds := make(map[string][]restartTriple)
|
||||
for _, s := range i.servers {
|
||||
gs, srvOk := s.server.(GracefulServer)
|
||||
ln, lnOk := s.listener.(Listener)
|
||||
pc, pcOk := s.packet.(PacketConn)
|
||||
if srvOk {
|
||||
if lnOk && pcOk {
|
||||
restartFds[gs.Address()] = restartTriple{server: gs, listener: ln, packet: pc}
|
||||
restartFds[gs.Address()] = append(restartFds[gs.Address()], restartTriple{server: gs, listener: ln, packet: pc})
|
||||
continue
|
||||
}
|
||||
if lnOk {
|
||||
restartFds[gs.Address()] = restartTriple{server: gs, listener: ln}
|
||||
restartFds[gs.Address()] = append(restartFds[gs.Address()], restartTriple{server: gs, listener: ln})
|
||||
continue
|
||||
}
|
||||
if pcOk {
|
||||
restartFds[gs.Address()] = restartTriple{server: gs, packet: pc}
|
||||
restartFds[gs.Address()] = append(restartFds[gs.Address()], restartTriple{server: gs, packet: pc})
|
||||
continue
|
||||
}
|
||||
}
|
||||
@@ -484,7 +486,7 @@ func Start(cdyfile Input) (*Instance, error) {
|
||||
return inst, nil
|
||||
}
|
||||
|
||||
func startWithListenerFds(cdyfile Input, inst *Instance, restartFds map[string]restartTriple) error {
|
||||
func startWithListenerFds(cdyfile Input, inst *Instance, restartFds map[string][]restartTriple) error {
|
||||
// save this instance in the list now so that
|
||||
// plugins can access it if need be, for example
|
||||
// the caddytls package, so it can perform cert
|
||||
@@ -684,7 +686,7 @@ func executeDirectives(inst *Instance, filename string,
|
||||
return nil
|
||||
}
|
||||
|
||||
func startServers(serverList []Server, inst *Instance, restartFds map[string]restartTriple) error {
|
||||
func startServers(serverList []Server, inst *Instance, restartFds map[string][]restartTriple) error {
|
||||
errChan := make(chan error, len(serverList))
|
||||
|
||||
// used for signaling to error logging goroutine to terminate
|
||||
@@ -734,7 +736,16 @@ func startServers(serverList []Server, inst *Instance, restartFds map[string]res
|
||||
// reuse the listener for a graceful restart.
|
||||
if gs, ok := s.(GracefulServer); ok && restartFds != nil {
|
||||
addr := gs.Address()
|
||||
if old, ok := restartFds[addr]; ok {
|
||||
// Multiple servers may use the same addr (SO_REUSEPORT option set), so it's important to ensure
|
||||
// that we don't reuse the same listener/packetconn.
|
||||
// We'll create new listeners in case there are no more available triples for the same address.
|
||||
if triples, ok := restartFds[addr]; ok && len(triples) > 0 {
|
||||
// Take first available triple
|
||||
old := triples[0]
|
||||
// Remove reused triple from restartFds
|
||||
triples[0] = triples[len(triples)-1]
|
||||
restartFds[addr] = triples[:len(triples)-1]
|
||||
|
||||
// listener
|
||||
if old.listener != nil {
|
||||
file, err := old.listener.File()
|
||||
|
32
vendor/github.com/coredns/caddy/plugins.go
generated
vendored
32
vendor/github.com/coredns/caddy/plugins.go
generated
vendored
@@ -56,33 +56,13 @@ var (
|
||||
func DescribePlugins() string {
|
||||
pl := ListPlugins()
|
||||
|
||||
str := "Server types:\n"
|
||||
for _, name := range pl["server_types"] {
|
||||
str += " " + name + "\n"
|
||||
}
|
||||
|
||||
str += "\nCaddyfile loaders:\n"
|
||||
for _, name := range pl["caddyfile_loaders"] {
|
||||
str += " " + name + "\n"
|
||||
}
|
||||
|
||||
if len(pl["event_hooks"]) > 0 {
|
||||
str += "\nEvent hook plugins:\n"
|
||||
for _, name := range pl["event_hooks"] {
|
||||
str += " hook." + name + "\n"
|
||||
}
|
||||
}
|
||||
|
||||
if len(pl["clustering"]) > 0 {
|
||||
str += "\nClustering plugins:\n"
|
||||
for _, name := range pl["clustering"] {
|
||||
str += " " + name + "\n"
|
||||
}
|
||||
}
|
||||
|
||||
str += "\nOther plugins:\n"
|
||||
str := ""
|
||||
for _, name := range pl["others"] {
|
||||
str += " " + name + "\n"
|
||||
if len(name) > 3 {
|
||||
str += name[4:] + "\n" // drop dns. prefix caddy adds
|
||||
} else {
|
||||
str += name + "\n"
|
||||
}
|
||||
}
|
||||
|
||||
return str
|
||||
|
12
vendor/github.com/coredns/coredns/core/dnsserver/config.go
generated
vendored
12
vendor/github.com/coredns/coredns/core/dnsserver/config.go
generated
vendored
@@ -24,6 +24,10 @@ type Config struct {
|
||||
// The port to listen on.
|
||||
Port string
|
||||
|
||||
// The number of servers that will listen on one port.
|
||||
// By default, one server will be running.
|
||||
NumSockets int
|
||||
|
||||
// Root points to a base directory we find user defined "things".
|
||||
// First consumer is the file plugin to looks for zone files in this place.
|
||||
Root string
|
||||
@@ -54,6 +58,14 @@ type Config struct {
|
||||
// TLSConfig when listening for encrypted connections (gRPC, DNS-over-TLS).
|
||||
TLSConfig *tls.Config
|
||||
|
||||
// MaxQUICStreams defines the maximum number of concurrent QUIC streams for a QUIC server.
|
||||
// This is nil if not specified, allowing for a default to be used.
|
||||
MaxQUICStreams *int
|
||||
|
||||
// MaxQUICWorkerPoolSize defines the size of the worker pool for processing QUIC streams.
|
||||
// This is nil if not specified, allowing for a default to be used.
|
||||
MaxQUICWorkerPoolSize *int
|
||||
|
||||
// Timeouts for TCP, TLS and HTTPS servers.
|
||||
ReadTimeout time.Duration
|
||||
WriteTimeout time.Duration
|
||||
|
145
vendor/github.com/coredns/coredns/core/dnsserver/register.go
generated
vendored
145
vendor/github.com/coredns/coredns/core/dnsserver/register.go
generated
vendored
@@ -134,69 +134,23 @@ func (h *dnsContext) InspectServerBlocks(sourceFile string, serverBlocks []caddy
|
||||
|
||||
// MakeServers uses the newly-created siteConfigs to create and return a list of server instances.
|
||||
func (h *dnsContext) MakeServers() ([]caddy.Server, error) {
|
||||
// Copy the Plugin, ListenHosts and Debug from first config in the block
|
||||
// to all other config in the same block . Doing this results in zones
|
||||
// sharing the same plugin instances and settings as other zones in
|
||||
// the same block.
|
||||
for _, c := range h.configs {
|
||||
c.Plugin = c.firstConfigInBlock.Plugin
|
||||
c.ListenHosts = c.firstConfigInBlock.ListenHosts
|
||||
c.Debug = c.firstConfigInBlock.Debug
|
||||
c.Stacktrace = c.firstConfigInBlock.Stacktrace
|
||||
|
||||
// Fork TLSConfig for each encrypted connection
|
||||
c.TLSConfig = c.firstConfigInBlock.TLSConfig.Clone()
|
||||
c.ReadTimeout = c.firstConfigInBlock.ReadTimeout
|
||||
c.WriteTimeout = c.firstConfigInBlock.WriteTimeout
|
||||
c.IdleTimeout = c.firstConfigInBlock.IdleTimeout
|
||||
c.TsigSecret = c.firstConfigInBlock.TsigSecret
|
||||
}
|
||||
// Copy parameters from first config in the block to all other config in the same block
|
||||
propagateConfigParams(h.configs)
|
||||
|
||||
// we must map (group) each config to a bind address
|
||||
groups, err := groupConfigsByListenAddr(h.configs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// then we create a server for each group
|
||||
var servers []caddy.Server
|
||||
for addr, group := range groups {
|
||||
// switch on addr
|
||||
switch tr, _ := parse.Transport(addr); tr {
|
||||
case transport.DNS:
|
||||
s, err := NewServer(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.TLS:
|
||||
s, err := NewServerTLS(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.QUIC:
|
||||
s, err := NewServerQUIC(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.GRPC:
|
||||
s, err := NewServergRPC(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.HTTPS:
|
||||
s, err := NewServerHTTPS(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
serversForGroup, err := makeServersForGroup(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, serversForGroup...)
|
||||
}
|
||||
|
||||
// For each server config, check for View Filter plugins
|
||||
@@ -263,8 +217,11 @@ func (c *Config) Handlers() []plugin.Handler {
|
||||
return nil
|
||||
}
|
||||
hs := make([]plugin.Handler, 0, len(c.registry))
|
||||
for k := range c.registry {
|
||||
hs = append(hs, c.registry[k])
|
||||
for _, k := range Directives {
|
||||
registry := c.Handler(k)
|
||||
if registry != nil {
|
||||
hs = append(hs, registry)
|
||||
}
|
||||
}
|
||||
return hs
|
||||
}
|
||||
@@ -296,6 +253,27 @@ func (h *dnsContext) validateZonesAndListeningAddresses() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// propagateConfigParams copies the necessary parameters from first config in the block
|
||||
// to all other config in the same block. Doing this results in zones
|
||||
// sharing the same plugin instances and settings as other zones in
|
||||
// the same block.
|
||||
func propagateConfigParams(configs []*Config) {
|
||||
for _, c := range configs {
|
||||
c.Plugin = c.firstConfigInBlock.Plugin
|
||||
c.ListenHosts = c.firstConfigInBlock.ListenHosts
|
||||
c.Debug = c.firstConfigInBlock.Debug
|
||||
c.Stacktrace = c.firstConfigInBlock.Stacktrace
|
||||
c.NumSockets = c.firstConfigInBlock.NumSockets
|
||||
|
||||
// Fork TLSConfig for each encrypted connection
|
||||
c.TLSConfig = c.firstConfigInBlock.TLSConfig.Clone()
|
||||
c.ReadTimeout = c.firstConfigInBlock.ReadTimeout
|
||||
c.WriteTimeout = c.firstConfigInBlock.WriteTimeout
|
||||
c.IdleTimeout = c.firstConfigInBlock.IdleTimeout
|
||||
c.TsigSecret = c.firstConfigInBlock.TsigSecret
|
||||
}
|
||||
}
|
||||
|
||||
// groupConfigsByListenAddr groups site configs by their listen
|
||||
// (bind) address, so sites that use the same listener can be served
|
||||
// on the same server instance. The return value maps the listen
|
||||
@@ -317,6 +295,63 @@ func groupConfigsByListenAddr(configs []*Config) (map[string][]*Config, error) {
|
||||
return groups, nil
|
||||
}
|
||||
|
||||
// makeServersForGroup creates servers for a specific transport and group.
|
||||
// It creates as many servers as specified in the NumSockets configuration.
|
||||
// If the NumSockets param is not specified, one server is created by default.
|
||||
func makeServersForGroup(addr string, group []*Config) ([]caddy.Server, error) {
|
||||
// that is impossible, but better to check
|
||||
if len(group) == 0 {
|
||||
return nil, fmt.Errorf("no configs for group defined")
|
||||
}
|
||||
// create one server by default if no NumSockets specified
|
||||
numSockets := 1
|
||||
if group[0].NumSockets > 0 {
|
||||
numSockets = group[0].NumSockets
|
||||
}
|
||||
|
||||
var servers []caddy.Server
|
||||
for range numSockets {
|
||||
// switch on addr
|
||||
switch tr, _ := parse.Transport(addr); tr {
|
||||
case transport.DNS:
|
||||
s, err := NewServer(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.TLS:
|
||||
s, err := NewServerTLS(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.QUIC:
|
||||
s, err := NewServerQUIC(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.GRPC:
|
||||
s, err := NewServergRPC(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
|
||||
case transport.HTTPS:
|
||||
s, err := NewServerHTTPS(addr, group)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
servers = append(servers, s)
|
||||
}
|
||||
}
|
||||
return servers, nil
|
||||
}
|
||||
|
||||
// DefaultPort is the default port.
|
||||
const DefaultPort = transport.Port
|
||||
|
||||
|
2
vendor/github.com/coredns/coredns/core/dnsserver/server_grpc.go
generated
vendored
2
vendor/github.com/coredns/coredns/core/dnsserver/server_grpc.go
generated
vendored
@@ -123,7 +123,7 @@ func (s *ServergRPC) Stop() (err error) {
|
||||
// back to the client as a protobuf.
|
||||
func (s *ServergRPC) Query(ctx context.Context, in *pb.DnsPacket) (*pb.DnsPacket, error) {
|
||||
msg := new(dns.Msg)
|
||||
err := msg.Unpack(in.Msg)
|
||||
err := msg.Unpack(in.GetMsg())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
2
vendor/github.com/coredns/coredns/core/dnsserver/server_https.go
generated
vendored
2
vendor/github.com/coredns/coredns/core/dnsserver/server_https.go
generated
vendored
@@ -188,7 +188,7 @@ func (s *ServerHTTPS) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
age := dnsutil.MinimalTTL(dw.Msg, mt)
|
||||
|
||||
w.Header().Set("Content-Type", doh.MimeType)
|
||||
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%f", age.Seconds()))
|
||||
w.Header().Set("Cache-Control", fmt.Sprintf("max-age=%d", uint32(age.Seconds())))
|
||||
w.Header().Set("Content-Length", strconv.Itoa(len(buf)))
|
||||
w.WriteHeader(http.StatusOK)
|
||||
s.countResponse(http.StatusOK)
|
||||
|
52
vendor/github.com/coredns/coredns/core/dnsserver/server_quic.go
generated
vendored
52
vendor/github.com/coredns/coredns/core/dnsserver/server_quic.go
generated
vendored
@@ -7,7 +7,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"net"
|
||||
|
||||
"github.com/coredns/coredns/plugin/metrics/vars"
|
||||
@@ -32,15 +31,26 @@ const (
|
||||
// DoQCodeProtocolError signals that the DoQ implementation encountered
|
||||
// a protocol error and is forcibly aborting the connection.
|
||||
DoQCodeProtocolError quic.ApplicationErrorCode = 2
|
||||
|
||||
// DefaultMaxQUICStreams is the default maximum number of concurrent QUIC streams
|
||||
// on a per-connection basis. RFC 9250 (DNS-over-QUIC) does not require a high
|
||||
// concurrent-stream limit; normal stub or recursive resolvers open only a handful
|
||||
// of streams in parallel. This default (256) is a safe upper bound.
|
||||
DefaultMaxQUICStreams = 256
|
||||
|
||||
// DefaultQUICStreamWorkers is the default number of workers for processing QUIC streams.
|
||||
DefaultQUICStreamWorkers = 1024
|
||||
)
|
||||
|
||||
// ServerQUIC represents an instance of a DNS-over-QUIC server.
|
||||
type ServerQUIC struct {
|
||||
*Server
|
||||
listenAddr net.Addr
|
||||
tlsConfig *tls.Config
|
||||
quicConfig *quic.Config
|
||||
quicListener *quic.Listener
|
||||
listenAddr net.Addr
|
||||
tlsConfig *tls.Config
|
||||
quicConfig *quic.Config
|
||||
quicListener *quic.Listener
|
||||
maxStreams int
|
||||
streamProcessPool chan struct{}
|
||||
}
|
||||
|
||||
// NewServerQUIC returns a new CoreDNS QUIC server and compiles all plugin in to it.
|
||||
@@ -63,16 +73,31 @@ func NewServerQUIC(addr string, group []*Config) (*ServerQUIC, error) {
|
||||
tlsConfig.NextProtos = []string{"doq"}
|
||||
}
|
||||
|
||||
var quicConfig *quic.Config
|
||||
quicConfig = &quic.Config{
|
||||
maxStreams := DefaultMaxQUICStreams
|
||||
if len(group) > 0 && group[0] != nil && group[0].MaxQUICStreams != nil {
|
||||
maxStreams = *group[0].MaxQUICStreams
|
||||
}
|
||||
|
||||
streamProcessPoolSize := DefaultQUICStreamWorkers
|
||||
if len(group) > 0 && group[0] != nil && group[0].MaxQUICWorkerPoolSize != nil {
|
||||
streamProcessPoolSize = *group[0].MaxQUICWorkerPoolSize
|
||||
}
|
||||
|
||||
var quicConfig = &quic.Config{
|
||||
MaxIdleTimeout: s.idleTimeout,
|
||||
MaxIncomingStreams: math.MaxUint16,
|
||||
MaxIncomingUniStreams: math.MaxUint16,
|
||||
MaxIncomingStreams: int64(maxStreams),
|
||||
MaxIncomingUniStreams: int64(maxStreams),
|
||||
// Enable 0-RTT by default for all connections on the server-side.
|
||||
Allow0RTT: true,
|
||||
}
|
||||
|
||||
return &ServerQUIC{Server: s, tlsConfig: tlsConfig, quicConfig: quicConfig}, nil
|
||||
return &ServerQUIC{
|
||||
Server: s,
|
||||
tlsConfig: tlsConfig,
|
||||
quicConfig: quicConfig,
|
||||
maxStreams: maxStreams,
|
||||
streamProcessPool: make(chan struct{}, streamProcessPoolSize),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// ServePacket implements caddy.UDPServer interface.
|
||||
@@ -120,7 +145,12 @@ func (s *ServerQUIC) serveQUICConnection(conn quic.Connection) {
|
||||
return
|
||||
}
|
||||
|
||||
go s.serveQUICStream(stream, conn)
|
||||
// Use a bounded worker pool
|
||||
s.streamProcessPool <- struct{}{} // Acquire a worker slot, may block
|
||||
go func(st quic.Stream, cn quic.Connection) {
|
||||
defer func() { <-s.streamProcessPool }() // Release worker slot
|
||||
s.serveQUICStream(st, cn)
|
||||
}(stream, conn)
|
||||
}
|
||||
}
|
||||
|
||||
|
2
vendor/github.com/coredns/coredns/core/dnsserver/zdirectives.go
generated
vendored
2
vendor/github.com/coredns/coredns/core/dnsserver/zdirectives.go
generated
vendored
@@ -15,7 +15,9 @@ var Directives = []string{
|
||||
"geoip",
|
||||
"cancel",
|
||||
"tls",
|
||||
"quic",
|
||||
"timeouts",
|
||||
"multisocket",
|
||||
"reload",
|
||||
"nsid",
|
||||
"bufsize",
|
||||
|
10
vendor/github.com/coredns/coredns/coremain/run.go
generated
vendored
10
vendor/github.com/coredns/coredns/coremain/run.go
generated
vendored
@@ -12,6 +12,8 @@ import (
|
||||
|
||||
"github.com/coredns/caddy"
|
||||
"github.com/coredns/coredns/core/dnsserver"
|
||||
|
||||
"go.uber.org/automaxprocs/maxprocs"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -31,7 +33,7 @@ func init() {
|
||||
flag.StringVar(&dnsserver.Port, serverType+".port", dnsserver.DefaultPort, "Default port")
|
||||
flag.StringVar(&dnsserver.Port, "p", dnsserver.DefaultPort, "Default port")
|
||||
|
||||
caddy.AppName = coreName
|
||||
caddy.AppName = CoreName
|
||||
caddy.AppVersion = CoreVersion
|
||||
}
|
||||
|
||||
@@ -56,6 +58,11 @@ func Run() {
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
_, err := maxprocs.Set(maxprocs.Logger(log.Printf))
|
||||
if err != nil {
|
||||
log.Println("[WARNING] Failed to set GOMAXPROCS:", err)
|
||||
}
|
||||
|
||||
// Get Corefile input
|
||||
corefile, err := caddy.LoadCaddyfile(serverType)
|
||||
if err != nil {
|
||||
@@ -176,7 +183,6 @@ var (
|
||||
|
||||
// Build information obtained with the help of -ldflags
|
||||
var (
|
||||
// nolint
|
||||
appVersion = "(untracked dev build)" // inferred at startup
|
||||
devBuild = true // inferred at startup
|
||||
|
||||
|
4
vendor/github.com/coredns/coredns/coremain/version.go
generated
vendored
4
vendor/github.com/coredns/coredns/coremain/version.go
generated
vendored
@@ -2,7 +2,7 @@ package coremain
|
||||
|
||||
// Various CoreDNS constants.
|
||||
const (
|
||||
CoreVersion = "1.11.3"
|
||||
coreName = "CoreDNS"
|
||||
CoreVersion = "1.12.2"
|
||||
CoreName = "CoreDNS"
|
||||
serverType = "dns"
|
||||
)
|
||||
|
18
vendor/github.com/coredns/coredns/plugin/backend_lookup.go
generated
vendored
18
vendor/github.com/coredns/coredns/plugin/backend_lookup.go
generated
vendored
@@ -13,6 +13,8 @@ import (
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
const maxCnameChainLength = 10
|
||||
|
||||
// A returns A records from Backend or an error.
|
||||
func A(ctx context.Context, b ServiceBackend, zone string, state request.Request, previousRecords []dns.RR, opt Options) (records []dns.RR, truncated bool, err error) {
|
||||
services, err := checkForApex(ctx, b, zone, state, opt)
|
||||
@@ -34,7 +36,7 @@ func A(ctx context.Context, b ServiceBackend, zone string, state request.Request
|
||||
}
|
||||
|
||||
newRecord := serv.NewCNAME(state.QName(), serv.Host)
|
||||
if len(previousRecords) > 7 {
|
||||
if len(previousRecords) > maxCnameChainLength {
|
||||
// don't add it, and just continue
|
||||
continue
|
||||
}
|
||||
@@ -108,7 +110,7 @@ func AAAA(ctx context.Context, b ServiceBackend, zone string, state request.Requ
|
||||
}
|
||||
|
||||
newRecord := serv.NewCNAME(state.QName(), serv.Host)
|
||||
if len(previousRecords) > 7 {
|
||||
if len(previousRecords) > maxCnameChainLength {
|
||||
// don't add it, and just continue
|
||||
continue
|
||||
}
|
||||
@@ -361,7 +363,7 @@ func TXT(ctx context.Context, b ServiceBackend, zone string, state request.Reque
|
||||
}
|
||||
|
||||
newRecord := serv.NewCNAME(state.QName(), serv.Host)
|
||||
if len(previousRecords) > 7 {
|
||||
if len(previousRecords) > maxCnameChainLength {
|
||||
// don't add it, and just continue
|
||||
continue
|
||||
}
|
||||
@@ -427,20 +429,20 @@ func PTR(ctx context.Context, b ServiceBackend, zone string, state request.Reque
|
||||
return records, nil
|
||||
}
|
||||
|
||||
// NS returns NS records from the backend
|
||||
// NS returns NS records from the backend
|
||||
func NS(ctx context.Context, b ServiceBackend, zone string, state request.Request, opt Options) (records, extra []dns.RR, err error) {
|
||||
// NS record for this zone live in a special place, ns.dns.<zone>. Fake our lookup.
|
||||
// only a tad bit fishy...
|
||||
// NS record for this zone lives in a special place, ns.dns.<zone>. Fake our lookup.
|
||||
// Only a tad bit fishy...
|
||||
old := state.QName()
|
||||
|
||||
state.Clear()
|
||||
state.Req.Question[0].Name = dnsutil.Join("ns.dns.", zone)
|
||||
services, err := b.Services(ctx, state, false, opt)
|
||||
// reset the query name to the original
|
||||
state.Req.Question[0].Name = old
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
// ... and reset
|
||||
state.Req.Question[0].Name = old
|
||||
|
||||
seen := map[string]bool{}
|
||||
|
||||
|
7
vendor/github.com/coredns/coredns/plugin/cache/cache.go
generated
vendored
7
vendor/github.com/coredns/coredns/plugin/cache/cache.go
generated
vendored
@@ -189,11 +189,12 @@ func (w *ResponseWriter) WriteMsg(res *dns.Msg) error {
|
||||
|
||||
msgTTL := dnsutil.MinimalTTL(res, mt)
|
||||
var duration time.Duration
|
||||
if mt == response.NameError || mt == response.NoData {
|
||||
switch mt {
|
||||
case response.NameError, response.NoData:
|
||||
duration = computeTTL(msgTTL, w.minnttl, w.nttl)
|
||||
} else if mt == response.ServerError {
|
||||
case response.ServerError:
|
||||
duration = w.failttl
|
||||
} else {
|
||||
default:
|
||||
duration = computeTTL(msgTTL, w.minpttl, w.pttl)
|
||||
}
|
||||
|
||||
|
9
vendor/github.com/coredns/coredns/plugin/cache/handler.go
generated
vendored
9
vendor/github.com/coredns/coredns/plugin/cache/handler.go
generated
vendored
@@ -34,14 +34,13 @@ func (c *Cache) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
|
||||
// in which upstream doesn't support DNSSEC, the two cache items will effectively be the same. Regardless, any
|
||||
// DNSSEC RRs in the response are written to cache with the response.
|
||||
|
||||
ttl := 0
|
||||
i := c.getIgnoreTTL(now, state, server)
|
||||
if i == nil {
|
||||
crr := &ResponseWriter{ResponseWriter: w, Cache: c, state: state, server: server, do: do, ad: ad, cd: cd,
|
||||
nexcept: c.nexcept, pexcept: c.pexcept, wildcardFunc: wildcardFunc(ctx)}
|
||||
return c.doRefresh(ctx, state, crr)
|
||||
}
|
||||
ttl = i.ttl(now)
|
||||
ttl := i.ttl(now)
|
||||
if ttl < 0 {
|
||||
// serve stale behavior
|
||||
if c.verifyStale {
|
||||
@@ -100,7 +99,7 @@ func (c *Cache) doPrefetch(ctx context.Context, state request.Request, cw *Respo
|
||||
// that we've gathered sofar. See we copy the frequencies info back
|
||||
// into the new item that was stored in the cache.
|
||||
if i1 := c.exists(state); i1 != nil {
|
||||
i1.Freq.Reset(now, i.Freq.Hits())
|
||||
i1.Reset(now, i.Hits())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,9 +111,9 @@ func (c *Cache) shouldPrefetch(i *item, now time.Time) bool {
|
||||
if c.prefetch <= 0 {
|
||||
return false
|
||||
}
|
||||
i.Freq.Update(c.duration, now)
|
||||
i.Update(c.duration, now)
|
||||
threshold := int(math.Ceil(float64(c.percentage) / 100 * float64(i.origTTL)))
|
||||
return i.Freq.Hits() >= c.prefetch && i.ttl(now) <= threshold
|
||||
return i.Hits() >= c.prefetch && i.ttl(now) <= threshold
|
||||
}
|
||||
|
||||
// Name implements the Handler interface.
|
||||
|
7
vendor/github.com/coredns/coredns/plugin/etcd/msg/service.go
generated
vendored
7
vendor/github.com/coredns/coredns/plugin/etcd/msg/service.go
generated
vendored
@@ -149,12 +149,11 @@ func split255(s string) []string {
|
||||
sx := []string{}
|
||||
p, i := 0, 255
|
||||
for {
|
||||
if i <= len(s) {
|
||||
sx = append(sx, s[p:i])
|
||||
} else {
|
||||
if i > len(s) {
|
||||
sx = append(sx, s[p:])
|
||||
break
|
||||
}
|
||||
sx = append(sx, s[p:i])
|
||||
p, i = p+255, i+255
|
||||
}
|
||||
|
||||
@@ -164,7 +163,7 @@ func split255(s string) []string {
|
||||
// targetStrip strips "targetstrip" labels from the left side of the fully qualified name.
|
||||
func targetStrip(name string, targetStrip int) string {
|
||||
offset, end := 0, false
|
||||
for i := 0; i < targetStrip; i++ {
|
||||
for range targetStrip {
|
||||
offset, end = dns.NextLabel(name, offset)
|
||||
}
|
||||
if end {
|
||||
|
2
vendor/github.com/coredns/coredns/plugin/metrics/README.md
generated
vendored
2
vendor/github.com/coredns/coredns/plugin/metrics/README.md
generated
vendored
@@ -16,7 +16,7 @@ the following metrics are exported:
|
||||
* `coredns_panics_total{}` - total number of panics.
|
||||
* `coredns_dns_requests_total{server, zone, view, proto, family, type}` - total query count.
|
||||
* `coredns_dns_request_duration_seconds{server, zone, view, type}` - duration to process each query.
|
||||
* `coredns_dns_request_size_bytes{server, zone, view, proto}` - size of the request in bytes.
|
||||
* `coredns_dns_request_size_bytes{server, zone, view, proto}` - size of the request in bytes. Uses the original size before any plugin rewrites.
|
||||
* `coredns_dns_do_requests_total{server, view, zone}` - queries that have the DO bit set
|
||||
* `coredns_dns_response_size_bytes{server, zone, view, proto}` - response size in bytes.
|
||||
* `coredns_dns_responses_total{server, zone, view, rcode, plugin}` - response per zone, rcode and plugin.
|
||||
|
7
vendor/github.com/coredns/coredns/plugin/metrics/handler.go
generated
vendored
7
vendor/github.com/coredns/coredns/plugin/metrics/handler.go
generated
vendored
@@ -16,6 +16,9 @@ import (
|
||||
func (m *Metrics) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
||||
state := request.Request{W: w, Req: r}
|
||||
|
||||
// Capture the original request size before any plugins modify it
|
||||
originalSize := r.Len()
|
||||
|
||||
qname := state.QName()
|
||||
zone := plugin.Zones(m.ZoneNames()).Matches(qname)
|
||||
if zone == "" {
|
||||
@@ -34,7 +37,9 @@ func (m *Metrics) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
|
||||
rc = status
|
||||
}
|
||||
plugin := m.authoritativePlugin(rw.Caller)
|
||||
vars.Report(WithServer(ctx), state, zone, WithView(ctx), rcode.ToString(rc), plugin, rw.Len, rw.Start)
|
||||
// Pass the original request size to vars.Report
|
||||
vars.Report(WithServer(ctx), state, zone, WithView(ctx), rcode.ToString(rc), plugin,
|
||||
rw.Len, rw.Start, vars.WithOriginalReqSize(originalSize))
|
||||
|
||||
return status, err
|
||||
}
|
||||
|
34
vendor/github.com/coredns/coredns/plugin/metrics/vars/report.go
generated
vendored
34
vendor/github.com/coredns/coredns/plugin/metrics/vars/report.go
generated
vendored
@@ -6,10 +6,34 @@ import (
|
||||
"github.com/coredns/coredns/request"
|
||||
)
|
||||
|
||||
// ReportOptions is a struct that contains available options for the Report function.
|
||||
type ReportOptions struct {
|
||||
OriginalReqSize int
|
||||
}
|
||||
|
||||
// ReportOption defines a function that modifies ReportOptions
|
||||
type ReportOption func(*ReportOptions)
|
||||
|
||||
// WithOriginalReqSize returns an option to set the original request size
|
||||
func WithOriginalReqSize(size int) ReportOption {
|
||||
return func(opts *ReportOptions) {
|
||||
opts.OriginalReqSize = size
|
||||
}
|
||||
}
|
||||
|
||||
// Report reports the metrics data associated with request. This function is exported because it is also
|
||||
// called from core/dnsserver to report requests hitting the server that should not be handled and are thus
|
||||
// not sent down the plugin chain.
|
||||
func Report(server string, req request.Request, zone, view, rcode, plugin string, size int, start time.Time) {
|
||||
func Report(server string, req request.Request, zone, view, rcode, plugin string,
|
||||
size int, start time.Time, opts ...ReportOption) {
|
||||
options := ReportOptions{
|
||||
OriginalReqSize: 0,
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
opt(&options)
|
||||
}
|
||||
|
||||
// Proto and Family.
|
||||
net := req.Proto()
|
||||
fam := "1"
|
||||
@@ -27,7 +51,13 @@ func Report(server string, req request.Request, zone, view, rcode, plugin string
|
||||
RequestDuration.WithLabelValues(server, zone, view).Observe(time.Since(start).Seconds())
|
||||
|
||||
ResponseSize.WithLabelValues(server, zone, view, net).Observe(float64(size))
|
||||
RequestSize.WithLabelValues(server, zone, view, net).Observe(float64(req.Len()))
|
||||
|
||||
reqSize := req.Len()
|
||||
if options.OriginalReqSize > 0 {
|
||||
reqSize = options.OriginalReqSize
|
||||
}
|
||||
|
||||
RequestSize.WithLabelValues(server, zone, view, net).Observe(float64(reqSize))
|
||||
|
||||
ResponseRcode.WithLabelValues(server, zone, view, rcode, plugin).Inc()
|
||||
}
|
||||
|
2
vendor/github.com/coredns/coredns/plugin/pkg/cache/cache.go
generated
vendored
2
vendor/github.com/coredns/coredns/plugin/pkg/cache/cache.go
generated
vendored
@@ -38,7 +38,7 @@ func New(size int) *Cache {
|
||||
c := &Cache{}
|
||||
|
||||
// Initialize all the shards
|
||||
for i := 0; i < shardSize; i++ {
|
||||
for i := range shardSize {
|
||||
c.shards[i] = newShard(ssize)
|
||||
}
|
||||
return c
|
||||
|
2
vendor/github.com/coredns/coredns/plugin/pkg/cidr/cidr.go
generated
vendored
2
vendor/github.com/coredns/coredns/plugin/pkg/cidr/cidr.go
generated
vendored
@@ -71,7 +71,7 @@ func Reverse(nets []string) []string {
|
||||
nearest := (bits - ones) + mod
|
||||
offset := 0
|
||||
var end bool
|
||||
for i := 0; i < nearest/sizeDigit; i++ {
|
||||
for range nearest / sizeDigit {
|
||||
offset, end = dns.NextLabel(r, offset)
|
||||
if end {
|
||||
break
|
||||
|
2
vendor/github.com/coredns/coredns/plugin/pkg/dnstest/server.go
generated
vendored
2
vendor/github.com/coredns/coredns/plugin/pkg/dnstest/server.go
generated
vendored
@@ -28,7 +28,7 @@ func NewServer(f dns.HandlerFunc) *Server {
|
||||
s1 := &dns.Server{} // udp
|
||||
s2 := &dns.Server{} // tcp
|
||||
|
||||
for i := 0; i < 5; i++ { // 5 attempts
|
||||
for range 5 { // 5 attempts
|
||||
s2.Listener, _ = reuseport.Listen("tcp", ":0")
|
||||
if s2.Listener == nil {
|
||||
continue
|
||||
|
10
vendor/github.com/coredns/coredns/plugin/pkg/dnsutil/reverse.go
generated
vendored
10
vendor/github.com/coredns/coredns/plugin/pkg/dnsutil/reverse.go
generated
vendored
@@ -11,10 +11,8 @@ import (
|
||||
// 54.119.58.176.in-addr.arpa. becomes 176.58.119.54. If the conversion
|
||||
// fails the empty string is returned.
|
||||
func ExtractAddressFromReverse(reverseName string) string {
|
||||
search := ""
|
||||
|
||||
f := reverse
|
||||
|
||||
var search string
|
||||
switch {
|
||||
case strings.HasSuffix(reverseName, IP4arpa):
|
||||
search = strings.TrimSuffix(reverseName, IP4arpa)
|
||||
@@ -43,7 +41,7 @@ func IsReverse(name string) int {
|
||||
}
|
||||
|
||||
func reverse(slice []string) string {
|
||||
for i := 0; i < len(slice)/2; i++ {
|
||||
for i := range len(slice) / 2 {
|
||||
j := len(slice) - i - 1
|
||||
slice[i], slice[j] = slice[j], slice[i]
|
||||
}
|
||||
@@ -58,12 +56,12 @@ func reverse(slice []string) string {
|
||||
// b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2
|
||||
// is reversed to 2001:db8::567:89ab
|
||||
func reverse6(slice []string) string {
|
||||
for i := 0; i < len(slice)/2; i++ {
|
||||
for i := range len(slice) / 2 {
|
||||
j := len(slice) - i - 1
|
||||
slice[i], slice[j] = slice[j], slice[i]
|
||||
}
|
||||
slice6 := []string{}
|
||||
for i := 0; i < len(slice)/4; i++ {
|
||||
for i := range len(slice) / 4 {
|
||||
slice6 = append(slice6, strings.Join(slice[i*4:i*4+4], ""))
|
||||
}
|
||||
ip := net.ParseIP(strings.Join(slice6, ":")).To16()
|
||||
|
10
vendor/github.com/coredns/coredns/plugin/pkg/doh/doh.go
generated
vendored
10
vendor/github.com/coredns/coredns/plugin/pkg/doh/doh.go
generated
vendored
@@ -45,22 +45,22 @@ func NewRequest(method, url string, m *dns.Msg) (*http.Request, error) {
|
||||
return req, err
|
||||
}
|
||||
|
||||
req.Header.Set("content-type", MimeType)
|
||||
req.Header.Set("accept", MimeType)
|
||||
req.Header.Set("Content-Type", MimeType)
|
||||
req.Header.Set("Accept", MimeType)
|
||||
return req, nil
|
||||
|
||||
case http.MethodPost:
|
||||
req, err := http.NewRequest(
|
||||
http.MethodPost,
|
||||
fmt.Sprintf("%s%s?bla=foo:443", url, Path),
|
||||
fmt.Sprintf("%s%s", url, Path),
|
||||
bytes.NewReader(buf),
|
||||
)
|
||||
if err != nil {
|
||||
return req, err
|
||||
}
|
||||
|
||||
req.Header.Set("content-type", MimeType)
|
||||
req.Header.Set("accept", MimeType)
|
||||
req.Header.Set("Content-Type", MimeType)
|
||||
req.Header.Set("Accept", MimeType)
|
||||
return req, nil
|
||||
|
||||
default:
|
||||
|
13
vendor/github.com/coredns/coredns/plugin/pkg/parse/parse.go
generated
vendored
13
vendor/github.com/coredns/coredns/plugin/pkg/parse/parse.go
generated
vendored
@@ -23,15 +23,14 @@ func TransferIn(c *caddy.Controller) (froms []string, err error) {
|
||||
return nil, c.ArgErr()
|
||||
}
|
||||
for i := range froms {
|
||||
if froms[i] != "*" {
|
||||
normalized, err := HostPort(froms[i], transport.Port)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
froms[i] = normalized
|
||||
} else {
|
||||
if froms[i] == "*" {
|
||||
return nil, fmt.Errorf("can't use '*' in transfer from")
|
||||
}
|
||||
normalized, err := HostPort(froms[i], transport.Port)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
froms[i] = normalized
|
||||
}
|
||||
}
|
||||
return froms, nil
|
||||
|
2
vendor/github.com/coredns/coredns/plugin/plugin.go
generated
vendored
2
vendor/github.com/coredns/coredns/plugin/plugin.go
generated
vendored
@@ -70,7 +70,7 @@ func (f HandlerFunc) Name() string { return "handlerfunc" }
|
||||
func Error(name string, err error) error { return fmt.Errorf("%s/%s: %s", "plugin", name, err) }
|
||||
|
||||
// NextOrFailure calls next.ServeDNS when next is not nil, otherwise it will return, a ServerFailure and a `no next plugin found` error.
|
||||
func NextOrFailure(name string, next Handler, ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { // nolint: golint
|
||||
func NextOrFailure(name string, next Handler, ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
||||
if next != nil {
|
||||
if span := ot.SpanFromContext(ctx); span != nil {
|
||||
child := span.Tracer().StartSpan(next.Name(), ot.ChildOf(span.Context()))
|
||||
|
1
vendor/github.com/coredns/coredns/plugin/test/file.go
generated
vendored
1
vendor/github.com/coredns/coredns/plugin/test/file.go
generated
vendored
@@ -21,6 +21,7 @@ func TempFile(dir, content string) (string, func(), error) {
|
||||
|
||||
// WritePEMFiles creates a tmp dir with ca.pem, cert.pem, and key.pem
|
||||
func WritePEMFiles(t *testing.T) (string, error) {
|
||||
t.Helper()
|
||||
tempDir := t.TempDir()
|
||||
|
||||
data := `-----BEGIN CERTIFICATE-----
|
||||
|
16
vendor/github.com/coredns/coredns/plugin/test/scrape.go
generated
vendored
16
vendor/github.com/coredns/coredns/plugin/test/scrape.go
generated
vendored
@@ -150,9 +150,9 @@ func newMetricFamily(dtoMF *dto.MetricFamily) *MetricFamily {
|
||||
Name: dtoMF.GetName(),
|
||||
Help: dtoMF.GetHelp(),
|
||||
Type: dtoMF.GetType().String(),
|
||||
Metrics: make([]interface{}, len(dtoMF.Metric)),
|
||||
Metrics: make([]interface{}, len(dtoMF.GetMetric())),
|
||||
}
|
||||
for i, m := range dtoMF.Metric {
|
||||
for i, m := range dtoMF.GetMetric() {
|
||||
if dtoMF.GetType() == dto.MetricType_SUMMARY {
|
||||
mf.Metrics[i] = summary{
|
||||
Labels: makeLabels(m),
|
||||
@@ -178,13 +178,13 @@ func newMetricFamily(dtoMF *dto.MetricFamily) *MetricFamily {
|
||||
}
|
||||
|
||||
func value(m *dto.Metric) float64 {
|
||||
if m.Gauge != nil {
|
||||
if m.GetGauge() != nil {
|
||||
return m.GetGauge().GetValue()
|
||||
}
|
||||
if m.Counter != nil {
|
||||
if m.GetCounter() != nil {
|
||||
return m.GetCounter().GetValue()
|
||||
}
|
||||
if m.Untyped != nil {
|
||||
if m.GetUntyped() != nil {
|
||||
return m.GetUntyped().GetValue()
|
||||
}
|
||||
return 0.
|
||||
@@ -192,7 +192,7 @@ func value(m *dto.Metric) float64 {
|
||||
|
||||
func makeLabels(m *dto.Metric) map[string]string {
|
||||
result := map[string]string{}
|
||||
for _, lp := range m.Label {
|
||||
for _, lp := range m.GetLabel() {
|
||||
result[lp.GetName()] = lp.GetValue()
|
||||
}
|
||||
return result
|
||||
@@ -200,7 +200,7 @@ func makeLabels(m *dto.Metric) map[string]string {
|
||||
|
||||
func makeQuantiles(m *dto.Metric) map[string]string {
|
||||
result := map[string]string{}
|
||||
for _, q := range m.GetSummary().Quantile {
|
||||
for _, q := range m.GetSummary().GetQuantile() {
|
||||
result[fmt.Sprint(q.GetQuantile())] = fmt.Sprint(q.GetValue())
|
||||
}
|
||||
return result
|
||||
@@ -208,7 +208,7 @@ func makeQuantiles(m *dto.Metric) map[string]string {
|
||||
|
||||
func makeBuckets(m *dto.Metric) map[string]string {
|
||||
result := map[string]string{}
|
||||
for _, b := range m.GetHistogram().Bucket {
|
||||
for _, b := range m.GetHistogram().GetBucket() {
|
||||
result[fmt.Sprint(b.GetUpperBound())] = fmt.Sprint(b.GetCumulativeCount())
|
||||
}
|
||||
return result
|
||||
|
Reference in New Issue
Block a user