Add wildcard-aware TXT match helper
This commit is contained in:
parent
b417373f5b
commit
b4b1e5c930
2 changed files with 38 additions and 3 deletions
20
service.go
20
service.go
|
|
@ -868,7 +868,7 @@ func (service *Service) ResolveTXT(name string) ([]string, bool) {
|
|||
if service == nil {
|
||||
return nil, false
|
||||
}
|
||||
result, ok := service.ResolveTXTRecords(name)
|
||||
result, ok, _ := service.ResolveTXTWithMatch(name)
|
||||
if !ok {
|
||||
return nil, false
|
||||
}
|
||||
|
|
@ -882,13 +882,27 @@ func (service *Service) ResolveTXTRecords(name string) (ResolveTXTResult, bool)
|
|||
if service == nil {
|
||||
return ResolveTXTResult{}, false
|
||||
}
|
||||
record, ok := service.findRecord(name)
|
||||
result, ok, _ := service.ResolveTXTWithMatch(name)
|
||||
if !ok {
|
||||
return ResolveTXTResult{}, false
|
||||
}
|
||||
return result, true
|
||||
}
|
||||
|
||||
// ResolveTXTWithMatch returns TXT values and whether the match used a wildcard.
|
||||
//
|
||||
// result, ok, usedWildcard := service.ResolveTXTWithMatch("node1.gateway.charon.lthn")
|
||||
func (service *Service) ResolveTXTWithMatch(name string) (ResolveTXTResult, bool, bool) {
|
||||
if service == nil {
|
||||
return ResolveTXTResult{}, false, false
|
||||
}
|
||||
record, ok, usedWildcard := service.findRecordWithMatch(name)
|
||||
if !ok {
|
||||
return ResolveTXTResult{}, false, false
|
||||
}
|
||||
return ResolveTXTResult{
|
||||
TXT: cloneStrings(record.TXT),
|
||||
}, true
|
||||
}, true, usedWildcard
|
||||
}
|
||||
|
||||
// DiscoverWithHSD refreshes DNS records for each alias by calling HSD.
|
||||
|
|
|
|||
|
|
@ -265,6 +265,27 @@ func TestServiceResolveTXTUsesWildcard(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestServiceResolveTXTWithMatchReportsWildcard(t *testing.T) {
|
||||
service := NewService(ServiceOptions{
|
||||
Records: map[string]NameRecords{
|
||||
"*.gateway.charon.lthn": {
|
||||
TXT: []string{"v=lthn1 type=gateway"},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
result, ok, usedWildcard := service.ResolveTXTWithMatch("node1.gateway.charon.lthn.")
|
||||
if !ok {
|
||||
t.Fatal("expected wildcard TXT record")
|
||||
}
|
||||
if !usedWildcard {
|
||||
t.Fatal("expected wildcard TXT lookup to report usedWildcard=true")
|
||||
}
|
||||
if len(result.TXT) != 1 || result.TXT[0] != "v=lthn1 type=gateway" {
|
||||
t.Fatalf("unexpected TXT record: %#v", result.TXT)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceResolveTXTRecordsReturnsNamedField(t *testing.T) {
|
||||
service := NewService(ServiceOptions{
|
||||
Records: map[string]NameRecords{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue