evt-dns-resolve_host 0.0.0.0 → 0.1.0.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.
- checksums.yaml +4 -4
- data/lib/dns/resolve_host.rb +7 -2
- data/lib/dns/resolve_host/controls/server.rb +1 -3
- data/lib/dns/resolve_host/log_attributes.rb +15 -0
- data/lib/dns/resolve_host/resolution_error.rb +5 -0
- data/lib/dns/resolve_host/resolve_host.rb +48 -21
- data/lib/dns/resolve_host/static_resolver.rb +39 -0
- data/lib/dns/resolve_host/substitute.rb +15 -2
- metadata +6 -4
- data/lib/dns/resolve_host/nameserver.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae6e00ea579cee629e25ccd99a53b4c317c626fe
|
4
|
+
data.tar.gz: b128cc7ae8cbf445fa7d7cfc44e450b8a34b51cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a69ac9ab686e8f9164f63383a192c150a6e806c05bc03abd57fe42df6ea60dce69da04b6e612460002d74186ebd6a9bfeea83bcc887ae8d298f7efb9e4badb29
|
7
|
+
data.tar.gz: 740b17b05105e2246b250bd84c957d94bf6d496568c43d1e338ac686df302524c5211ab838d45c1760ff7e8e4806389ceb2538f618d6b4394bb84d7eb451c363
|
data/lib/dns/resolve_host.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
|
+
require 'ipaddr'
|
2
|
+
require 'resolv'
|
3
|
+
|
1
4
|
require 'configure'; Configure.activate
|
2
|
-
require '
|
5
|
+
require 'settings'; Settings.activate
|
3
6
|
|
4
7
|
require 'dns/resolve_host/log'
|
5
8
|
|
6
9
|
require 'dns/resolve_host/defaults'
|
7
|
-
require 'dns/resolve_host/
|
10
|
+
require 'dns/resolve_host/log_attributes'
|
8
11
|
require 'dns/resolve_host/resolve_host'
|
12
|
+
require 'dns/resolve_host/resolution_error'
|
9
13
|
require 'dns/resolve_host/substitute'
|
14
|
+
require 'dns/resolve_host/static_resolver'
|
@@ -21,9 +21,7 @@ module DNS
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
block.(nameserver)
|
24
|
+
block.(bind_address, port)
|
27
25
|
|
28
26
|
# The rubydns library does not properly unbind its server socket when
|
29
27
|
# the actor terminates. See the following github issue:
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module DNS
|
2
|
+
class ResolveHost
|
3
|
+
module LogAttributes
|
4
|
+
def self.get(resolve_host, hostname)
|
5
|
+
if resolve_host.nameserver_address
|
6
|
+
nameserver = "#{resolve_host.nameserver_address}:#{resolve_host.nameserver_port}"
|
7
|
+
else
|
8
|
+
nameserver = "(system)"
|
9
|
+
end
|
10
|
+
|
11
|
+
"Hostname: #{hostname}, Nameserver: #{nameserver}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -4,44 +4,71 @@ module DNS
|
|
4
4
|
|
5
5
|
configure :resolve_host
|
6
6
|
|
7
|
-
attr_accessor :
|
7
|
+
attr_accessor :nameserver_address
|
8
|
+
attr_writer :nameserver_port
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
dependency :hosts_resolver, Resolv::Hosts
|
11
|
+
|
12
|
+
def self.build(address: nil, port: nil, hosts_file: nil)
|
13
|
+
if address.nil? and not port.nil?
|
14
|
+
raise ArgumentError, "Cannot specify port without address"
|
14
15
|
end
|
15
16
|
|
17
|
+
instance = new
|
18
|
+
|
19
|
+
StaticResolver.configure instance, hosts_file, attr_name: :hosts_resolver
|
20
|
+
|
21
|
+
instance.nameserver_address = address if address
|
22
|
+
instance.nameserver_port = port if port
|
23
|
+
|
24
|
+
instance
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.call(hostname, &block)
|
28
|
+
instance = new
|
29
|
+
instance.(hostname, &block)
|
30
|
+
end
|
31
|
+
|
32
|
+
def call(hostname, &block)
|
16
33
|
logger.trace { "Resolving host (#{LogAttributes.get self, hostname})" }
|
17
34
|
|
18
|
-
Resolv::DNS.open
|
19
|
-
|
35
|
+
Resolv::DNS.open dns_resolver_options do |dns_resolver|
|
36
|
+
resolver = Resolv.new [hosts_resolver, dns_resolver]
|
37
|
+
|
38
|
+
block.(dns_resolver) if block
|
20
39
|
|
21
|
-
addresses =
|
40
|
+
addresses = resolver.getaddresses hostname
|
22
41
|
|
23
42
|
addresses.map! &:to_s
|
24
43
|
|
25
44
|
if addresses.empty?
|
26
|
-
|
27
|
-
|
28
|
-
|
45
|
+
error_message = "Could not resolve host (#{LogAttributes.get self, hostname})"
|
46
|
+
logger.error { error_message }
|
47
|
+
raise ResolutionError, error_message
|
29
48
|
end
|
30
49
|
|
50
|
+
logger.info { "Resolved host (#{LogAttributes.get self, hostname}, Address#{'es' unless addresses.count == 1}: #{addresses * ', '})" }
|
51
|
+
|
31
52
|
return addresses
|
32
53
|
end
|
33
54
|
end
|
34
55
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
"Hostname: #{hostname}, Nameserver: #{nameserver}"
|
56
|
+
def dns_resolver_options
|
57
|
+
if nameserver_address
|
58
|
+
{ :nameserver_port => [nameserver] }
|
59
|
+
else
|
60
|
+
# Resolv::DNS.new expects the options argument to be *nil* when the
|
61
|
+
# system nameservers are meant to be used [Nathan Ladd, Mon 2 Jan 2017]
|
62
|
+
nil
|
44
63
|
end
|
45
64
|
end
|
65
|
+
|
66
|
+
def nameserver
|
67
|
+
[nameserver_address, nameserver_port]
|
68
|
+
end
|
69
|
+
|
70
|
+
def nameserver_port
|
71
|
+
@nameserver_port ||= Defaults.port
|
72
|
+
end
|
46
73
|
end
|
47
74
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module DNS
|
2
|
+
class ResolveHost
|
3
|
+
module StaticResolver
|
4
|
+
def self.get(hosts_file=nil)
|
5
|
+
logger.trace { "Constructing static resolver (HostsFile: #{hosts_file.inspect})" }
|
6
|
+
|
7
|
+
if hosts_file.nil?
|
8
|
+
hosts_file = Resolv::Hosts::DefaultFileName
|
9
|
+
elsif !File.exist?(hosts_file)
|
10
|
+
File.open(hosts_file) { }
|
11
|
+
end
|
12
|
+
|
13
|
+
static_resolver = Resolv::Hosts.new hosts_file
|
14
|
+
|
15
|
+
logger.trace { "Static resolver constructed (HostsFile: #{hosts_file})" }
|
16
|
+
|
17
|
+
static_resolver
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.configure(receiver, hosts_file=nil, attr_name: nil)
|
21
|
+
attr_name ||= :static_resolver
|
22
|
+
|
23
|
+
instance = get hosts_file
|
24
|
+
receiver.public_send "#{attr_name}=", instance
|
25
|
+
instance
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.logger
|
29
|
+
@logger ||= Log.get self
|
30
|
+
end
|
31
|
+
|
32
|
+
module Assertions
|
33
|
+
def file?(file)
|
34
|
+
@filename == file
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -7,7 +7,20 @@ module DNS
|
|
7
7
|
|
8
8
|
class ResolveHost
|
9
9
|
def call(hostname)
|
10
|
-
map
|
10
|
+
if map.key? hostname
|
11
|
+
map[hostname]
|
12
|
+
elsif ip_address? hostname
|
13
|
+
[hostname]
|
14
|
+
else
|
15
|
+
raise ResolutionError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def ip_address?(string)
|
20
|
+
IPAddr.new string
|
21
|
+
true
|
22
|
+
rescue IPAddr::InvalidAddressError
|
23
|
+
false
|
11
24
|
end
|
12
25
|
|
13
26
|
def set(hostname, ip_addresses)
|
@@ -19,7 +32,7 @@ module DNS
|
|
19
32
|
end
|
20
33
|
|
21
34
|
def map
|
22
|
-
@map ||=
|
35
|
+
@map ||= {}
|
23
36
|
end
|
24
37
|
end
|
25
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evt-dns-resolve_host
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Eventide Project
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: evt-configure
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: evt-
|
28
|
+
name: evt-settings
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -79,8 +79,10 @@ files:
|
|
79
79
|
- lib/dns/resolve_host/controls/server.rb
|
80
80
|
- lib/dns/resolve_host/defaults.rb
|
81
81
|
- lib/dns/resolve_host/log.rb
|
82
|
-
- lib/dns/resolve_host/
|
82
|
+
- lib/dns/resolve_host/log_attributes.rb
|
83
|
+
- lib/dns/resolve_host/resolution_error.rb
|
83
84
|
- lib/dns/resolve_host/resolve_host.rb
|
85
|
+
- lib/dns/resolve_host/static_resolver.rb
|
84
86
|
- lib/dns/resolve_host/substitute.rb
|
85
87
|
homepage: https://github.com/eventide-project/dns-resolve-host
|
86
88
|
licenses:
|