Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Merge pull request #97808 from aojea/miekdns
remove e2e miekg/dns dependency
- Loading branch information
Showing
with
141 additions
and 4 deletions.
@@ -0,0 +1,28 @@ | ||
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") | ||
|
||
go_library( | ||
name = "go_default_library", | ||
srcs = ["dnsclient.go"], | ||
importpath = "k8s.io/kubernetes/third_party/forked/golang/net", | ||
visibility = ["//visibility:public"], | ||
) | ||
|
||
filegroup( | ||
name = "package-srcs", | ||
srcs = glob(["**"]), | ||
tags = ["automanaged"], | ||
visibility = ["//visibility:private"], | ||
) | ||
|
||
filegroup( | ||
name = "all-srcs", | ||
srcs = [":package-srcs"], | ||
tags = ["automanaged"], | ||
visibility = ["//visibility:public"], | ||
) | ||
|
||
go_test( | ||
name = "go_default_test", | ||
srcs = ["dnsclient_test.go"], | ||
embed = [":go_default_library"], | ||
) |
@@ -0,0 +1,58 @@ | ||
// Copyright 2009 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// This package is copied from Go library net. | ||
// https://golang.org/src/net/dnsclient.go | ||
// The original private function reverseaddr | ||
// is exported as public function. | ||
|
||
package net | ||
|
||
import "net" | ||
|
||
// Reverseaddr returns the in-addr.arpa. or ip6.arpa. hostname of the IP | ||
// address addr suitable for rDNS (PTR) record lookup or an error if it fails | ||
// to parse the IP address. | ||
func Reverseaddr(addr string) (arpa string, err error) { | ||
ip := net.ParseIP(addr) | ||
if ip == nil { | ||
return "", &net.DNSError{Err: "unrecognized address", Name: addr} | ||
} | ||
if ip.To4() != nil { | ||
return uitoa(uint(ip[15])) + "." + uitoa(uint(ip[14])) + "." + uitoa(uint(ip[13])) + "." + uitoa(uint(ip[12])) + ".in-addr.arpa.", nil | ||
} | ||
// Must be IPv6 | ||
buf := make([]byte, 0, len(ip)*4+len("ip6.arpa.")) | ||
// Add it, in reverse, to the buffer | ||
for i := len(ip) - 1; i >= 0; i-- { | ||
v := ip[i] | ||
buf = append(buf, hexDigit[v&0xF], | ||
'.', | ||
hexDigit[v>>4], | ||
'.') | ||
} | ||
// Append "ip6.arpa." and return (buf already has the final .) | ||
buf = append(buf, "ip6.arpa."...) | ||
return string(buf), nil | ||
} | ||
|
||
// Convert unsigned integer to decimal string. | ||
func uitoa(val uint) string { | ||
if val == 0 { // avoid string allocation | ||
return "0" | ||
} | ||
var buf [20]byte // big enough for 64bit value base 10 | ||
i := len(buf) - 1 | ||
for val >= 10 { | ||
q := val / 10 | ||
buf[i] = byte('0' + val - q*10) | ||
i-- | ||
val = q | ||
} | ||
// val < 10 | ||
buf[i] = byte('0' + val) | ||
return string(buf[i:]) | ||
} | ||
|
||
const hexDigit = "0123456789abcdef" |
@@ -0,0 +1,51 @@ | ||
// Copyright 2009 The Go Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style | ||
// license that can be found in the LICENSE file. | ||
|
||
// This package is copied from Go library net. | ||
// https://golang.org/src/net/dnsclient.go | ||
// The original private function reverseaddr | ||
// is exported as public function. | ||
|
||
package net | ||
|
||
import ( | ||
"net" | ||
"testing" | ||
) | ||
|
||
func TestReverseaddr(t *testing.T) { | ||
var revAddrTests = []struct { | ||
Addr string | ||
Reverse string | ||
ErrPrefix string | ||
}{ | ||
{"1.2.3.4", "4.3.2.1.in-addr.arpa.", ""}, | ||
{"245.110.36.114", "114.36.110.245.in-addr.arpa.", ""}, | ||
{"::ffff:12.34.56.78", "78.56.34.12.in-addr.arpa.", ""}, | ||
{"::1", "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.", ""}, | ||
{"1::", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.ip6.arpa.", ""}, | ||
{"1234:567::89a:bcde", "e.d.c.b.a.9.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, | ||
{"1234:567:fefe:bcbc:adad:9e4a:89a:bcde", "e.d.c.b.a.9.8.0.a.4.e.9.d.a.d.a.c.b.c.b.e.f.e.f.7.6.5.0.4.3.2.1.ip6.arpa.", ""}, | ||
{"1.2.3", "", "unrecognized address"}, | ||
{"1.2.3.4.5", "", "unrecognized address"}, | ||
{"1234:567:bcbca::89a:bcde", "", "unrecognized address"}, | ||
{"1234:567::bcbc:adad::89a:bcde", "", "unrecognized address"}, | ||
} | ||
for i, tt := range revAddrTests { | ||
a, err := Reverseaddr(tt.Addr) | ||
if len(tt.ErrPrefix) > 0 && err == nil { | ||
t.Errorf("#%d: expected %q, got <nil> (error)", i, tt.ErrPrefix) | ||
continue | ||
} | ||
if len(tt.ErrPrefix) == 0 && err != nil { | ||
t.Errorf("#%d: expected <nil>, got %q (error)", i, err) | ||
} | ||
if err != nil && err.(*net.DNSError).Err != tt.ErrPrefix { | ||
t.Errorf("#%d: expected %q, got %q (mismatched error)", i, tt.ErrPrefix, err.(*net.DNSError).Err) | ||
} | ||
if a != tt.Reverse { | ||
t.Errorf("#%d: expected %q, got %q (reverse address)", i, tt.Reverse, a) | ||
} | ||
} | ||
} |