]> go.fuhry.dev Git - runtime.git/commitdiff
coredns_plugin: wildcard support for DNS records
authorDan Fuhry <dan@fuhry.com>
Sun, 30 Mar 2025 02:06:15 +0000 (22:06 -0400)
committerDan Fuhry <dan@fuhry.com>
Sun, 30 Mar 2025 02:06:15 +0000 (22:06 -0400)
machines/coredns_plugin/registry.go
machines/coredns_plugin/registry_store.go

index 43c4d19a725bef03cde22a5477d597c483a9416b..0b6b6084193ec9c575d25d78ce2924f469443700 100644 (file)
@@ -292,7 +292,16 @@ func (r *registry) LookupRecord(ques dns.Question) (int, []dns.RR) {
 
                records, ok := r.store.Records[domain.ID()][key]
                if !ok {
-                       continue
+                       for _, wc := range key.Wildcards() {
+                               records, ok = r.store.Records[domain.ID()][wc]
+                               if ok {
+                                       r.log.V(2).Debugf("  query for %q matched on wildcard candidate %s", key, wc)
+                                       break
+                               }
+                       }
+                       if !ok {
+                               continue
+                       }
                }
 
                answers := make([]dns.RR, 0)
index 2fbece85e20496775ab3f1950d0185ffd6321cfb..8958365eb5fb991d3962f68eb3e25270702a25ad 100644 (file)
@@ -32,6 +32,16 @@ type registryStore struct {
 
 type recordKey string
 
+func (rk recordKey) Wildcards() []recordKey {
+       parts := strings.Split(string(rk), ".")
+       wildcards := make([]recordKey, len(parts))
+       for i, _ := range parts {
+               parts[i] = "*"
+               wildcards = append(wildcards, recordKey(strings.Join(parts[i:], ".")))
+       }
+       return wildcards
+}
+
 var machinesRegistryStorePath string
 
 func init() {