dnstraverse 0.1.8 → 0.1.9
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.
data/lib/dnstraverse/referral.rb
CHANGED
@@ -25,6 +25,7 @@ module DNSTraverse
|
|
25
25
|
class Referral
|
26
26
|
include MessageUtility
|
27
27
|
|
28
|
+
attr_reader :status # :normal, :loop, :noglue
|
28
29
|
attr_reader :server, :serverips, :qname, :qclass, :qtype, :nsatype
|
29
30
|
attr_reader :refid, :refkey, :infocache, :parent, :bailiwick
|
30
31
|
attr_reader :warnings, :children, :parent_ip
|
@@ -85,6 +86,7 @@ module DNSTraverse
|
|
85
86
|
# of a resolution of a referral that didn't have glue records will have
|
86
87
|
# this set to true so that you can distringuish this detail
|
87
88
|
def initialize(args)
|
89
|
+
@status = args[:status] || :normal
|
88
90
|
@resolver = args[:resolver] # Dnsruby::Resolver object
|
89
91
|
@qname = args[:qname]
|
90
92
|
@qclass = args[:qclass] || :IN
|
@@ -191,14 +193,16 @@ module DNSTraverse
|
|
191
193
|
raise "This Referral object has already been resolved" if resolved?
|
192
194
|
if noglue? then
|
193
195
|
# foo.net IN NS ns.foo.net - no IP cached & no glue = failure
|
194
|
-
Log.debug { "
|
196
|
+
Log.debug { "Resolve: #{@server} with a bailiwick referral " +
|
195
197
|
" of #{bailiwick} - no glue record provided" }
|
196
|
-
|
198
|
+
@status = :noglue
|
199
|
+
return EMPTY_ARRAY
|
197
200
|
end
|
198
201
|
if loop? then
|
199
202
|
# b IN NS c.d, d IN NS a.b
|
200
|
-
Log.debug { "Loop reached at server #{server}" }
|
201
|
-
|
203
|
+
Log.debug { "Resolve: Loop reached at server #{server}" }
|
204
|
+
@status = :loop
|
205
|
+
return EMPTY_ARRAY
|
202
206
|
end
|
203
207
|
child_refid = 1
|
204
208
|
starters, newbailiwick = @infocache.get_startservers(@server)
|
@@ -223,7 +227,8 @@ module DNSTraverse
|
|
223
227
|
Log.debug { "Calculating resolution: #{self}" }
|
224
228
|
# create stats_resolve containing all the statistics of the resolution
|
225
229
|
@stats_resolve = Hash.new
|
226
|
-
|
230
|
+
case @status
|
231
|
+
when :noglue # in-bailiwick referral without glue
|
227
232
|
r = DNSTraverse::Response::NoGlue.new(:qname => @qname,
|
228
233
|
:qclass => @qclass,
|
229
234
|
:qtype => @qtype,
|
@@ -232,7 +237,7 @@ module DNSTraverse
|
|
232
237
|
:bailiwick => @bailiwick)
|
233
238
|
@stats_resolve[r.stats_key] = { :prob => 1.0, :response => r,
|
234
239
|
:referral => self }
|
235
|
-
|
240
|
+
when :loop # endless loop, e.g. b. NS c.d, d NS a.b
|
236
241
|
r = DNSTraverse::Response::Loop.new(:qname => @qname,
|
237
242
|
:qclass => @qclass,
|
238
243
|
:qtype => @qtype,
|
@@ -347,7 +352,6 @@ module DNSTraverse
|
|
347
352
|
def resolved?
|
348
353
|
# root-root is always resolved, otherwise check we have IP addresses
|
349
354
|
return true if is_rootroot?
|
350
|
-
return true if @noglue
|
351
355
|
return false if @serverips.nil?
|
352
356
|
return true
|
353
357
|
end
|
@@ -17,7 +17,7 @@ module DNSTraverse
|
|
17
17
|
|
18
18
|
class Response::Loop < Response
|
19
19
|
|
20
|
-
attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server
|
20
|
+
attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server, :status
|
21
21
|
|
22
22
|
def initialize(args)
|
23
23
|
# we queried @ip about @qname/@qclass/@qtype and received @server as a
|
@@ -28,10 +28,6 @@ module DNSTraverse
|
|
28
28
|
@bailiwick = args[:bailiwick]
|
29
29
|
@ip = args[:ip]
|
30
30
|
@server = args[:server]
|
31
|
-
@decoded_query = nil
|
32
|
-
@infocache = nil
|
33
|
-
@starters = nil
|
34
|
-
@starters_bailiwick = nil
|
35
31
|
@status = :loop
|
36
32
|
update_stats_key
|
37
33
|
return self
|
@@ -42,7 +38,7 @@ module DNSTraverse
|
|
42
38
|
end
|
43
39
|
|
44
40
|
def update_stats_key
|
45
|
-
@stats_key = "key:#{@
|
41
|
+
@stats_key = "key:#{@status}:#{@ip}:#{@qname}:#{@qclass}:#{@qtype}:#{@server}:#{@bailiwick}"
|
46
42
|
end
|
47
43
|
|
48
44
|
def to_s
|
@@ -17,7 +17,7 @@ module DNSTraverse
|
|
17
17
|
|
18
18
|
class Response::NoGlue < Response
|
19
19
|
|
20
|
-
attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server
|
20
|
+
attr_reader :qname, :qclass, :qtype, :ip, :bailiwick, :server, :status
|
21
21
|
|
22
22
|
def initialize(args)
|
23
23
|
# we queried @ip about @qname/@qclass/@qtype and received @server as a
|
@@ -28,10 +28,6 @@ module DNSTraverse
|
|
28
28
|
@bailiwick = args[:bailiwick]
|
29
29
|
@ip = args[:ip]
|
30
30
|
@server = args[:server]
|
31
|
-
@decoded_query = nil
|
32
|
-
@infocache = nil
|
33
|
-
@starters = nil
|
34
|
-
@starters_bailiwick = nil
|
35
31
|
@status = :noglue
|
36
32
|
update_stats_key
|
37
33
|
return self
|
@@ -42,7 +38,7 @@ module DNSTraverse
|
|
42
38
|
end
|
43
39
|
|
44
40
|
def update_stats_key
|
45
|
-
@stats_key = "key:#{@
|
41
|
+
@stats_key = "key:#{@status}:#{@ip}:#{@qname}:#{@qclass}:#{@qtype}:#{@server}:#{@bailiwick}"
|
46
42
|
end
|
47
43
|
|
48
44
|
def to_s
|
@@ -51,4 +47,4 @@ module DNSTraverse
|
|
51
47
|
|
52
48
|
end
|
53
49
|
|
54
|
-
end
|
50
|
+
end
|
data/lib/dnstraverse/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dnstraverse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 9
|
10
|
+
version: 0.1.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- James Ponder
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-21 00:00:00 +01:00
|
19
19
|
default_executable: dnstraverse
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|