Type.extra (#1538)

* Revert "pkg/typify: empty messages are OtherError (#1531)"

This reverts commit fc1d73ffa9.

* plugin/cache: add failsafeTTL

If we can not see what TTL we should put on a message to be cached, use
5 seconds as minimal TTL. We used to apply the maximum TTL to these
  messages.
This commit is contained in:
Miek Gieben 2018-02-17 19:45:52 +01:00 committed by GitHub
parent 9719a47c1b
commit 8cce06cba1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 9 additions and 37 deletions

View file

@ -171,7 +171,7 @@ func (w *ResponseWriter) set(m *dns.Msg, key int, mt response.Type, duration tim
case response.OtherError: case response.OtherError:
// don't cache these // don't cache these
default: default:
log.Printf("[WARNING] Caching called with unknown typification: %d", mt) log.Printf("[WARNING] Caching called with unknown classification: %d", mt)
} }
} }
@ -186,8 +186,9 @@ func (w *ResponseWriter) Write(buf []byte) (int, error) {
} }
const ( const (
maxTTL = 1 * time.Hour maxTTL = 1 * time.Hour
maxNTTL = 30 * time.Minute maxNTTL = 30 * time.Minute
failSafeTTL = 5 * time.Second
defaultCap = 10000 // default capacity of the cache. defaultCap = 10000 // default capacity of the cache.

View file

@ -22,7 +22,6 @@ type cacheTestCase struct {
Authoritative bool Authoritative bool
RecursionAvailable bool RecursionAvailable bool
Truncated bool Truncated bool
Response bool
shouldCache bool shouldCache bool
} }
@ -112,15 +111,6 @@ var cacheTestCases = []cacheTestCase{
}, },
shouldCache: false, shouldCache: false,
}, },
{
// Response with only something in the additional, this should not be cached.
Response: true,
in: test.Case{
Qname: "example.org.", Qtype: dns.TypeMX,
Extra: []dns.RR{test.MX("example.org. 1800 IN MX 1 mx.example.org.")},
},
shouldCache: false,
},
{ {
RecursionAvailable: true, Authoritative: true, RecursionAvailable: true, Authoritative: true,
Case: test.Case{ Case: test.Case{
@ -150,7 +140,6 @@ func cacheMsg(m *dns.Msg, tc cacheTestCase) *dns.Msg {
m.AuthenticatedData = tc.AuthenticatedData m.AuthenticatedData = tc.AuthenticatedData
m.Authoritative = tc.Authoritative m.Authoritative = tc.Authoritative
m.Rcode = tc.Rcode m.Rcode = tc.Rcode
m.Response = tc.Response
m.Truncated = tc.Truncated m.Truncated = tc.Truncated
m.Answer = tc.in.Answer m.Answer = tc.in.Answer
m.Ns = tc.in.Ns m.Ns = tc.in.Ns

View file

@ -95,6 +95,11 @@ func minMsgTTL(m *dns.Msg, mt response.Type) time.Duration {
return 0 return 0
} }
// No data to examine, return a short ttl as a fail safe.
if len(m.Answer)+len(m.Ns) == 0 {
return failSafeTTL
}
minTTL := maxTTL minTTL := maxTTL
for _, r := range append(m.Answer, m.Ns...) { for _, r := range append(m.Answer, m.Ns...) {
switch mt { switch mt {

View file

@ -55,7 +55,6 @@ func Typify(m *dns.Msg, t time.Time) (Type, *dns.OPT) {
if m == nil { if m == nil {
return OtherError, nil return OtherError, nil
} }
opt := m.IsEdns0() opt := m.IsEdns0()
do := false do := false
if opt != nil { if opt != nil {
@ -77,11 +76,6 @@ func Typify(m *dns.Msg, t time.Time) (Type, *dns.OPT) {
} }
} }
if m.Response && len(m.Answer) == 0 && len(m.Ns) == 0 {
// Response with nothing in it, maybe stuff in the additional section, this is not useful.
return OtherError, opt
}
// If our message contains any expired sigs and we care about that, we should return expired // If our message contains any expired sigs and we care about that, we should return expired
if do { if do {
if expired := typifyExpired(m, t); expired { if expired := typifyExpired(m, t); expired {

View file

@ -26,23 +26,6 @@ func TestTypifyDelegation(t *testing.T) {
} }
} }
func TestTypifyEmptyMessage(t *testing.T) {
m := new(dns.Msg)
// Normal question, with response = false
m.SetQuestion("example.org.", dns.TypeAAAA)
mt, _ := Typify(m, time.Now().UTC())
if mt != NoError {
t.Errorf("message is wrongly typified, expected NoError, got %s", mt)
}
// In case of a Reponse = true, this weird.
m.Response = true
mt, _ = Typify(m, time.Now().UTC())
if mt != OtherError {
t.Errorf("message is wrongly typified, expected OtherError, got %s", mt)
}
}
func TestTypifyRRSIG(t *testing.T) { func TestTypifyRRSIG(t *testing.T) {
now, _ := time.Parse(time.UnixDate, "Fri Apr 21 10:51:21 BST 2017") now, _ := time.Parse(time.UnixDate, "Fri Apr 21 10:51:21 BST 2017")
utc := now.UTC() utc := now.UTC()