mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	* plugin/forward: check TC correctly on reply. Add test for this. * Add proxy test as well
		
			
				
	
	
		
			30 lines
		
	
	
		
			902 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			902 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package forward
 | |
| 
 | |
| import (
 | |
| 	"github.com/coredns/coredns/request"
 | |
| 
 | |
| 	"github.com/miekg/dns"
 | |
| )
 | |
| 
 | |
| // truncated looks at the error and if truncated return a nil errror
 | |
| // and a possible reconstructed dns message if that was nil.
 | |
| func truncated(state request.Request, ret *dns.Msg, err error) (*dns.Msg, error) {
 | |
| 	// If you query for instance ANY isc.org; you get a truncated query back which miekg/dns fails to unpack
 | |
| 	// because the RRs are not finished. The returned message can be useful or useless. Return the original
 | |
| 	// query with some header bits set that they should retry with TCP.
 | |
| 	if err != dns.ErrTruncated {
 | |
| 		return ret, err
 | |
| 	}
 | |
| 
 | |
| 	// We may or may not have something sensible... if not reassemble something to send to the client.
 | |
| 	m := ret
 | |
| 	if ret == nil {
 | |
| 		m = new(dns.Msg)
 | |
| 		m.SetReply(state.Req)
 | |
| 		m.Truncated = true
 | |
| 		m.Authoritative = true
 | |
| 		m.Rcode = dns.RcodeSuccess
 | |
| 	}
 | |
| 	return m, nil
 | |
| }
 |