@@ -32,3 +32,71 @@ def test_srv_no_compress
32
32
assert_equal "\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x01 \x00 \x00 \x00 \x00 \x07 example\x03 com\x00 \x00 \x21 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x17 \x00 \x00 \x00 \x00 \x00 \x00 \x03 www\x07 example\x03 com\x00 " , m . encode , issue29
33
33
end
34
34
end
35
+
36
+ class TestResolvResourceCAA < Test ::Unit ::TestCase
37
+ def test_caa_roundtrip
38
+ raw_msg = "\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x00 \x03 new\x07 example\x03 com\x00 \x01 \x01 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x16 \x00 \x05 issueca1.example.net\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x00 \x00 \x00 \x0C \x80 \x03 tbsUnknown" . b
39
+
40
+ m = Resolv ::DNS ::Message . new ( 0 )
41
+ m . add_answer ( 'new.example.com' , 0 , Resolv ::DNS ::Resource ::IN ::CAA . new ( 0 , 'issue' , 'ca1.example.net' ) )
42
+ m . add_answer ( 'new.example.com' , 0 , Resolv ::DNS ::Resource ::IN ::CAA . new ( 128 , 'tbs' , 'Unknown' ) )
43
+ assert_equal raw_msg , m . encode
44
+
45
+ m = Resolv ::DNS ::Message . decode ( raw_msg )
46
+ assert_equal 2 , m . answer . size
47
+ _ , _ , caa0 = m . answer [ 0 ]
48
+ assert_equal 0 , caa0 . flags
49
+ assert_equal false , caa0 . critical?
50
+ assert_equal 'issue' , caa0 . tag
51
+ assert_equal 'ca1.example.net' , caa0 . value
52
+ _ , _ , caa1 = m . answer [ 1 ]
53
+ assert_equal true , caa1 . critical?
54
+ assert_equal 128 , caa1 . flags
55
+ assert_equal 'tbs' , caa1 . tag
56
+ assert_equal 'Unknown' , caa1 . value
57
+ end
58
+
59
+ def test_caa_stackoverflow
60
+ # gathered in the wild
61
+ raw_msg = "\x8D \x32 \x81 \x80 \x00 \x01 \x00 \x0B \x00 \x00 \x00 \x00 \x0D stackoverflow\x03 com\x00 \x01 \x01 \x00 \x01 \xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x13 \x00 \x05 issuecomodoca.com\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x2D \x00 \x05 issuedigicert.com; cansignhttpexchanges=yes\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x16 \x00 \x05 issueletsencrypt.org\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x29 \x00 \x05 issuepki.goog; cansignhttpexchanges=yes\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x12 \x00 \x05 issuesectigo.com\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x17 \x00 \x09 issuewildcomodoca.com\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x31 \x00 \x09 issuewilddigicert.com; cansignhttpexchanges=yes\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x1A \x00 \x09 issuewildletsencrypt.org\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x2D \x00 \x09 issuewildpki.goog; cansignhttpexchanges=yes\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x16 \x00 \x09 issuewildsectigo.com\xC0 \x0C \x01 \x01 \x00 \x01 \x00 \x00 \x01 \x2C \x00 \x2D \x80 \x05 iodefmailto:sysadmin-team@stackoverflow.com" . b
62
+
63
+ m = Resolv ::DNS ::Message . decode ( raw_msg )
64
+ assert_equal 11 , m . answer . size
65
+ _ , _ , caa3 = m . answer [ 3 ]
66
+ assert_equal 0 , caa3 . flags
67
+ assert_equal 'issue' , caa3 . tag
68
+ assert_equal 'pki.goog; cansignhttpexchanges=yes' , caa3 . value
69
+ _ , _ , caa8 = m . answer [ 8 ]
70
+ assert_equal 0 , caa8 . flags
71
+ assert_equal 'issuewild' , caa8 . tag
72
+ assert_equal 'pki.goog; cansignhttpexchanges=yes' , caa8 . value
73
+ _ , _ , caa10 = m . answer [ 10 ]
74
+ assert_equal 128 , caa10 . flags
75
+ assert_equal 'iodef' , caa10 . tag
76
+ assert_equal 'mailto:sysadmin-team@stackoverflow.com' , caa10 . value
77
+ end
78
+
79
+ def test_caa_flags
80
+ assert_equal 255 ,
81
+ Resolv ::DNS ::Resource ::IN ::CAA . new ( 255 , 'issue' , 'ca1.example.net' ) . flags
82
+ assert_raise ( ArgumentError ) do
83
+ Resolv ::DNS ::Resource ::IN ::CAA . new ( 256 , 'issue' , 'ca1.example.net' )
84
+ end
85
+
86
+ assert_raise ( ArgumentError ) do
87
+ Resolv ::DNS ::Resource ::IN ::CAA . new ( -1 , 'issue' , 'ca1.example.net' )
88
+ end
89
+ end
90
+
91
+ def test_caa_tag
92
+ assert_raise ( ArgumentError , 'Empty tag should be rejected' ) do
93
+ Resolv ::DNS ::Resource ::IN ::CAA . new ( 0 , '' , 'ca1.example.net' )
94
+ end
95
+
96
+ assert_equal '123456789012345' ,
97
+ Resolv ::DNS ::Resource ::IN ::CAA . new ( 0 , '123456789012345' , 'ca1.example.net' ) . tag
98
+ assert_raise ( ArgumentError , 'Tag longer than 15 bytes should be rejected' ) do
99
+ Resolv ::DNS ::Resource ::IN ::CAA . new ( 0 , '1234567890123456' , 'ca1.example.net' )
100
+ end
101
+ end
102
+ end
0 commit comments