Fix positive replies
This commit is contained in:
parent
547a4ab2a8
commit
4be4d92ccb
3 changed files with 10 additions and 8 deletions
|
@ -51,6 +51,7 @@ var dnssecTestCases = []coretest.Case{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
// NoData
|
||||||
Qname: "a.miek.nl.", Qtype: dns.TypeSRV, Do: true,
|
Qname: "a.miek.nl.", Qtype: dns.TypeSRV, Do: true,
|
||||||
Ns: []dns.RR{
|
Ns: []dns.RR{
|
||||||
coretest.NSEC("a.miek.nl. 14400 IN NSEC archive.miek.nl. A AAAA RRSIG NSEC"),
|
coretest.NSEC("a.miek.nl. 14400 IN NSEC archive.miek.nl. A AAAA RRSIG NSEC"),
|
||||||
|
@ -60,6 +61,7 @@ var dnssecTestCases = []coretest.Case{
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
/* HAHA nsec... shit.
|
/* HAHA nsec... shit.
|
||||||
|
// disprove *.miek.nl and that b.miek.nl does not exist
|
||||||
{
|
{
|
||||||
Qname: "b.miek.nl.", Qtype: dns.TypeA,
|
Qname: "b.miek.nl.", Qtype: dns.TypeA,
|
||||||
Rcode: dns.RcodeNameError,
|
Rcode: dns.RcodeNameError,
|
||||||
|
|
|
@ -39,7 +39,7 @@ func (f File) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i
|
||||||
return xfr.ServeDNS(ctx, w, r)
|
return xfr.ServeDNS(ctx, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
an, ns, extra, result := z.Lookup(qname, state.QType(), state.Do())
|
answer, ns, extra, result := z.Lookup(qname, state.QType(), state.Do())
|
||||||
|
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(r)
|
m.SetReply(r)
|
||||||
|
@ -47,10 +47,9 @@ func (f File) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i
|
||||||
|
|
||||||
switch result {
|
switch result {
|
||||||
case Success:
|
case Success:
|
||||||
// case?
|
m.Answer = answer
|
||||||
m.Answer = an
|
m.Ns = ns
|
||||||
m.Extra = extra
|
m.Extra = extra
|
||||||
// Ns section
|
|
||||||
case NameError:
|
case NameError:
|
||||||
m.Ns = ns
|
m.Ns = ns
|
||||||
m.Rcode = dns.RcodeNameError
|
m.Rcode = dns.RcodeNameError
|
||||||
|
|
|
@ -25,13 +25,14 @@ func (z *Zone) Lookup(qname string, qtype uint16, do bool) ([]dns.RR, []dns.RR,
|
||||||
} else {
|
} else {
|
||||||
rr = mk()
|
rr = mk()
|
||||||
}
|
}
|
||||||
rr.Header().Rrtype = qtype // this is pretty nonobvious
|
|
||||||
|
|
||||||
if qtype == dns.TypeSOA {
|
if qtype == dns.TypeSOA {
|
||||||
return z.lookupSOA(do)
|
return z.lookupSOA(do)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Misuse rr to be a question.
|
||||||
|
rr.Header().Rrtype = qtype
|
||||||
rr.Header().Name = qname
|
rr.Header().Name = qname
|
||||||
|
|
||||||
elem := z.Tree.Get(rr)
|
elem := z.Tree.Get(rr)
|
||||||
if elem == nil {
|
if elem == nil {
|
||||||
return z.nameError(elem, rr, do)
|
return z.nameError(elem, rr, do)
|
||||||
|
@ -47,6 +48,7 @@ func (z *Zone) Lookup(qname string, qtype uint16, do bool) ([]dns.RR, []dns.RR,
|
||||||
if len(rrs) == 0 {
|
if len(rrs) == 0 {
|
||||||
return z.noData(elem, do)
|
return z.noData(elem, do)
|
||||||
}
|
}
|
||||||
|
|
||||||
if do {
|
if do {
|
||||||
sigs := elem.Types(dns.TypeRRSIG)
|
sigs := elem.Types(dns.TypeRRSIG)
|
||||||
sigs = signatureForSubType(sigs, qtype)
|
sigs = signatureForSubType(sigs, qtype)
|
||||||
|
@ -69,7 +71,7 @@ func (z *Zone) nameError(elem *tree.Elem, rr dns.RR, do bool) ([]dns.RR, []dns.R
|
||||||
return nil, ret, nil, Success
|
return nil, ret, nil, Success
|
||||||
}
|
}
|
||||||
// NSECs!
|
// NSECs!
|
||||||
return nil, []dns.RR{z.SOA}, nil, Success
|
return nil, []dns.RR{z.SOA}, nil, NameError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (z *Zone) lookupSOA(do bool) ([]dns.RR, []dns.RR, []dns.RR, Result) {
|
func (z *Zone) lookupSOA(do bool) ([]dns.RR, []dns.RR, []dns.RR, Result) {
|
||||||
|
@ -94,7 +96,6 @@ func (z *Zone) lookupNSEC(elem *tree.Elem, do bool) []dns.RR {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nsec
|
return nsec
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (z *Zone) lookupCNAME(rrs []dns.RR, rr dns.RR, do bool) ([]dns.RR, []dns.RR, []dns.RR, Result) {
|
func (z *Zone) lookupCNAME(rrs []dns.RR, rr dns.RR, do bool) ([]dns.RR, []dns.RR, []dns.RR, Result) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue