dnstraverse 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
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
|