Skip to content

Commit 0de568a

Browse files
committed
pan: Make used DNS resolver explicit
1 parent 41faacf commit 0de568a

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

pkg/pan/dns_txt.go

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,21 @@ import (
2222
"strings"
2323
)
2424

25-
type dnsResolver struct{}
25+
type dnsResolver struct {
26+
res dnsTXTResolver
27+
}
28+
29+
type dnsTXTResolver interface {
30+
LookupTXT(context.Context, string) ([]string, error)
31+
}
2632

2733
var _ resolver = &dnsResolver{}
2834

35+
const scionAddrTXTTag = "scion="
36+
2937
// Resolve the name via DNS to return one scionAddr or an error.
3038
func (d *dnsResolver) Resolve(ctx context.Context, name string) (saddr scionAddr, err error) {
31-
addresses, err := queryTXTRecord(ctx, name)
39+
addresses, err := d.queryTXTRecord(ctx, name)
3240
if err != nil {
3341
return scionAddr{}, err
3442
}
@@ -44,12 +52,14 @@ func (d *dnsResolver) Resolve(ctx context.Context, name string) (saddr scionAddr
4452

4553
// queryTXTRecord queries the DNS for DNS TXT record(s) specifying the SCION address(es) for host.
4654
// Returns either at least one address, or else an error, of type HostNotFoundError if no matching record was found.
47-
func queryTXTRecord(ctx context.Context, host string) (addresses []string, err error) {
55+
func (d *dnsResolver) queryTXTRecord(ctx context.Context, host string) (addresses []string, err error) {
56+
if d.res == nil {
57+
return addresses, fmt.Errorf("invalid DNS resolver: %v", d.res)
58+
}
4859
if !strings.HasSuffix(host, ".") {
4960
host += "."
5061
}
51-
resolver := net.Resolver{}
52-
txtRecords, err := resolver.LookupTXT(ctx, host)
62+
txtRecords, err := d.res.LookupTXT(ctx, host)
5363
var errDNSError *net.DNSError
5464
if errors.As(err, &errDNSError) {
5565
if errDNSError.IsNotFound {
@@ -60,8 +70,8 @@ func queryTXTRecord(ctx context.Context, host string) (addresses []string, err e
6070
return addresses, err
6171
}
6272
for _, txt := range txtRecords {
63-
if strings.HasPrefix(txt, "scion=") {
64-
addresses = append(addresses, strings.TrimPrefix(txt, "scion="))
73+
if strings.HasPrefix(txt, scionAddrTXTTag) {
74+
addresses = append(addresses, strings.TrimPrefix(txt, scionAddrTXTTag))
6575
}
6676
}
6777
if len(addresses) == 0 {

pkg/pan/hosts.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var (
2626
resolveEtcHosts resolver = &hostsfileResolver{"/etc/hosts"}
2727
resolveEtcScionHosts resolver = &hostsfileResolver{"/etc/scion/hosts"}
2828
resolveRains resolver = nil
29-
resolveDNSTxt resolver = &dnsResolver{}
29+
resolveDNSTxt resolver = &dnsResolver{net.DefaultResolver}
3030
)
3131

3232
// resolveUDPAddrAt parses the address and resolves the hostname.

0 commit comments

Comments
 (0)