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 := scanner.Text()
line = strings.TrimSpace(line) line = strings.TrimSpace(line)
line = strings.Replace(line, "\t", " ", -1)
if strings.HasPrefix(line, "#") || line == "" { if strings.HasPrefix(line, "#") || line == "" {
continue continue
} }
sli := strings.Split(line, " ") sli := strings.Split(line, " ")
if len(sli) == 1 {
sli = strings.Split(line, "\t")
}
if len(sli) < 2 { if len(sli) < 2 {
continue continue
} }
domain := sli[len(sli)-1]
ip := sli[0] ip := sli[0]
if !f.isDomain(domain) || !f.isIP(ip) { if !f.isIP(ip) {
continue
}
// 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 continue
} }
f.hosts[strings.ToLower(domain)] = ip 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() { func (f *FileHosts) clear() {