mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	This reverts commit 8045aa279b.
			
			
This commit is contained in:
		| @@ -91,10 +91,6 @@ On each endpoint, the timeouts of the communication are set by default and autom | |||||||
| * dialTimeout by default is 30 sec, and can decrease automatically down to 100ms | * dialTimeout by default is 30 sec, and can decrease automatically down to 100ms | ||||||
| * readTimeout by default is 2 sec, and can decrease automatically down to 200ms | * readTimeout by default is 2 sec, and can decrease automatically down to 200ms | ||||||
|  |  | ||||||
| ## Metadata |  | ||||||
|  |  | ||||||
| * forward/resolving_proxy : provide the IP address and port of the upstream resolver used to resolve the current DNS query. |  | ||||||
|  |  | ||||||
| ## Metrics | ## Metrics | ||||||
|  |  | ||||||
| If monitoring is enabled (via the *prometheus* directive) then the following metric are exported: | If monitoring is enabled (via the *prometheus* directive) then the following metric are exported: | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ import ( | |||||||
|  |  | ||||||
| 	"github.com/coredns/coredns/plugin" | 	"github.com/coredns/coredns/plugin" | ||||||
| 	"github.com/coredns/coredns/plugin/debug" | 	"github.com/coredns/coredns/plugin/debug" | ||||||
| 	"github.com/coredns/coredns/plugin/metadata" |  | ||||||
| 	clog "github.com/coredns/coredns/plugin/pkg/log" | 	clog "github.com/coredns/coredns/plugin/pkg/log" | ||||||
| 	"github.com/coredns/coredns/request" | 	"github.com/coredns/coredns/request" | ||||||
|  |  | ||||||
| @@ -60,15 +59,6 @@ func (f *Forward) Len() int { return len(f.proxies) } | |||||||
| // Name implements plugin.Handler. | // Name implements plugin.Handler. | ||||||
| func (f *Forward) Name() string { return "forward" } | func (f *Forward) Name() string { return "forward" } | ||||||
|  |  | ||||||
| //declareMetadata adds to the context a metadata parameter which will return the passed value. |  | ||||||
| func (f *Forward) declareMetadata(ctx context.Context, name string, value string) bool { |  | ||||||
| 	label := f.Name()+"/"+name |  | ||||||
| 	if metadata.IsLabel(label) { |  | ||||||
| 		return metadata.SetValueFunc(ctx, label, func() string { return value }) |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // ServeDNS implements plugin.Handler. | // ServeDNS implements plugin.Handler. | ||||||
| func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { | func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { | ||||||
|  |  | ||||||
| @@ -158,12 +148,10 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg | |||||||
|  |  | ||||||
| 			formerr := state.ErrorMessage(dns.RcodeFormatError) | 			formerr := state.ErrorMessage(dns.RcodeFormatError) | ||||||
| 			w.WriteMsg(formerr) | 			w.WriteMsg(formerr) | ||||||
| 			f.declareMetadata(ctx, "resolving_proxy", proxy.addr) |  | ||||||
| 			return 0, nil | 			return 0, nil | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		w.WriteMsg(ret) | 		w.WriteMsg(ret) | ||||||
| 		f.declareMetadata(ctx, "resolving_proxy", proxy.addr) |  | ||||||
| 		return 0, nil | 		return 0, nil | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -72,10 +72,6 @@ The following place holders are supported: | |||||||
| * `{>do}`: is the EDNS0 DO (DNSSEC OK) bit set in the query | * `{>do}`: is the EDNS0 DO (DNSSEC OK) bit set in the query | ||||||
| * `{>id}`: query ID | * `{>id}`: query ID | ||||||
| * `{>opcode}`: query OPCODE | * `{>opcode}`: query OPCODE | ||||||
| * `{local}`: server's IP address, for IPv6 addresses these are enclosed in brackets: `[::1]` |  | ||||||
| * `{A}`: number of the A type answers in the response |  | ||||||
| * `{AAAA}`: number of the AAAA type answers in the response |  | ||||||
| * `{forward/resolving_proxy}`: if the query was forwarded to a resolver, the IP address and port of that replied resolver, else empty. The metadata plugin needs to be enabled to use this placeholder |  | ||||||
|  |  | ||||||
| The default Common Log Format is: | The default Common Log Format is: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -57,7 +57,7 @@ func (l Logger) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) | |||||||
| 		// If we don't set up a class in config, the default "all" will be added | 		// If we don't set up a class in config, the default "all" will be added | ||||||
| 		// and we shouldn't have an empty rule.Class. | 		// and we shouldn't have an empty rule.Class. | ||||||
| 		if rule.Class[response.All] || rule.Class[class] { | 		if rule.Class[response.All] || rule.Class[class] { | ||||||
| 			rep := replacer.New(ctx, r, rrw, CommonLogEmptyValue) | 			rep := replacer.New(r, rrw, CommonLogEmptyValue) | ||||||
| 			rule.Log.Println(rep.Replace(rule.Format)) | 			rule.Log.Println(rep.Replace(rule.Format)) | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,13 +1,11 @@ | |||||||
| package replacer | package replacer | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"context" |  | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"github.com/coredns/coredns/plugin/pkg/dnstest" | 	"github.com/coredns/coredns/plugin/pkg/dnstest" | ||||||
| 	"github.com/coredns/coredns/plugin/metadata" |  | ||||||
| 	"github.com/coredns/coredns/request" | 	"github.com/coredns/coredns/request" | ||||||
|  |  | ||||||
| 	"github.com/miekg/dns" | 	"github.com/miekg/dns" | ||||||
| @@ -33,7 +31,7 @@ type replacer struct { | |||||||
| // values into the replacer. rr may be nil if it is not | // values into the replacer. rr may be nil if it is not | ||||||
| // available. emptyValue should be the string that is used | // available. emptyValue should be the string that is used | ||||||
| // in place of empty string (can still be empty string). | // in place of empty string (can still be empty string). | ||||||
| func New(ctx context.Context, r *dns.Msg, rr *dnstest.Recorder, emptyValue string) Replacer { | func New(r *dns.Msg, rr *dnstest.Recorder, emptyValue string) Replacer { | ||||||
| 	req := request.Request{W: rr, Req: r} | 	req := request.Request{W: rr, Req: r} | ||||||
| 	rep := replacer{ | 	rep := replacer{ | ||||||
| 		replacements: map[string]string{ | 		replacements: map[string]string{ | ||||||
| @@ -47,8 +45,6 @@ func New(ctx context.Context, r *dns.Msg, rr *dnstest.Recorder, emptyValue strin | |||||||
| 			"{size}":   strconv.Itoa(req.Len()), | 			"{size}":   strconv.Itoa(req.Len()), | ||||||
| 			"{remote}": addrToRFC3986(req.IP()), | 			"{remote}": addrToRFC3986(req.IP()), | ||||||
| 			"{port}":   req.Port(), | 			"{port}":   req.Port(), | ||||||
| 			"{local}":  addrToRFC3986(req.LocalIP()), |  | ||||||
| 			"{forward/resolving_proxy}": getMetadata(ctx, "forward/resolving_proxy"), |  | ||||||
| 		}, | 		}, | ||||||
| 		emptyValue: emptyValue, | 		emptyValue: emptyValue, | ||||||
| 	} | 	} | ||||||
| @@ -62,8 +58,6 @@ func New(ctx context.Context, r *dns.Msg, rr *dnstest.Recorder, emptyValue strin | |||||||
| 		rep.replacements["{duration}"] = strconv.FormatFloat(time.Since(rr.Start).Seconds(), 'f', -1, 64) + "s" | 		rep.replacements["{duration}"] = strconv.FormatFloat(time.Since(rr.Start).Seconds(), 'f', -1, 64) + "s" | ||||||
| 		if rr.Msg != nil { | 		if rr.Msg != nil { | ||||||
| 			rep.replacements[headerReplacer+"rflags}"] = flagsToString(rr.Msg.MsgHdr) | 			rep.replacements[headerReplacer+"rflags}"] = flagsToString(rr.Msg.MsgHdr) | ||||||
| 			rep.replacements["{A}"] = answersCount(rr.Msg, dns.TypeA) |  | ||||||
| 			rep.replacements["{AAAA}"] = answersCount(rr.Msg, dns.TypeAAAA) |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -169,30 +163,6 @@ func addrToRFC3986(addr string) string { | |||||||
| 	return addr | 	return addr | ||||||
| } | } | ||||||
|  |  | ||||||
| //getMetadata will return value from Metadata or empty string |  | ||||||
| func getMetadata(ctx context.Context, label string) string { |  | ||||||
| 	if ctx != nil { |  | ||||||
| 		valueFunc := metadata.ValueFunc(ctx, label) |  | ||||||
| 		if valueFunc != nil { |  | ||||||
| 			return valueFunc() |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return "" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| //answersCount will calculate a number of answers which have the type passed |  | ||||||
| func answersCount(m *dns.Msg, rtype uint16) string { |  | ||||||
| 	count := 0 |  | ||||||
| 	if m != nil { |  | ||||||
| 		for i := 0; i < len(m.Answer); i++ { |  | ||||||
| 			if m.Answer[i].Header().Rrtype == rtype { |  | ||||||
| 				count++ |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return strconv.Itoa(count) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| const ( | const ( | ||||||
| 	timeFormat     = "02/Jan/2006:15:04:05 -0700" | 	timeFormat     = "02/Jan/2006:15:04:05 -0700" | ||||||
| 	headerReplacer = "{>" | 	headerReplacer = "{>" | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ func TestNewReplacer(t *testing.T) { | |||||||
| 	r.SetQuestion("example.org.", dns.TypeHINFO) | 	r.SetQuestion("example.org.", dns.TypeHINFO) | ||||||
| 	r.MsgHdr.AuthenticatedData = true | 	r.MsgHdr.AuthenticatedData = true | ||||||
|  |  | ||||||
| 	replaceValues := New(nil, r, w, "") | 	replaceValues := New(r, w, "") | ||||||
|  |  | ||||||
| 	switch v := replaceValues.(type) { | 	switch v := replaceValues.(type) { | ||||||
| 	case replacer: | 	case replacer: | ||||||
| @@ -47,7 +47,7 @@ func TestSet(t *testing.T) { | |||||||
| 	r.SetQuestion("example.org.", dns.TypeHINFO) | 	r.SetQuestion("example.org.", dns.TypeHINFO) | ||||||
| 	r.MsgHdr.AuthenticatedData = true | 	r.MsgHdr.AuthenticatedData = true | ||||||
|  |  | ||||||
| 	repl := New(nil, r, w, "") | 	repl := New(r, w, "") | ||||||
|  |  | ||||||
| 	repl.Set("name", "coredns.io.") | 	repl.Set("name", "coredns.io.") | ||||||
| 	repl.Set("type", "A") | 	repl.Set("type", "A") | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ const ( | |||||||
| 	NotMatch   = "not_match" | 	NotMatch   = "not_match" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func newReplacer(r *dns.Msg) replacer.Replacer { return replacer.New(nil, r, nil, "") } | func newReplacer(r *dns.Msg) replacer.Replacer { return replacer.New(r, nil, "") } | ||||||
|  |  | ||||||
| // condition is a rewrite condition. | // condition is a rewrite condition. | ||||||
| type condition func(string, string) bool | type condition func(string, string) bool | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user