dnsruby 1.55 → 1.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +96 -0
  3. data/Rakefile +30 -29
  4. data/demo/axfr.rb +93 -93
  5. data/demo/check_soa.rb +99 -99
  6. data/demo/check_zone.rb +59 -59
  7. data/demo/digdlv.rb +43 -43
  8. data/demo/digroot.rb +34 -34
  9. data/demo/example_recurse.rb +14 -14
  10. data/demo/mresolv.rb +30 -30
  11. data/demo/mx.rb +31 -31
  12. data/demo/rubydig.rb +37 -37
  13. data/demo/to_resolve.txt +3088 -3088
  14. data/demo/trace_dns.rb +46 -46
  15. data/lib/dnsruby.rb +161 -526
  16. data/lib/dnsruby/DNS.rb +305 -0
  17. data/lib/{Dnsruby/Cache.rb → dnsruby/cache.rb} +152 -152
  18. data/lib/{Dnsruby → dnsruby}/code_mapper.rb +48 -52
  19. data/lib/dnsruby/code_mappers.rb +295 -0
  20. data/lib/{Dnsruby/Config.rb → dnsruby/config.rb} +454 -454
  21. data/lib/{Dnsruby → dnsruby}/dnssec.rb +91 -91
  22. data/lib/{Dnsruby/Hosts.rb → dnsruby/hosts.rb} +125 -125
  23. data/lib/{Dnsruby → dnsruby}/ipv4.rb +26 -26
  24. data/lib/{Dnsruby → dnsruby}/ipv6.rb +42 -42
  25. data/lib/{Dnsruby → dnsruby}/key_cache.rb +29 -29
  26. data/lib/dnsruby/message/decoder.rb +164 -0
  27. data/lib/dnsruby/message/encoder.rb +75 -0
  28. data/lib/dnsruby/message/header.rb +249 -0
  29. data/lib/dnsruby/message/message.rb +629 -0
  30. data/lib/dnsruby/message/question.rb +86 -0
  31. data/lib/dnsruby/message/section.rb +96 -0
  32. data/lib/{Dnsruby → dnsruby}/name.rb +141 -141
  33. data/lib/dnsruby/packet_sender.rb +661 -0
  34. data/lib/{Dnsruby/Recursor.rb → dnsruby/recursor.rb} +235 -233
  35. data/lib/dnsruby/resolv.rb +113 -0
  36. data/lib/dnsruby/resolver.rb +1192 -0
  37. data/lib/dnsruby/resource/A.rb +56 -0
  38. data/lib/dnsruby/resource/AAAA.rb +54 -0
  39. data/lib/{Dnsruby → dnsruby}/resource/AFSDB.rb +68 -68
  40. data/lib/{Dnsruby → dnsruby}/resource/CERT.rb +105 -105
  41. data/lib/{Dnsruby → dnsruby}/resource/DHCID.rb +54 -54
  42. data/lib/dnsruby/resource/DLV.rb +27 -0
  43. data/lib/{Dnsruby → dnsruby}/resource/DNSKEY.rb +372 -372
  44. data/lib/{Dnsruby → dnsruby}/resource/DS.rb +255 -255
  45. data/lib/{Dnsruby → dnsruby}/resource/HINFO.rb +71 -71
  46. data/lib/{Dnsruby → dnsruby}/resource/HIP.rb +29 -29
  47. data/lib/{Dnsruby → dnsruby}/resource/IN.rb +30 -30
  48. data/lib/{Dnsruby → dnsruby}/resource/IPSECKEY.rb +31 -31
  49. data/lib/{Dnsruby → dnsruby}/resource/ISDN.rb +62 -62
  50. data/lib/{Dnsruby → dnsruby}/resource/KX.rb +65 -65
  51. data/lib/{Dnsruby → dnsruby}/resource/LOC.rb +263 -263
  52. data/lib/{Dnsruby → dnsruby}/resource/MINFO.rb +69 -69
  53. data/lib/{Dnsruby → dnsruby}/resource/MX.rb +65 -65
  54. data/lib/{Dnsruby → dnsruby}/resource/NAPTR.rb +98 -98
  55. data/lib/{Dnsruby → dnsruby}/resource/NSAP.rb +171 -171
  56. data/lib/dnsruby/resource/NSEC.rb +275 -0
  57. data/lib/dnsruby/resource/NSEC3.rb +332 -0
  58. data/lib/dnsruby/resource/NSEC3PARAM.rb +135 -0
  59. data/lib/dnsruby/resource/OPT.rb +272 -0
  60. data/lib/{Dnsruby → dnsruby}/resource/PX.rb +70 -70
  61. data/lib/{Dnsruby → dnsruby}/resource/RP.rb +75 -75
  62. data/lib/dnsruby/resource/RR.rb +421 -0
  63. data/lib/dnsruby/resource/RRSIG.rb +275 -0
  64. data/lib/dnsruby/resource/RRSet.rb +190 -0
  65. data/lib/{Dnsruby → dnsruby}/resource/RT.rb +67 -67
  66. data/lib/{Dnsruby → dnsruby}/resource/SOA.rb +94 -94
  67. data/lib/dnsruby/resource/SPF.rb +29 -0
  68. data/lib/dnsruby/resource/SRV.rb +112 -0
  69. data/lib/{Dnsruby → dnsruby}/resource/SSHFP.rb +14 -14
  70. data/lib/dnsruby/resource/TKEY.rb +163 -0
  71. data/lib/dnsruby/resource/TSIG.rb +593 -0
  72. data/lib/{Dnsruby → dnsruby}/resource/TXT.rb +191 -191
  73. data/lib/dnsruby/resource/X25.rb +55 -0
  74. data/lib/{Dnsruby → dnsruby}/resource/domain_name.rb +25 -25
  75. data/lib/{Dnsruby → dnsruby}/resource/generic.rb +80 -80
  76. data/lib/dnsruby/resource/resource.rb +25 -0
  77. data/lib/{Dnsruby → dnsruby}/select_thread.rb +148 -148
  78. data/lib/{Dnsruby/SingleResolver.rb → dnsruby/single_resolver.rb} +60 -60
  79. data/lib/{Dnsruby → dnsruby}/single_verifier.rb +344 -344
  80. data/lib/dnsruby/the_log.rb +44 -0
  81. data/lib/dnsruby/update.rb +278 -0
  82. data/lib/dnsruby/validator_thread.rb +124 -0
  83. data/lib/dnsruby/version.rb +3 -0
  84. data/lib/{Dnsruby → dnsruby}/zone_reader.rb +93 -93
  85. data/lib/{Dnsruby → dnsruby}/zone_transfer.rb +377 -377
  86. data/test/spec_helper.rb +16 -0
  87. data/test/tc_axfr.rb +31 -34
  88. data/test/tc_cache.rb +32 -32
  89. data/test/tc_dlv.rb +28 -28
  90. data/test/tc_dns.rb +73 -76
  91. data/test/tc_dnskey.rb +31 -32
  92. data/test/tc_dnsruby.rb +50 -44
  93. data/test/tc_ds.rb +36 -36
  94. data/test/tc_escapedchars.rb +252 -255
  95. data/test/tc_hash.rb +17 -21
  96. data/test/tc_header.rb +48 -57
  97. data/test/tc_hip.rb +19 -22
  98. data/test/tc_ipseckey.rb +18 -21
  99. data/test/tc_keith.rb +300 -0
  100. data/test/tc_message.rb +87 -0
  101. data/test/tc_misc.rb +83 -87
  102. data/test/tc_name.rb +81 -84
  103. data/test/tc_naptr.rb +18 -21
  104. data/test/tc_nsec.rb +55 -55
  105. data/test/tc_nsec3.rb +23 -24
  106. data/test/tc_nsec3param.rb +20 -21
  107. data/test/tc_packet.rb +90 -93
  108. data/test/tc_packet_unique_push.rb +48 -51
  109. data/test/tc_question.rb +30 -33
  110. data/test/tc_queue.rb +16 -17
  111. data/test/tc_recur.rb +16 -17
  112. data/test/tc_res_config.rb +38 -41
  113. data/test/tc_res_env.rb +29 -32
  114. data/test/tc_res_file.rb +26 -29
  115. data/test/tc_res_opt.rb +62 -65
  116. data/test/tc_resolver.rb +287 -242
  117. data/test/tc_rr-opt.rb +70 -63
  118. data/test/tc_rr-txt.rb +68 -71
  119. data/test/tc_rr-unknown.rb +45 -48
  120. data/test/tc_rr.rb +76 -70
  121. data/test/tc_rrset.rb +21 -22
  122. data/test/tc_rrsig.rb +19 -20
  123. data/test/tc_single_resolver.rb +294 -297
  124. data/test/tc_soak.rb +199 -202
  125. data/test/tc_soak_base.rb +29 -34
  126. data/test/tc_sshfp.rb +20 -23
  127. data/test/tc_tcp.rb +32 -35
  128. data/test/tc_tkey.rb +41 -44
  129. data/test/tc_tsig.rb +81 -84
  130. data/test/tc_update.rb +108 -111
  131. data/test/tc_validator.rb +29 -29
  132. data/test/tc_verifier.rb +81 -82
  133. data/test/ts_dnsruby.rb +16 -15
  134. data/test/ts_offline.rb +62 -63
  135. data/test/ts_online.rb +115 -115
  136. metadata +155 -90
  137. data/README +0 -59
  138. data/lib/Dnsruby/DNS.rb +0 -305
  139. data/lib/Dnsruby/PacketSender.rb +0 -656
  140. data/lib/Dnsruby/Resolver.rb +0 -1189
  141. data/lib/Dnsruby/TheLog.rb +0 -44
  142. data/lib/Dnsruby/message.rb +0 -1230
  143. data/lib/Dnsruby/resource/A.rb +0 -56
  144. data/lib/Dnsruby/resource/AAAA.rb +0 -54
  145. data/lib/Dnsruby/resource/DLV.rb +0 -27
  146. data/lib/Dnsruby/resource/NSEC.rb +0 -298
  147. data/lib/Dnsruby/resource/NSEC3.rb +0 -340
  148. data/lib/Dnsruby/resource/NSEC3PARAM.rb +0 -135
  149. data/lib/Dnsruby/resource/OPT.rb +0 -213
  150. data/lib/Dnsruby/resource/RRSIG.rb +0 -275
  151. data/lib/Dnsruby/resource/SPF.rb +0 -29
  152. data/lib/Dnsruby/resource/SRV.rb +0 -112
  153. data/lib/Dnsruby/resource/TKEY.rb +0 -163
  154. data/lib/Dnsruby/resource/TSIG.rb +0 -593
  155. data/lib/Dnsruby/resource/X25.rb +0 -55
  156. data/lib/Dnsruby/resource/resource.rb +0 -678
  157. data/lib/Dnsruby/update.rb +0 -278
  158. data/lib/Dnsruby/validator_thread.rb +0 -124
