Skip to content

Commit 05a279d

Browse files
authored
feat: Handshake resolver support (#466)
Signed-off-by: Aurora Gaffney <[email protected]>
1 parent 6f0a3fd commit 05a279d

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

internal/dns/dns.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
113113
lookupRecordTypes = append(lookupRecordTypes, dns.TypeCNAME)
114114
}
115115
for _, lookupRecordType := range lookupRecordTypes {
116+
// Try Cardano
116117
records, err := state.GetState().LookupRecords(
117118
[]string{dns.Type(lookupRecordType).String()},
118119
strings.TrimSuffix(r.Question[0].Name, "."),
@@ -123,6 +124,19 @@ func handleQuery(w dns.ResponseWriter, r *dns.Msg) {
123124
)
124125
return
125126
}
127+
// Try Handshake
128+
if records == nil {
129+
records, err = state.GetState().LookupHandshakeRecords(
130+
[]string{dns.Type(lookupRecordType).String()},
131+
strings.TrimSuffix(r.Question[0].Name, "."),
132+
)
133+
if err != nil {
134+
slog.Error(
135+
fmt.Sprintf("failed to lookup records in state: %s", err),
136+
)
137+
return
138+
}
139+
}
126140
if records != nil {
127141
// Assemble response
128142
m.SetReply(r)
@@ -414,6 +428,7 @@ func findNameserversForDomain(
414428
lookupDomainName := strings.Join(queryLabels[startLabelIdx:], ".")
415429
// Convert to canonical form for consistency
416430
lookupDomainName = dns.CanonicalName(lookupDomainName)
431+
// Try Cardano
417432
nsRecords, err := state.GetState().
418433
LookupRecords([]string{"NS"}, lookupDomainName)
419434
if err != nil {
@@ -437,6 +452,30 @@ func findNameserversForDomain(
437452
}
438453
return dns.Fqdn(lookupDomainName), ret, nil
439454
}
455+
// Try Handshake
456+
nsRecords, err = state.GetState().
457+
LookupHandshakeRecords([]string{"NS"}, lookupDomainName)
458+
if err != nil {
459+
return "", nil, err
460+
}
461+
if len(nsRecords) > 0 {
462+
ret := map[string][]net.IP{}
463+
for _, nsRecord := range nsRecords {
464+
// Get matching A/AAAA records for NS entry
465+
aRecords, err := state.GetState().
466+
LookupHandshakeRecords([]string{"A", "AAAA"}, nsRecord.Rhs)
467+
if err != nil {
468+
return "", nil, err
469+
}
470+
for _, aRecord := range aRecords {
471+
ret[nsRecord.Rhs] = append(
472+
ret[nsRecord.Rhs],
473+
net.ParseIP(aRecord.Rhs),
474+
)
475+
}
476+
}
477+
return dns.Fqdn(lookupDomainName), ret, nil
478+
}
440479
}
441480

442481
return "", nil, nil

0 commit comments

Comments
 (0)