Blame


1 0fc4e74a 2021-12-09 o package dns
2 0fc4e74a 2021-12-09 o
3 0fc4e74a 2021-12-09 o import (
4 0fc4e74a 2021-12-09 o "math/rand"
5 0fc4e74a 2021-12-09 o "net"
6 0fc4e74a 2021-12-09 o "testing"
7 0fc4e74a 2021-12-09 o
8 0fc4e74a 2021-12-09 o "golang.org/x/net/dns/dnsmessage"
9 0fc4e74a 2021-12-09 o )
10 0fc4e74a 2021-12-09 o
11 7e5b6601 2021-12-16 o var testq = dnsmessage.Question{Name: dnsmessage.MustNewName("www.example.com."), Type: dnsmessage.TypeA, Class: dnsmessage.ClassINET}
12 0fc4e74a 2021-12-09 o
13 7e5b6601 2021-12-16 o func resolveBadly(w ResponseWriter, qmsg *dnsmessage.Message) {
14 b141f119 2021-12-18 o rmsg := dnsmessage.Message{
15 b141f119 2021-12-18 o Header: dnsmessage.Header{
16 b141f119 2021-12-18 o ID: qmsg.Header.ID + 69,
17 b141f119 2021-12-18 o Response: false,
18 b141f119 2021-12-18 o RCode: dnsmessage.RCodeNameError,
19 b141f119 2021-12-18 o },
20 b141f119 2021-12-18 o Questions: qmsg.Questions,
21 b141f119 2021-12-18 o }
22 b141f119 2021-12-18 o w.WriteMsg(rmsg)
23 7e5b6601 2021-12-16 o }
24 7e5b6601 2021-12-16 o
25 7e5b6601 2021-12-16 o func resolveWrongQuestion(w ResponseWriter, qmsg *dnsmessage.Message) {
26 7e5b6601 2021-12-16 o wrongq := dnsmessage.Question{Name: dnsmessage.MustNewName("blabla.example.org."), Type: dnsmessage.TypeNS, Class: dnsmessage.ClassCHAOS}
27 7e5b6601 2021-12-16 o rmsg := dnsmessage.Message{
28 7e5b6601 2021-12-16 o Header: dnsmessage.Header{
29 b141f119 2021-12-18 o ID: qmsg.Header.ID,
30 b141f119 2021-12-18 o Response: true,
31 b141f119 2021-12-18 o RCode: dnsmessage.RCodeSuccess,
32 7e5b6601 2021-12-16 o Authoritative: true,
33 7e5b6601 2021-12-16 o },
34 7e5b6601 2021-12-16 o Questions: []dnsmessage.Question{wrongq},
35 0fc4e74a 2021-12-09 o }
36 7e5b6601 2021-12-16 o w.WriteMsg(rmsg)
37 7e5b6601 2021-12-16 o }
38 7e5b6601 2021-12-16 o
39 7e5b6601 2021-12-16 o func TestBadResolver(t *testing.T) {
40 7e5b6601 2021-12-16 o srv := Server{network: "udp", addr: "127.0.0.1", Handler: resolveBadly}
41 7e5b6601 2021-12-16 o conn, err := net.ListenPacket("udp", "127.0.0.1:5359")
42 7e5b6601 2021-12-16 o if err != nil {
43 7e5b6601 2021-12-16 o t.Fatal(err)
44 7e5b6601 2021-12-16 o }
45 7e5b6601 2021-12-16 o go func() {
46 7e5b6601 2021-12-16 o t.Fatal(srv.ServePacket(conn))
47 7e5b6601 2021-12-16 o }()
48 7e5b6601 2021-12-16 o rmsg, err := Ask(testq, "127.0.0.1:5359")
49 7e5b6601 2021-12-16 o if err == nil {
50 7e5b6601 2021-12-16 o t.Error("wanted error, got nil")
51 7e5b6601 2021-12-16 o }
52 7e5b6601 2021-12-16 o t.Log(err)
53 7e5b6601 2021-12-16 o t.Log("sent:", testq, "received", rmsg)
54 7e5b6601 2021-12-16 o
55 7e5b6601 2021-12-16 o srv.Handler = resolveWrongQuestion
56 7e5b6601 2021-12-16 o rmsg, err = Ask(testq, "127.0.0.1:5359")
57 7e5b6601 2021-12-16 o if err == nil {
58 7e5b6601 2021-12-16 o t.Error("wanted error, got nil")
59 7e5b6601 2021-12-16 o } else if err != nil {
60 0fc4e74a 2021-12-09 o t.Log(err)
61 0fc4e74a 2021-12-09 o }
62 7e5b6601 2021-12-16 o t.Log("sent:", testq, "received:", rmsg)
63 0fc4e74a 2021-12-09 o }
64 0fc4e74a 2021-12-09 o
65 0fc4e74a 2021-12-09 o func buildmsg(s string) (dnsmessage.Message, error) {
66 0fc4e74a 2021-12-09 o name, err := dnsmessage.NewName(s)
67 0fc4e74a 2021-12-09 o if err != nil {
68 0fc4e74a 2021-12-09 o return dnsmessage.Message{}, err
69 0fc4e74a 2021-12-09 o }
70 0fc4e74a 2021-12-09 o var msg dnsmessage.Message
71 0fc4e74a 2021-12-09 o header := dnsmessage.Header{ID: uint16(rand.Intn(8192)), RecursionDesired: true}
72 0fc4e74a 2021-12-09 o buf := make([]byte, 2, 512+2)
73 0fc4e74a 2021-12-09 o b := dnsmessage.NewBuilder(buf, header)
74 0fc4e74a 2021-12-09 o b.EnableCompression()
75 0fc4e74a 2021-12-09 o q := dnsmessage.Question{Name: name, Type: dnsmessage.TypeA, Class: dnsmessage.ClassINET}
76 0fc4e74a 2021-12-09 o if err := b.StartQuestions(); err != nil {
77 0fc4e74a 2021-12-09 o return msg, err
78 0fc4e74a 2021-12-09 o }
79 0fc4e74a 2021-12-09 o if err := b.Question(q); err != nil {
80 0fc4e74a 2021-12-09 o return msg, err
81 0fc4e74a 2021-12-09 o }
82 0fc4e74a 2021-12-09 o packed, err := b.Finish()
83 0fc4e74a 2021-12-09 o if err != nil {
84 0fc4e74a 2021-12-09 o return msg, err
85 0fc4e74a 2021-12-09 o }
86 0fc4e74a 2021-12-09 o if err := msg.Unpack(packed[2:]); err != nil {
87 0fc4e74a 2021-12-09 o return msg, err
88 0fc4e74a 2021-12-09 o }
89 0fc4e74a 2021-12-09 o return msg, nil
90 0fc4e74a 2021-12-09 o }