Merge branch 'master' of github.com:miekg/dns
This commit is contained in:
commit
6c8dd0a445
|
@ -29,6 +29,7 @@ A not-so-up-to-date-list-that-may-be-actually-current:
|
||||||
* https://github.com/chuangbo/jianbing-dictionary-dns/tree/master/golang
|
* https://github.com/chuangbo/jianbing-dictionary-dns/tree/master/golang
|
||||||
* http://www.dns-lg.com/
|
* http://www.dns-lg.com/
|
||||||
* https://github.com/fcambus/rrda
|
* https://github.com/fcambus/rrda
|
||||||
|
* https://github.com/kenshinx/godns
|
||||||
* more?
|
* more?
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
|
71
nsecx.go
71
nsecx.go
|
@ -11,12 +11,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
_ = iota
|
|
||||||
_NSEC3_NXDOMAIN
|
|
||||||
_NSEC3_NODATA
|
|
||||||
)
|
|
||||||
|
|
||||||
type saltWireFmt struct {
|
type saltWireFmt struct {
|
||||||
Salt string `dns:"size-hex"`
|
Salt string `dns:"size-hex"`
|
||||||
}
|
}
|
||||||
|
@ -58,68 +52,3 @@ func HashName(label string, ha uint8, iter uint16, salt string) string {
|
||||||
}
|
}
|
||||||
return unpackBase32(nsec3)
|
return unpackBase32(nsec3)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implement the HashNames method of Denialer
|
|
||||||
func (rr *NSEC3) HashNames(domain string) {
|
|
||||||
rr.Header().Name = strings.ToLower(HashName(rr.Header().Name, rr.Hash, rr.Iterations, rr.Salt)) + "." + domain
|
|
||||||
rr.NextDomain = HashName(rr.NextDomain, rr.Hash, rr.Iterations, rr.Salt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Implement the Match method of Denialer
|
|
||||||
func (rr *NSEC3) Match(domain string) bool {
|
|
||||||
return strings.ToUpper(SplitDomainName(rr.Header().Name)[0]) == strings.ToUpper(HashName(domain, rr.Hash, rr.Iterations, rr.Salt))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Implement the Match method of Denialer
|
|
||||||
func (rr *NSEC) Match(domain string) bool {
|
|
||||||
return strings.ToUpper(rr.Header().Name) == strings.ToUpper(domain)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rr *NSEC3) MatchType(rrtype uint16) bool {
|
|
||||||
for _, t := range rr.TypeBitMap {
|
|
||||||
if t == rrtype {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if t > rrtype {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rr *NSEC) MatchType(rrtype uint16) bool {
|
|
||||||
for _, t := range rr.TypeBitMap {
|
|
||||||
if t == rrtype {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if t > rrtype {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cover checks if domain is covered by the NSEC3 record. Domain must be given in plain text (i.e. not hashed)
|
|
||||||
// TODO(mg): this doesn't loop around
|
|
||||||
// TODO(mg): make a CoverHashed variant?
|
|
||||||
func (rr *NSEC3) Cover(domain string) bool {
|
|
||||||
hashdom := strings.ToUpper(HashName(domain, rr.Hash, rr.Iterations, rr.Salt))
|
|
||||||
nextdom := strings.ToUpper(rr.NextDomain)
|
|
||||||
owner := strings.ToUpper(SplitDomainName(rr.Header().Name)[0]) // The hashed part
|
|
||||||
apex := strings.ToUpper(HashName(strings.Join(SplitDomainName(rr.Header().Name)[1:], "."), rr.Hash, rr.Iterations, rr.Salt)) + "." // The name of the zone
|
|
||||||
// if nextdomain equals the apex, it is considered The End. So in that case hashdom is always less then nextdomain
|
|
||||||
if hashdom > owner && nextdom == apex {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
if hashdom > owner && hashdom <= nextdom {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cover checks if domain is covered by the NSEC record. Domain must be given in plain text.
|
|
||||||
func (rr *NSEC) Cover(domain string) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue