From 62e84785b6ffec04a39cf611d7eaff21f2532195 Mon Sep 17 00:00:00 2001 From: Thijs Terlouw Date: Wed, 21 Aug 2013 15:23:12 +0200 Subject: [PATCH] proper resolv.conf parsing --- utils/utils.go | 22 +++++++++++++++++++--- utils/utils_test.go | 10 ++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/utils/utils.go b/utils/utils.go index 6a5beb8e48..a8ed1deebc 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -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 diff --git a/utils/utils_test.go b/utils/utils_test.go index 1030b2902a..cdf9c87073 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -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