From a2fc07f45ae4442f081fdb2cff50c6cd9810a0b5 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Tue, 25 Aug 2015 09:30:43 +0100 Subject: [PATCH] WIP kill otherdata for cname and dname --- sanitize.go | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/sanitize.go b/sanitize.go index 29cfd2f2..aa294305 100644 --- a/sanitize.go +++ b/sanitize.go @@ -6,12 +6,30 @@ package dns // TODO(miek): This function will be extended to also look for CNAMEs and DNAMEs. // if found, it will prune rrs from the "other data" that can exist. Example: // if it finds a: a.miek.nl. CNAME foo, all other RRs with the ownername a.miek.nl. -// will be removed. +// will be removed. When a DNAME is found all RRs with an ownername below that of +// the DNAME will be removed. func Dedup(rrs []RR) []RR { m := make(map[string]RR) keys := make([]string, 0, len(rrs)) + var cname map[nameClass]bool + var dname map[nameClass]bool for _, r := range rrs { + switch r.Header().Rrtype { + case TypeCNAME: + if cname == nil { + cname = make(map[nameClass]bool) + } + cname[nameClass{r.Header().Name, r.Header().Class}] = true + case TypeDNAME: + if dname == nil { + dname = make(map[nameClass]bool) + } + dname[nameClass{r.Header().Name, r.Header().Class}] = true + default: + if + } + key := normalizedString(r) keys = append(keys, key) if _, ok := m[key]; ok { @@ -39,6 +57,12 @@ func Dedup(rrs []RR) []RR { return rrs[:i] } +// nameClass is used to index the CNAME and DNAME maps. +type nameClass struct { + name string + class uint16 +} + // normalizedString returns a normalized string from r. The TTL // is removed and the domain name is lowercased. func normalizedString(r RR) string {