proper resolv.conf parsing

This commit is contained in:
Thijs Terlouw 2013-08-21 15:23:12 +02:00
parent d627ff9697
commit 62e84785b6
2 changed files with 29 additions and 3 deletions

View File

@ -772,21 +772,37 @@ func GetResolvConf() ([]byte, error) {
// CheckLocalDns looks into the /etc/resolv.conf,
// it returns true if there is a local nameserver or if there is no nameserver.
func CheckLocalDns(resolvConf []byte) bool {
if !bytes.Contains(resolvConf, []byte("nameserver")) {
var parsedResolvConf = ParseResolvConf(resolvConf)
if !bytes.Contains(parsedResolvConf, []byte("nameserver")) {
return true
}
for _, ip := range [][]byte{
[]byte("127.0.0.1"),
[]byte("127.0.1.1"),
} {
if bytes.Contains(resolvConf, ip) {
if bytes.Contains(parsedResolvConf, ip) {
return true
}
}
return false
}
// ParseResolvConf parses the resolv.conf file into lines and strips away comments.
func ParseResolvConf(resolvConf []byte) []byte {
lines := bytes.Split(resolvConf, []byte("\n"))
var noCommentsResolvConf []byte
for _, currentLine := range lines {
var cleanLine = bytes.TrimLeft(currentLine, " \t")
var commentIndex = bytes.Index(cleanLine, []byte("#"))
if ( commentIndex == -1 ) {
noCommentsResolvConf = append(noCommentsResolvConf, cleanLine...)
} else {
noCommentsResolvConf = append(noCommentsResolvConf, cleanLine[:commentIndex]...)
}
}
return noCommentsResolvConf
}
func ParseHost(host string, port int, addr string) string {
if strings.HasPrefix(addr, "unix://") {
return addr

View File

@ -323,6 +323,16 @@ func TestCheckLocalDns(t *testing.T) {
nameserver 10.0.2.3
search dotcloud.net`: false,
`# Dynamic
#nameserver 127.0.0.1
nameserver 10.0.2.3
search dotcloud.net`: false,
`# Dynamic
nameserver 10.0.2.3 #not used 127.0.1.1
search dotcloud.net`: false,
`# Dynamic
#nameserver 10.0.2.3
#search dotcloud.net`: true,
`# Dynamic
nameserver 127.0.0.1
search dotcloud.net`: true,
`# Dynamic