return 0, unknownPortError
}
+// ensureEndDot adds '.' at the end of name unless it is already there.
+func ensureEndDot(name string) string {
+ if name == "" {
+ return "."
+ }
+ if name[len(name)-1] == '.' {
+ return name
+ }
+ return name + "."
+}
+
func lookupCNAME(name string) (cname string, err error) {
lines, err := queryDNS(name, "cname")
if err != nil {
if !(portOk && priorityOk && weightOk) {
continue
}
- addrs = append(addrs, &SRV{f[5], uint16(port), uint16(priority), uint16(weight)})
- cname = f[0]
+ addrs = append(addrs, &SRV{ensureEndDot(f[5]), uint16(port), uint16(priority), uint16(weight)})
+ cname = ensureEndDot(f[0])
}
byPriorityWeight(addrs).sort()
return
continue
}
if pref, _, ok := dtoi(f[2], 0); ok {
- mx = append(mx, &MX{f[3], uint16(pref)})
+ mx = append(mx, &MX{ensureEndDot(f[3]), uint16(pref)})
}
}
byPref(mx).sort()
if len(f) < 3 {
continue
}
- ns = append(ns, &NS{f[2]})
+ ns = append(ns, &NS{ensureEndDot(f[2])})
}
return
}
}
for _, line := range lines {
if i := byteIndex(line, '\t'); i >= 0 {
- txt = append(txt, line[i+1:])
+ txt = append(txt, ensureEndDot(line[i+1:]))
}
}
return
if len(f) < 3 {
continue
}
- name = append(name, f[2])
+ name = append(name, ensureEndDot(f[2]))
}
return
}