@@ -0,0 +1,190 @@
1
+ module Dnsruby
2
+
3
+ # RFC2181, section 5
4
+ # "It is however possible for most record types to exist
5
+ # with the same label, class and type, but with different data. Such a
6
+ # group of records is hereby defined to be a Resource Record Set
7
+ # (RRSet)."
8
+ # This class also stores the RRSIG records which cover the RRSet
9
+ class RRSet
10
+ include Comparable
11
+ # The number of RRSIGs stored in this RRSet
12
+ attr_reader :num_sigs
13
+ def initialize(rrs = [])
14
+ if (!rrs.instance_of?Array)
15
+ rrs = [rrs]
16
+ end
17
+ @rrs = []
18
+ @num_sigs = 0
19
+ rrs.each {|rr| add(rr)}
20
+ end
21
+ def self.new_from_string(string)
22
+ rr_strings = string.split("\n")
23
+ rrs = rr_strings.map { |s| Dnsruby::RR.new_from_string(s) }
24
+
25
+ Dnsruby::RRSet.new(rrs)
26
+ end # The RRSIGs stored with this RRSet
27
+ def sigs
28
+ return @rrs[@rrs.length-@num_sigs, @num_sigs]
29
+ end
30
+ # The RRs (not RRSIGs) stored in this RRSet
31
+ def rrs
32
+ return @rrs[0, @rrs.length-@num_sigs]
33
+ end
34
+ def privateAdd(r) #:nodoc:
35
+ if @rrs.include?r
36
+ return true
37
+ end
38
+ new_pos = @rrs.length - @num_sigs
39
+ if ((@num_sigs == @rrs.length) && @num_sigs > 0) # if we added RRSIG first
40
+ if (((r.type != @rrs.last.type_covered) && (r.type != Types.RRSIG))||
41
+ ((r.type == Types.RRSIG) && (r.type_covered != @rrs.last.type_covered)))
42
+ return false
43
+ end
44
+ end
45
+ if (r.type == Types::RRSIG)
46
+ new_pos = @rrs.length
47
+ @num_sigs += 1
48
+ end
49
+ @rrs.insert(new_pos, r)
50
+ return true
51
+ end
52
+
53
+ # Add the RR to this RRSet
54
+ # Takes a copy of the RR by default. To suppress this, pass false
55
+ # as the second parameter.
56
+ def add(rin, do_clone = true)
57
+ if (rin.instance_of?RRSet)
58
+ ret = false
59
+ [rin.rrs, rin.sigs].each {|rr| ret = add(rr)}
60
+ return ret
61
+ end
62
+ # r = RR.create(r.to_s) # clone the record
63
+ r = nil
64
+ if do_clone
65
+ r = rin.clone
66
+ else
67
+ r = rin
68
+ end
69
+ if (@rrs.size() == 0) # && !(r.type == Types.RRSIG))
70
+ return privateAdd(r)
71
+ end
72
+ # Check the type, klass and ttl are correct
73
+ first = @rrs[0]
74
+ if (!r.sameRRset(first))
75
+ return false
76
+ # raise ArgumentError.new("record does not match rrset")
77
+ end
78
+
79
+ if (!(r.type == Types::RRSIG) && (!(first.type == Types::RRSIG)))
80
+ if (r.ttl != first.ttl) # RFC2181, section 5.2
81
+ if (r.ttl > first.ttl)
82
+ r.ttl=(first.ttl)
83
+ else
84
+ @rrs.each do |rr|
85
+ rr.ttl = r.ttl
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ return privateAdd(r)
92
+ # return true
93
+ end
94
+
95
+ def <=>(other)
96
+ # return 1 if ((!other) || !(other.name) || !(other.type))
97
+ # return -1 if (!@name)
98
+ if (name.canonical == other.name.canonical)
99
+ return type.code <=> other.type.code
100
+ else
101
+ return name <=> other.name
102
+ end
103
+ end
104
+
105
+ def sort_canonical
106
+ # Make a list, for all the RRs, where each RR contributes
107
+ # the canonical RDATA encoding
108
+ canonical_rrs = {}
109
+ self.rrs.each do |rr|
110
+ data = MessageEncoder.new {|msg|
111
+ rr.encode_rdata(msg, true)
112
+ }.to_s
113
+ canonical_rrs[data] = rr
114
+ end
115
+
116
+ return_rrs = RRSet.new
117
+ canonical_rrs.keys.sort.each { |rdata|
118
+ return_rrs.add(canonical_rrs[rdata], false)
119
+ }
120
+ return return_rrs
121
+ end
122
+
123
+ def ==(other)
124
+ return false unless other.instance_of?RRSet
125
+ return false if (other.sigs.length != self.sigs.length)
126
+ return false if (other.rrs.length != self.rrs.length)
127
+ return false if (other.ttl != self.ttl)
128
+ otherrrs = other.rrs
129
+ self.rrs.each {|rr|
130
+ return false if (!otherrrs.include?rr)
131
+ }
132
+ othersigs= other.sigs
133
+ self.sigs.each {|sig|
134
+ return false if (!othersigs.include?sig)
135
+ }
136
+ return true
137
+ end
138
+ # Delete the RR from this RRSet
139
+ def delete(rr)
140
+ @rrs.delete(rr)
141
+ end
142
+ def each
143
+ @rrs.each do |rr|
144
+ yield rr
145
+ end
146
+ end
147
+ def [](index)
148
+ return @rrs[index]
149
+ end
150
+ # Return the type of this RRSet
151
+ def type
152
+ if (@rrs[0])
153
+ return @rrs[0].type
154
+ end
155
+ return nil
156
+ end
157
+ # Return the klass of this RRSet
158
+ def klass
159
+ return @rrs[0].klass
160
+ end
161
+ # Return the ttl of this RRSet
162
+ def ttl
163
+ return @rrs[0].ttl
164
+ end
165
+ def ttl=(ttl)
166
+ [rrs, sigs].each {|rrs|
167
+ rrs.each {|rr|
168
+ rr.ttl = ttl
169
+ }
170
+ }
171
+ end
172
+ def name
173
+ if (@rrs[0])
174
+ return @rrs[0].name
175
+ else
176
+ return nil
177
+ end
178
+ end
179
+ def to_s
180
+ ret = ""
181
+ each {|rec|
182
+ ret += rec.to_s + "\n"
183
+ }
184
+ return ret
185
+ end
186
+ def length
187
+ return @rrs.length
188
+ end
189
+ end
190
+ end
@@ -1,67 +1,67 @@
1
- #--
2
- #Copyright 2007 Nominet UK
3
- #
4
- #Licensed under the Apache License, Version 2.0 (the "License");
5
- #you may not use this file except in compliance with the License.
6
- #You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- #Unless required by applicable law or agreed to in writing, software
11
- #distributed under the License is distributed on an "AS IS" BASIS,
12
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- #See the License for the specific language governing permissions and
14
- #limitations under the License.
15
- #++
16
- module Dnsruby
17
- class RR
18
- #Class for DNS Route Through (RT) resource records.
19
- #RFC 1183 Section 3.3
20
- class RT < RR
21
- ClassValue = nil #:nodoc: all
22
- TypeValue = Types::RT #:nodoc: all
23
-
24
- #The preference for this route.
25
- attr_accessor :preference
26
-
27
- #The domain name of the intermediate host.
28
- attr_accessor :intermediate
29
-
30
- def from_hash(hash) #:nodoc: all
31
- @preference = hash[:preference]
32
- @intermediate = Name.create(hash[:intermediate])
33
- end
34
-
35
- def from_data(data) #:nodoc: all
36
- @preference, @intermediate = data
37
- end
38
-
39
- def from_string(input) #:nodoc: all
40
- if (input.length > 0)
41
- names = input.split(" ")
42
- @preference = names[0].to_i
43
- @intermediate = Name.create(names[1])
44
- end
45
- end
46
-
47
- def rdata_to_string #:nodoc: all
48
- if (@preference!=nil)
49
- return "#{@preference} #{@intermediate.to_s(true)}"
50
- else
51
- return ""
52
- end
53
- end
54
-
55
- def encode_rdata(msg, canonical = false) #:nodoc: all
56
- msg.put_pack('n', @preference)
57
- msg.put_name(@intermediate, canonical)
58
- end
59
-
60
- def self.decode_rdata(msg) #:nodoc: all
61
- preference, = msg.get_unpack('n')
62
- intermediate = msg.get_name
63
- return self.new([preference, intermediate])
64
- end
65
- end
66
- end
67
- end
1
+ # --
2
+ # Copyright 2007 Nominet UK
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Dnsruby
17
+ class RR
18
+ # Class for DNS Route Through (RT) resource records.
19
+ # RFC 1183 Section 3.3
20
+ class RT < RR
21
+ ClassValue = nil #:nodoc: all
22
+ TypeValue = Types::RT #:nodoc: all
23
+
24
+ # The preference for this route.
25
+ attr_accessor :preference
26
+
27
+ # The domain name of the intermediate host.
28
+ attr_accessor :intermediate
29
+
30
+ def from_hash(hash) #:nodoc: all
31
+ @preference = hash[:preference]
32
+ @intermediate = Name.create(hash[:intermediate])
33
+ end
34
+
35
+ def from_data(data) #:nodoc: all
36
+ @preference, @intermediate = data
37
+ end
38
+
39
+ def from_string(input) #:nodoc: all
40
+ if (input.length > 0)
41
+ names = input.split(" ")
42
+ @preference = names[0].to_i
43
+ @intermediate = Name.create(names[1])
44
+ end
45
+ end
46
+
47
+ def rdata_to_string #:nodoc: all
48
+ if (@preference!=nil)
49
+ return "#{@preference} #{@intermediate.to_s(true)}"
50
+ else
51
+ return ""
52
+ end
53
+ end
54
+
55
+ def encode_rdata(msg, canonical = false) #:nodoc: all
56
+ msg.put_pack('n', @preference)
57
+ msg.put_name(@intermediate, canonical)
58
+ end
59
+
60
+ def self.decode_rdata(msg) #:nodoc: all
61
+ preference, = msg.get_unpack('n')
62
+ intermediate = msg.get_name
63
+ return self.new([preference, intermediate])
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,95 +1,95 @@
1
- #--
2
- #Copyright 2007 Nominet UK
3
- #
4
- #Licensed under the Apache License, Version 2.0 (the "License");
5
- #you may not use this file except in compliance with the License.
6
- #You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- #Unless required by applicable law or agreed to in writing, software
11
- #distributed under the License is distributed on an "AS IS" BASIS,
12
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- #See the License for the specific language governing permissions and
14
- #limitations under the License.
15
- #++
16
- module Dnsruby
17
- class RR
18
- class SOA < RR
19
- ClassValue = nil #:nodoc: all
20
- TypeValue = Types::SOA #:nodoc: all
21
-
22
- #The domain name of the original or primary nameserver for
23
- #this zone.
24
- attr_accessor :mname
25
- #A domain name that specifies the mailbox for the person
26
- #responsible for this zone.
27
- attr_accessor :rname
28
- #The zone's serial number.
29
- attr_accessor :serial
30
- #The zone's refresh interval.
31
- #How often, in seconds, a secondary nameserver is to check for
32
- #updates from the primary nameserver.
33
- attr_accessor :refresh
34
- #The zone's retry interval.
35
- #How often, in seconds, a secondary nameserver is to retry, after a
36
- #failure to check for a refresh
37
- attr_accessor :retry
38
- #The zone's expire interval.
39
- #How often, in seconds, a secondary nameserver is to use the data
40
- #before refreshing from the primary nameserver
41
- attr_accessor :expire
42
- #The minimum (default) TTL for records in this zone.
43
- attr_accessor :minimum
44
-
45
- def from_data(data) #:nodoc: all
46
- @mname, @rname, @serial, @refresh, @retry, @expire, @minimum = data
47
- end
48
-
49
- def from_hash(hash)
50
- @mname = Name.create(hash[:mname])
51
- @rname = Name.create(hash[:rname])
52
- @serial = hash[:serial].to_i
53
- @refresh = hash[:refresh].to_i
54
- @retry = hash[:retry].to_i
55
- @expire = hash[:expire].to_i
56
- @minimum = hash[:minimum].to_i
57
- end
58
-
59
- def from_string(input)
60
- if (input.length > 0)
61
- names = input.split(" ")
62
- @mname = Name.create(names[0])
63
- @rname = Name.create(names[1])
64
- @serial = names[2].to_i
65
- @refresh = names[3].to_i
66
- @retry = names[4].to_i
67
- @expire = names[5].to_i
68
- @minimum = names[6].to_i
69
- end
70
- end
71
-
72
- def rdata_to_string #:nodoc: all
73
- if (@mname!=nil)
74
- return "#{@mname.to_s(true)} #{@rname.to_s(true)} #{@serial} #{@refresh} #{@retry} #{@expire} #{@minimum}"
75
- else
76
- return ""
77
- end
78
- end
79
-
80
- def encode_rdata(msg, canonical=false) #:nodoc: all
81
- msg.put_name(@mname, canonical)
82
- msg.put_name(@rname, canonical)
83
- msg.put_pack('NNNNN', @serial, @refresh, @retry, @expire, @minimum)
84
- end
85
-
86
- def self.decode_rdata(msg) #:nodoc: all
87
- mname = msg.get_name
88
- rname = msg.get_name
89
- serial, refresh, retry_, expire, minimum = msg.get_unpack('NNNNN')
90
- return self.new(
91
- [mname, rname, serial, refresh, retry_, expire, minimum])
92
- end
93
- end
94
- end
1
+ # --
2
+ # Copyright 2007 Nominet UK
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Dnsruby
17
+ class RR
18
+ class SOA < RR
19
+ ClassValue = nil #:nodoc: all
20
+ TypeValue = Types::SOA #:nodoc: all
21
+
22
+ # The domain name of the original or primary nameserver for
23
+ # this zone.
24
+ attr_accessor :mname
25
+ # A domain name that specifies the mailbox for the person
26
+ # responsible for this zone.
27
+ attr_accessor :rname
28
+ # The zone's serial number.
29
+ attr_accessor :serial
30
+ # The zone's refresh interval.
31
+ # How often, in seconds, a secondary nameserver is to check for
32
+ # updates from the primary nameserver.
33
+ attr_accessor :refresh
34
+ # The zone's retry interval.
35
+ # How often, in seconds, a secondary nameserver is to retry, after a
36
+ # failure to check for a refresh
37
+ attr_accessor :retry
38
+ # The zone's expire interval.
39
+ # How often, in seconds, a secondary nameserver is to use the data
40
+ # before refreshing from the primary nameserver
41
+ attr_accessor :expire
42
+ # The minimum (default) TTL for records in this zone.
43
+ attr_accessor :minimum
44
+
45
+ def from_data(data) #:nodoc: all
46
+ @mname, @rname, @serial, @refresh, @retry, @expire, @minimum = data
47
+ end
48
+
49
+ def from_hash(hash)
50
+ @mname = Name.create(hash[:mname])
51
+ @rname = Name.create(hash[:rname])
52
+ @serial = hash[:serial].to_i
53
+ @refresh = hash[:refresh].to_i
54
+ @retry = hash[:retry].to_i
55
+ @expire = hash[:expire].to_i
56
+ @minimum = hash[:minimum].to_i
57
+ end
58
+
59
+ def from_string(input)
60
+ if (input.length > 0)
61
+ names = input.split(" ")
62
+ @mname = Name.create(names[0])
63
+ @rname = Name.create(names[1])
64
+ @serial = names[2].to_i
65
+ @refresh = names[3].to_i
66
+ @retry = names[4].to_i
67
+ @expire = names[5].to_i
68
+ @minimum = names[6].to_i
69
+ end
70
+ end
71
+
72
+ def rdata_to_string #:nodoc: all
73
+ if (@mname!=nil)
74
+ return "#{@mname.to_s(true)} #{@rname.to_s(true)} #{@serial} #{@refresh} #{@retry} #{@expire} #{@minimum}"
75
+ else
76
+ return ""
77
+ end
78
+ end
79
+
80
+ def encode_rdata(msg, canonical=false) #:nodoc: all
81
+ msg.put_name(@mname, canonical)
82
+ msg.put_name(@rname, canonical)
83
+ msg.put_pack('NNNNN', @serial, @refresh, @retry, @expire, @minimum)
84
+ end
85
+
86
+ def self.decode_rdata(msg) #:nodoc: all
87
+ mname = msg.get_name
88
+ rname = msg.get_name
89
+ serial, refresh, retry_, expire, minimum = msg.get_unpack('NNNNN')
90
+ return self.new(
91
+ [mname, rname, serial, refresh, retry_, expire, minimum])
92
+ end
93
+ end
94
+ end
95
95
  end