Skip to content

Commit 82fb373

Browse files
authored
Merge pull request #1393 from sanimej/2782
Relax SRV name validation and fix external SRV query handling
2 parents 8b0834d + 321f0bc commit 82fb373

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

libnetwork_internal_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -411,10 +411,10 @@ func TestSRVServiceQuery(t *testing.T) {
411411
t.Fatal(err)
412412
}
413413

414-
// Try resolving a service name with invalid protocol, should fail..
415-
_, _, err = ep.Info().Sandbox().ResolveService("_http._icmp.web.swarm")
416-
if err == nil {
417-
t.Fatal(err)
414+
// Service name with invalid protocol name. Should fail without error
415+
_, ip, err = ep.Info().Sandbox().ResolveService("_http._icmp.web.swarm")
416+
if len(ip) != 0 {
417+
t.Fatal("Valid response for invalid service name")
418418
}
419419
}
420420

resolver.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,9 @@ func (r *resolver) handleSRVQuery(svc string, query *dns.Msg) (*dns.Msg, error)
255255
if err != nil {
256256
return nil, err
257257
}
258+
if len(srv) == 0 {
259+
return nil, nil
260+
}
258261
if len(srv) != len(ip) {
259262
return nil, fmt.Errorf("invalid reply for SRV query %s", svc)
260263
}

sandbox.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -444,16 +444,16 @@ func (sb *sandbox) ResolveService(name string) ([]*net.SRV, []net.IP, error) {
444444

445445
log.Debugf("Service name To resolve: %v", name)
446446

447+
// There are DNS implementaions that allow SRV queries for names not in
448+
// the format defined by RFC 2782. Hence specific validations checks are
449+
// not done
447450
parts := strings.Split(name, ".")
448451
if len(parts) < 3 {
449-
return nil, nil, fmt.Errorf("invalid service name, %s", name)
452+
return nil, nil, nil
450453
}
451454

452455
portName := parts[0]
453456
proto := parts[1]
454-
if proto != "_tcp" && proto != "_udp" {
455-
return nil, nil, fmt.Errorf("invalid protocol in service, %s", name)
456-
}
457457
svcName := strings.Join(parts[2:], ".")
458458

459459
for _, ep := range sb.getConnectedEndpoints() {

0 commit comments

Comments
 (0)