Skip to content

Commit 64e3a6f

Browse files
committed
Make sure server has port attached
Also make sure that we check for search domains Revert the TCP lookup change and fallback to UDP Signed-off-by: Goutham Veeramachaneni <[email protected]>
1 parent 93fc127 commit 64e3a6f

File tree

1 file changed

+34
-29
lines changed

1 file changed

+34
-29
lines changed

pkg/util/dns.go

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,61 +2,66 @@ package util
22

33
import (
44
"fmt"
5+
"net"
56

67
"github.com/go-kit/kit/log/level"
78
"github.com/miekg/dns"
89
)
910

1011
const defaultResolvConf = "/etc/resolv.conf"
1112

12-
// GetDefaultDNSServers returns the DNS servers from the default
13-
// resolver configuration.
14-
func GetDefaultDNSServers() ([]string, error) {
15-
conf, err := dns.ClientConfigFromFile(defaultResolvConf)
16-
if err != nil {
17-
return nil, err
13+
func getDefaultDNSServers(conf *dns.ClientConfig) []string {
14+
servers := make([]string, 0, len(conf.Servers))
15+
for _, server := range conf.Servers {
16+
servers = append(servers, net.JoinHostPort(server, conf.Port))
1817
}
19-
return conf.Servers, nil
18+
19+
return servers
2020
}
2121

2222
// LookupSRV tries to resolve an SRV query of the given service, proto and domain name.
2323
// proto can be 'tcp' or udp'.
2424
// The query will be of the form _service._proto.name.
2525
func LookupSRV(service, proto, name string) ([]*dns.SRV, error) {
26-
dnsServers, err := GetDefaultDNSServers()
26+
conf, err := dns.ClientConfigFromFile(defaultResolvConf)
2727
if err != nil {
2828
return nil, err
2929
}
3030

31-
msg := &dns.Msg{}
31+
dnsServers := getDefaultDNSServers(conf)
32+
3233
name = "_" + service + "._" + proto + "." + name
33-
msg.SetQuestion(dns.Fqdn(name), dns.TypeSRV)
34+
names := conf.NameList(name)
3435

35-
client := dns.Client{
36-
Net: "tcp",
37-
}
38-
var result []*dns.SRV
3936
dnsResolved := false
40-
for _, serverAddr := range dnsServers {
41-
resMsg, _, err := client.Exchange(msg, serverAddr)
42-
if err != nil {
43-
level.Warn(Logger).Log("msg", "DNS exchange failed", "err", err)
44-
continue
45-
}
46-
dnsResolved = true
47-
for _, ans := range resMsg.Answer {
48-
if srvRecord, ok := ans.(*dns.SRV); ok {
49-
result = append(result, srvRecord)
37+
client := dns.Client{}
38+
39+
for _, name := range names {
40+
msg := &dns.Msg{}
41+
msg.SetQuestion(dns.Fqdn(name), dns.TypeSRV)
42+
43+
var result []*dns.SRV
44+
for _, serverAddr := range dnsServers {
45+
resMsg, _, err := client.Exchange(msg, serverAddr)
46+
if err != nil {
47+
level.Warn(Logger).Log("msg", "DNS exchange failed", "err", err)
48+
continue
49+
}
50+
dnsResolved = true
51+
for _, ans := range resMsg.Answer {
52+
if srvRecord, ok := ans.(*dns.SRV); ok {
53+
result = append(result, srvRecord)
54+
}
55+
}
56+
if len(result) > 0 {
57+
return result, nil
5058
}
51-
}
52-
if len(result) > 0 {
53-
return result, nil
5459
}
5560
}
5661

5762
if !dnsResolved {
58-
return result, fmt.Errorf("Couldn't resolve %s: No server responded", name)
63+
return nil, fmt.Errorf("Couldn't resolve %s: No server responded", name)
5964
}
6065

61-
return result, nil
66+
return nil, nil
6267
}

0 commit comments

Comments
 (0)