Browse Source

Fix GetNameServerAsCIDR

- the function is broken as it does not strip the
  zone id from an IPv6 nameserver address, and it
  returns the IPv6 address with /32

Signed-off-by: Alessandro Boch <aboch@docker.com>
Alessandro Boch 8 years ago
parent
commit
53c84ac767
1 changed files with 8 additions and 1 deletions
  1. 8 1
      libnetwork/resolvconf/resolvconf.go

+ 8 - 1
libnetwork/resolvconf/resolvconf.go

@@ -178,7 +178,14 @@ func GetNameservers(resolvConf []byte, kind int) []string {
 func GetNameserversAsCIDR(resolvConf []byte) []string {
 	nameservers := []string{}
 	for _, nameserver := range GetNameservers(resolvConf, types.IP) {
-		nameservers = append(nameservers, nameserver+"/32")
+		var address string
+		// If IPv6, strip zone if present
+		if strings.Contains(nameserver, ":") {
+			address = strings.Split(nameserver, "%")[0] + "/128"
+		} else {
+			address = nameserver + "/32"
+		}
+		nameservers = append(nameservers, address)
 	}
 	return nameservers
 }