Skip to content

Commit d1dbfe7

Browse files
ignoramousCopilot
andcommitted
dnsx/mdns: track cnames
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent 3158bc1 commit d1dbfe7

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

intra/dns53/mdns.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,9 +424,11 @@ loop:
424424
xxlans := append(msg.Answer, msg.Extra...)
425425
for _, ans := range xxlans {
426426
ansname, aerr := xdns.AName(ans)
427-
// expect answers only for the service name client queried for
428-
if (aerr != nil) || (c.oneshot && !strings.Contains(ansname, qctx.svc)) {
429-
log.V("mdns: listen: ignoring %s ans for %s svc; err? %v", ansname, qctx.svc, aerr)
427+
tracked := c.isTracked(ansname)
428+
// expect answers only for the service name client queried for, or
429+
// an already tracked alias (ex: cname targets)
430+
if (aerr != nil) || (c.oneshot && !strings.Contains(ansname, qctx.svc) && !tracked) {
431+
log.V("mdns: listen: ignoring %s ans for %s svc; tracked? %t; err? %v", ansname, qctx.svc, tracked, aerr)
430432
continue
431433
}
432434
log.D("mdns: listen: processing %s ans for %s", ansname, qname)
@@ -446,6 +448,10 @@ loop:
446448
disco = c.track(rr.Hdr.Name)
447449
disco.txt = rr.Txt
448450
// todo: r.ans = ans ?
451+
case *dns.CNAME:
452+
disco = c.track(rr.Hdr.Name)
453+
disco.target = rr.Target
454+
c.alias(rr.Hdr.Name, rr.Target)
449455
case *dns.A:
450456
disco = c.track(rr.Hdr.Name)
451457
// todo: append to ip4?
@@ -595,6 +601,13 @@ func (c *client) track(name string) *dnssdanswer {
595601
return c.trackLocked(name)
596602
}
597603

604+
func (c *client) isTracked(name string) bool {
605+
c.tmu.RLock()
606+
defer c.tmu.RUnlock()
607+
_, ok := c.tracker[name]
608+
return ok
609+
}
610+
598611
// alias sets up mapping between two tracked entries;
599612
// src and dst are NOT normalized.
600613
func (c *client) alias(src, dst string) {

0 commit comments

Comments
 (0)