Skip to content

Commit 476a0f5

Browse files
authored
Merge pull request #46 from zmap/sync-upstream-20250812
Sync miekg/dns upstream changes
2 parents f19f076 + 76b71c6 commit 476a0f5

6 files changed

Lines changed: 50 additions & 24 deletions

File tree

‎README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ Example programs can be found in the `github.com/miekg/exdns` repository.
195195
* 9461 - Service Binding Mapping for DNS Servers
196196
* 9462 - Discovery of Designated Resolvers
197197
* 9460 - SVCB and HTTPS Records
198+
* 9567 - DNS Error Reporting
198199
* 9606 - DNS Resolver Information
199200
* Draft - Compact Denial of Existence in DNSSEC
200201

‎edns.go‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const (
2424
EDNS0TCPKEEPALIVE = 0xb // EDNS0 tcp keep alive (See RFC 7828)
2525
EDNS0PADDING = 0xc // EDNS0 padding (See RFC 7830)
2626
EDNS0EDE = 0xf // EDNS0 extended DNS errors (See RFC 8914)
27+
EDNS0REPORTING = 0x12 // EDNS0 reporting (See RFC 9567)
2728
EDNS0LOCALSTART = 0xFDE9 // Beginning of range reserved for local/experimental use (See RFC 6891)
2829
EDNS0LOCALEND = 0xFFFE // End of range reserved for local/experimental use (See RFC 6891)
2930
_DO = 1 << 15 // DNSSEC OK
@@ -60,6 +61,8 @@ func makeDataOpt(code uint16) EDNS0 {
6061
return new(EDNS0_EDE)
6162
case EDNS0ESU:
6263
return new(EDNS0_ESU)
64+
case EDNS0REPORTING:
65+
return new(EDNS0_REPORTING)
6366
default:
6467
e := new(EDNS0_LOCAL)
6568
e.Code = code
@@ -127,6 +130,8 @@ func (rr *OPT) String() string {
127130
s += "\n; EDE: " + o.String()
128131
case *EDNS0_ESU:
129132
s += "\n; ESU: " + o.String()
133+
case *EDNS0_REPORTING:
134+
s += "\n; REPORT-CHANNEL: " + o.String()
130135
}
131136
}
132137
return s
@@ -875,3 +880,29 @@ func (e *EDNS0_ESU) unpack(b []byte) error {
875880
e.Uri = string(b)
876881
return nil
877882
}
883+
884+
// EDNS0_REPORTING implements the EDNS0 Reporting Channel option (RFC 9567).
885+
type EDNS0_REPORTING struct {
886+
Code uint16 // always EDNS0REPORTING
887+
AgentDomain string
888+
}
889+
890+
func (e *EDNS0_REPORTING) Option() uint16 { return EDNS0REPORTING }
891+
func (e *EDNS0_REPORTING) String() string { return e.AgentDomain }
892+
func (e *EDNS0_REPORTING) copy() EDNS0 { return &EDNS0_REPORTING{e.Code, e.AgentDomain} }
893+
func (e *EDNS0_REPORTING) pack() ([]byte, error) {
894+
b := make([]byte, 255)
895+
off1, err := PackDomainName(Fqdn(e.AgentDomain), b, 0, nil, false)
896+
if err != nil {
897+
return nil, fmt.Errorf("bad agent domain: %w", err)
898+
}
899+
return b[:off1], nil
900+
}
901+
func (e *EDNS0_REPORTING) unpack(b []byte) error {
902+
domain, _, err := UnpackDomainName(b, 0)
903+
if err != nil {
904+
return fmt.Errorf("bad agent domain: %w", err)
905+
}
906+
e.AgentDomain = domain
907+
return nil
908+
}

‎go.mod‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ go 1.23.0
55
toolchain go1.24.2
66

77
require (
8-
golang.org/x/net v0.40.0
9-
golang.org/x/sync v0.14.0
10-
golang.org/x/sys v0.33.0
11-
golang.org/x/tools v0.33.0
8+
golang.org/x/net v0.42.0
9+
golang.org/x/sync v0.16.0
10+
golang.org/x/sys v0.34.0
11+
golang.org/x/tools v0.35.0
1212
)
1313

14-
require golang.org/x/mod v0.24.0 // indirect
14+
require golang.org/x/mod v0.26.0 // indirect

‎go.sum‎

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
22
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
3-
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
4-
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
5-
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
6-
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
7-
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
8-
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
9-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
10-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
11-
golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc=
12-
golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI=
3+
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
4+
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
5+
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
6+
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
7+
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
8+
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
9+
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
10+
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
11+
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
12+
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=

‎server.go‎

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,6 @@ type ResponseWriter interface {
4444
LocalAddr() net.Addr
4545
// RemoteAddr returns the net.Addr of the client that sent the current request.
4646
RemoteAddr() net.Addr
47-
// Network returns the value of the Net field of the Server (e.g., "tcp", "tcp-tls").
48-
Network() string
4947
// WriteMsg writes a reply back to the client.
5048
WriteMsg(*Msg) error
5149
// Write writes a raw buffer back to the client.
@@ -79,7 +77,6 @@ type response struct {
7977
udpSession *SessionUDP // oob data to get egress interface right
8078
pcSession net.Addr // address to use when writing to a generic net.PacketConn
8179
writer Writer // writer to output the raw DNS bits
82-
network string // corresponding Server.Net value
8380
}
8481

8582
// handleRefused returns a HandlerFunc that returns REFUSED for every request it gets.
@@ -560,7 +557,7 @@ func (srv *Server) serveUDP(l net.PacketConn) error {
560557

561558
// Serve a new TCP connection.
562559
func (srv *Server) serveTCPConn(wg *sync.WaitGroup, rw net.Conn) {
563-
w := &response{tsigProvider: srv.tsigProvider(), tcp: rw, network: srv.Net}
560+
w := &response{tsigProvider: srv.tsigProvider(), tcp: rw}
564561
if srv.DecorateWriter != nil {
565562
w.writer = srv.DecorateWriter(w)
566563
} else {
@@ -615,7 +612,7 @@ func (srv *Server) serveTCPConn(wg *sync.WaitGroup, rw net.Conn) {
615612

616613
// Serve a new UDP request.
617614
func (srv *Server) serveUDPPacket(wg *sync.WaitGroup, m []byte, u net.PacketConn, udpSession *SessionUDP, pcSession net.Addr) {
618-
w := &response{tsigProvider: srv.tsigProvider(), udp: u, udpSession: udpSession, pcSession: pcSession, network: srv.Net}
615+
w := &response{tsigProvider: srv.tsigProvider(), udp: u, udpSession: udpSession, pcSession: pcSession}
619616
if srv.DecorateWriter != nil {
620617
w.writer = srv.DecorateWriter(w)
621618
} else {
@@ -821,9 +818,6 @@ func (w *response) RemoteAddr() net.Addr {
821818
}
822819
}
823820

824-
// Network implements the ResponseWriter.Network method.
825-
func (w *response) Network() string { return w.network }
826-
827821
// TsigStatus implements the ResponseWriter.TsigStatus method.
828822
func (w *response) TsigStatus() error { return w.tsigStatus }
829823

‎version.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package dns
33
import "fmt"
44

55
// Version is current version of this library.
6-
var Version = v{1, 1, 67}
6+
var Version = v{1, 1, 68}
77

88
// v holds the version of this library.
99
type v struct {

0 commit comments

Comments
 (0)