mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-04 10:11:10 +01:00 
			
		
		
		
	Tests updated as well and all the middleware. And Prometheus renamed to metrics (directive is still prometheus).
		
			
				
	
	
		
			46 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1021 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package middleware
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
 | 
						|
	"github.com/miekg/dns"
 | 
						|
)
 | 
						|
 | 
						|
// Edns0Version checks the EDNS version in the request. If error
 | 
						|
// is nil everything is OK and we can invoke the middleware. If non-nil, the
 | 
						|
// returned Msg is valid to be returned to the client (and should). For some
 | 
						|
// reason this response should not contain a question RR in the question section.
 | 
						|
func Edns0Version(req *dns.Msg) (*dns.Msg, error) {
 | 
						|
	opt := req.IsEdns0()
 | 
						|
	if opt == nil {
 | 
						|
		return nil, nil
 | 
						|
	}
 | 
						|
	if opt.Version() == 0 {
 | 
						|
		return nil, nil
 | 
						|
	}
 | 
						|
	m := new(dns.Msg)
 | 
						|
	m.SetReply(req)
 | 
						|
	// zero out question section, wtf.
 | 
						|
	m.Question = nil
 | 
						|
 | 
						|
	o := new(dns.OPT)
 | 
						|
	o.Hdr.Name = "."
 | 
						|
	o.Hdr.Rrtype = dns.TypeOPT
 | 
						|
	o.SetVersion(0)
 | 
						|
	o.SetExtendedRcode(dns.RcodeBadVers)
 | 
						|
	m.Extra = []dns.RR{o}
 | 
						|
 | 
						|
	return m, errors.New("EDNS0 BADVERS")
 | 
						|
}
 | 
						|
 | 
						|
// edns0Size returns a normalized size based on proto.
 | 
						|
func edns0Size(proto string, size int) int {
 | 
						|
	if proto == "tcp" {
 | 
						|
		return dns.MaxMsgSize
 | 
						|
	}
 | 
						|
	if size < dns.MinMsgSize {
 | 
						|
		return dns.MinMsgSize
 | 
						|
	}
 | 
						|
	return size
 | 
						|
}
 |