New Upstream Release - golang-github-hashicorp-mdns
Ready changes
Summary
Merged new upstream version: 1.0.5 (was: 1.0.3).
Resulting package
Built on 2023-05-15T23:42 (took 5m48s)
The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:
apt install -t fresh-releases golang-github-hashicorp-mdns-dev
Lintian Result
Diff
diff --git a/client.go b/client.go
index c15e3ee..7d530e8 100644
--- a/client.go
+++ b/client.go
@@ -42,6 +42,8 @@ type QueryParam struct {
Interface *net.Interface // Multicast interface to use
Entries chan<- *ServiceEntry // Entries Channel
WantUnicastResponse bool // Unicast response desired, as per 5.4 in RFC
+ DisableIPv4 bool // Whether to disable usage of IPv4 for MDNS operations. Does not affect discovered addresses.
+ DisableIPv6 bool // Whether to disable usage of IPv6 for MDNS operations. Does not affect discovered addresses.
}
// DefaultParams is used to return a default set of QueryParam's
@@ -52,6 +54,8 @@ func DefaultParams(service string) *QueryParam {
Timeout: time.Second,
Entries: make(chan *ServiceEntry),
WantUnicastResponse: false, // TODO(reddaly): Change this default.
+ DisableIPv4: false,
+ DisableIPv6: false,
}
}
@@ -61,7 +65,7 @@ func DefaultParams(service string) *QueryParam {
// either read or buffer.
func Query(params *QueryParam) error {
// Create a new client
- client, err := newClient()
+ client, err := newClient(!params.DisableIPv4, !params.DisableIPv6)
if err != nil {
return err
}
@@ -96,6 +100,9 @@ func Lookup(service string, entries chan<- *ServiceEntry) error {
// Client provides a query interface that can be used to
// search for service providers using mDNS
type client struct {
+ use_ipv4 bool
+ use_ipv6 bool
+
ipv4UnicastConn *net.UDPConn
ipv6UnicastConn *net.UDPConn
@@ -108,29 +115,48 @@ type client struct {
// NewClient creates a new mdns Client that can be used to query
// for records
-func newClient() (*client, error) {
+func newClient(v4 bool, v6 bool) (*client, error) {
+ if !v4 && !v6 {
+ return nil, fmt.Errorf("Must enable at least one of IPv4 and IPv6 querying")
+ }
+
// TODO(reddaly): At least attempt to bind to the port required in the spec.
// Create a IPv4 listener
- uconn4, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IPv4zero, Port: 0})
- if err != nil {
- log.Printf("[ERR] mdns: Failed to bind to udp4 port: %v", err)
+ var uconn4 *net.UDPConn
+ var uconn6 *net.UDPConn
+ var mconn4 *net.UDPConn
+ var mconn6 *net.UDPConn
+ var err error
+
+ if v4 {
+ uconn4, err = net.ListenUDP("udp4", &net.UDPAddr{IP: net.IPv4zero, Port: 0})
+ if err != nil {
+ log.Printf("[ERR] mdns: Failed to bind to udp4 port: %v", err)
+ }
}
- uconn6, err := net.ListenUDP("udp6", &net.UDPAddr{IP: net.IPv6zero, Port: 0})
- if err != nil {
- log.Printf("[ERR] mdns: Failed to bind to udp6 port: %v", err)
+
+ if v6 {
+ uconn6, err = net.ListenUDP("udp6", &net.UDPAddr{IP: net.IPv6zero, Port: 0})
+ if err != nil {
+ log.Printf("[ERR] mdns: Failed to bind to udp6 port: %v", err)
+ }
}
if uconn4 == nil && uconn6 == nil {
return nil, fmt.Errorf("failed to bind to any unicast udp port")
}
- mconn4, err := net.ListenMulticastUDP("udp4", nil, ipv4Addr)
- if err != nil {
- log.Printf("[ERR] mdns: Failed to bind to udp4 port: %v", err)
+ if v4 {
+ mconn4, err = net.ListenMulticastUDP("udp4", nil, ipv4Addr)
+ if err != nil {
+ log.Printf("[ERR] mdns: Failed to bind to udp4 port: %v", err)
+ }
}
- mconn6, err := net.ListenMulticastUDP("udp6", nil, ipv6Addr)
- if err != nil {
- log.Printf("[ERR] mdns: Failed to bind to udp6 port: %v", err)
+ if v6 {
+ mconn6, err = net.ListenMulticastUDP("udp6", nil, ipv6Addr)
+ if err != nil {
+ log.Printf("[ERR] mdns: Failed to bind to udp6 port: %v", err)
+ }
}
if mconn4 == nil && mconn6 == nil {
@@ -138,6 +164,8 @@ func newClient() (*client, error) {
}
c := &client{
+ use_ipv4: v4,
+ use_ipv6: v6,
ipv4MulticastConn: mconn4,
ipv6MulticastConn: mconn6,
ipv4UnicastConn: uconn4,
@@ -176,21 +204,25 @@ func (c *client) Close() error {
// setInterface is used to set the query interface, uses system
// default if not provided
func (c *client) setInterface(iface *net.Interface) error {
- p := ipv4.NewPacketConn(c.ipv4UnicastConn)
- if err := p.SetMulticastInterface(iface); err != nil {
- return err
- }
- p2 := ipv6.NewPacketConn(c.ipv6UnicastConn)
- if err := p2.SetMulticastInterface(iface); err != nil {
- return err
- }
- p = ipv4.NewPacketConn(c.ipv4MulticastConn)
- if err := p.SetMulticastInterface(iface); err != nil {
- return err
+ if c.use_ipv4 {
+ p := ipv4.NewPacketConn(c.ipv4UnicastConn)
+ if err := p.SetMulticastInterface(iface); err != nil {
+ return err
+ }
+ p = ipv4.NewPacketConn(c.ipv4MulticastConn)
+ if err := p.SetMulticastInterface(iface); err != nil {
+ return err
+ }
}
- p2 = ipv6.NewPacketConn(c.ipv6MulticastConn)
- if err := p2.SetMulticastInterface(iface); err != nil {
- return err
+ if c.use_ipv6 {
+ p2 := ipv6.NewPacketConn(c.ipv6UnicastConn)
+ if err := p2.SetMulticastInterface(iface); err != nil {
+ return err
+ }
+ p2 = ipv6.NewPacketConn(c.ipv6MulticastConn)
+ if err := p2.SetMulticastInterface(iface); err != nil {
+ return err
+ }
}
return nil
}
@@ -202,10 +234,14 @@ func (c *client) query(params *QueryParam) error {
// Start listening for response packets
msgCh := make(chan *dns.Msg, 32)
- go c.recv(c.ipv4UnicastConn, msgCh)
- go c.recv(c.ipv6UnicastConn, msgCh)
- go c.recv(c.ipv4MulticastConn, msgCh)
- go c.recv(c.ipv6MulticastConn, msgCh)
+ if c.use_ipv4 {
+ go c.recv(c.ipv4UnicastConn, msgCh)
+ go c.recv(c.ipv4MulticastConn, msgCh)
+ }
+ if c.use_ipv6 {
+ go c.recv(c.ipv6UnicastConn, msgCh)
+ go c.recv(c.ipv6MulticastConn, msgCh)
+ }
// Send the query
m := new(dns.Msg)
diff --git a/debian/changelog b/debian/changelog
index 02a5dae..1b86d0d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,9 +1,13 @@
-golang-github-hashicorp-mdns (1.0.3-3) UNRELEASED; urgency=medium
+golang-github-hashicorp-mdns (1.0.5-1) UNRELEASED; urgency=medium
+ [ Tianon Gravi ]
* Team upload.
* Remove self from Uploaders
- -- Tianon Gravi <tianon@debian.org> Wed, 23 Feb 2022 11:11:32 -0800
+ [ Debian Janitor ]
+ * New upstream release.
+
+ -- Tianon Gravi <tianon@debian.org> Mon, 15 May 2023 23:36:38 -0000
golang-github-hashicorp-mdns (1.0.3-2) unstable; urgency=medium
diff --git a/go.mod b/go.mod
index f66c20d..0a85a51 100644
--- a/go.mod
+++ b/go.mod
@@ -1,8 +1,8 @@
module github.com/hashicorp/mdns
require (
- github.com/miekg/dns v1.1.27
- golang.org/x/net v0.0.0-20190923162816-aa69164e4478
+ github.com/miekg/dns v1.1.41
+ golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1
)
go 1.13
diff --git a/go.sum b/go.sum
index 52581f6..f11ff48 100644
--- a/go.sum
+++ b/go.sum
@@ -1,19 +1,17 @@
-github.com/miekg/dns v1.1.27 h1:aEH/kqUzUxGJ/UHcEKdJY+ugH6WEzsEBBSPa8zuy1aM=
-github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g=
-golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe h1:6fAMxZRR6sl1Uq8U61gxU+kPTs2tR8uOySCbBP7BN/M=
-golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY=
+github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1 h1:4qWs8cYYH6PoEFy4dfhDFgoMGkwAcETd+MmPdCPMzUc=
+golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210303074136-134d130e1a04 h1:cEhElsAv9LUt9ZUUocxzWe05oFLVd+AA2nstydTeI8g=
+golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44 h1:Bli41pIlzTzf3KEY06n+xnzK/BESIg2ze4Pgfh/aI8c=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/server_test.go b/server_test.go
index 5a40e82..f729816 100644
--- a/server_test.go
+++ b/server_test.go
@@ -1,7 +1,7 @@
package mdns
import (
- "sync/atomic"
+ "fmt"
"testing"
"time"
)
@@ -23,37 +23,43 @@ func TestServer_Lookup(t *testing.T) {
defer serv.Shutdown()
entries := make(chan *ServiceEntry, 1)
- var found int32 = 0
+ errCh := make(chan error, 1)
+ defer close(errCh)
go func() {
select {
case e := <-entries:
if e.Name != "hostname._foobar._tcp.local." {
- t.Fatalf("bad: %v", e)
+ errCh <- fmt.Errorf("Entry has the wrong name: %+v", e)
+ return
}
if e.Port != 80 {
- t.Fatalf("bad: %v", e)
+ errCh <- fmt.Errorf("Entry has the wrong port: %+v", e)
+ return
}
if e.Info != "Local web server" {
- t.Fatalf("bad: %v", e)
+ errCh <- fmt.Errorf("Entry as the wrong Info: %+v", e)
+ return
}
- atomic.StoreInt32(&found, 1)
-
+ errCh <- nil
case <-time.After(80 * time.Millisecond):
- t.Fatalf("timeout")
+ errCh <- fmt.Errorf("Timed out waiting for response")
}
}()
params := &QueryParam{
- Service: "_foobar._tcp",
- Domain: "local",
- Timeout: 50 * time.Millisecond,
- Entries: entries,
+ Service: "_foobar._tcp",
+ Domain: "local",
+ Timeout: 50 * time.Millisecond,
+ Entries: entries,
+ DisableIPv6: true,
}
err = Query(params)
if err != nil {
t.Fatalf("err: %v", err)
}
- if atomic.LoadInt32(&found) == 0 {
- t.Fatalf("record not found")
+
+ err = <-errCh
+ if err != nil {
+ t.Fatalf("err: %v", err)
}
}
Debdiff
File lists identical (after any substitutions)
No differences were encountered in the control files