dns/dnsmessage: add RFC3597-inspired UnknownResource type

Currently, dnsmessage is not capable of parsing messages that contain
unknown records. Specifically, unpackResourceType returns an error
stating "invalid resource type".

This makes it tricky to use dnsmessage for applications such as
recursive resolvers or DNS forwarders. (I was bitten already, which is
why I'm writing this!)

RFC3597 indicates that name servers and resolvers must treat unknown RRs
as binary data. Quoting the first paragraph from section 3 below:

>   To enable new RR types to be deployed without server changes, name
>   servers and resolvers MUST handle RRs of unknown type transparently.
>   That is, they must treat the RDATA section of such RRs as
>   unstructured binary data, storing and transmitting it without change
>   [RFC1123].

Fixes #42128

Change-Id: I2a203177e6e6cf51d70c63568c0465fc36a49afe
Reviewed-on: https://go-review.googlesource.com/c/net/+/262037
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Trust: Dmitri Shuralyov <dmitshur@golang.org>
2 files changed
tree: 798d471fbbc43a40945d43a8c8c8429ea74226d8
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. icmp/
  9. idna/
  10. internal/
  11. ipv4/
  12. ipv6/
  13. lif/
  14. nettest/
  15. netutil/
  16. proxy/
  17. publicsuffix/
  18. route/
  19. trace/
  20. webdav/
  21. websocket/
  22. xsrftoken/
  23. .gitattributes
  24. .gitignore
  30. README.md
  31. codereview.cfg
  32. go.mod
  33. go.sum

Go Networking

Go Reference

This repository holds supplementary Go networking libraries.


The easiest way to install is to run go get -u golang.org/x/net. You can also manually git clone the repository to $GOPATH/src/golang.org/x/net.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html. The main issue tracker for the net repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.