Merge pull request #32 from nutsteam/master

1. Handle multiple domain records in one line
2. Support non-standard domain, e.g. localhost
This commit is contained in:
kenshin 2017-07-10 19:49:30 +08:00 committed by GitHub
commit e742e5dce9
1 changed files with 14 additions and 7 deletions

View File

@ -205,29 +205,36 @@ func (f *FileHosts) Refresh() {
line := scanner.Text()
line = strings.TrimSpace(line)
line = strings.Replace(line, "\t", " ", -1)
if strings.HasPrefix(line, "#") || line == "" {
continue
}
sli := strings.Split(line, " ")
if len(sli) == 1 {
sli = strings.Split(line, "\t")
}
if len(sli) < 2 {
continue
}
domain := sli[len(sli)-1]
ip := sli[0]
if !f.isDomain(domain) || !f.isIP(ip) {
if !f.isIP(ip) {
continue
}
f.hosts[strings.ToLower(domain)] = ip
// Would have multiple columns of domain in line.
// Such as "127.0.0.1 localhost localhost.domain" on linux.
// The domains may not strict standard, like "local" so don't check with f.isDomain(domain).
for i := 1; i <= len(sli)-1; i++ {
domain := strings.TrimSpace(sli[i])
if domain == "" {
continue
}
f.hosts[strings.ToLower(domain)] = ip
}
}
logger.Debug("update hosts records from %s", f.file)
logger.Debug("update hosts records from %s, total %d records.", f.file, len(f.hosts))
}
func (f *FileHosts) clear() {