evt-dns-resolve_host 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a7f2c109900a98a609793db9aa17c57a226d0622
4
+ data.tar.gz: e37d7580573e4e595a3dd1710af66d1d3b3dfb6e
5
+ SHA512:
6
+ metadata.gz: 958116b8dc08f84892e3847f93fd266908408df50916271b096af5b5e93e32b40dc8a6c72eea054d5c19ca649d024f8d83a00c6433ec9664bc78a3576a131504
7
+ data.tar.gz: dfbccae87305fdb7b11fdca2cb5883eb65f58a58a778d7ebc1646a6f7bf804b6505d8d39c3f1f833ff813d3e30cbbefe8414e2f85667cbf116cf76d6d59d9c3a
@@ -0,0 +1,13 @@
1
+ module DNS
2
+ class ResolveHost
3
+ module Controls
4
+ module Hostname
5
+ def self.example(prefix=nil)
6
+ prefix ||= "some-hostname"
7
+
8
+ "#{prefix}.example"
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module DNS
2
+ class ResolveHost
3
+ module Controls
4
+ module IPAddress
5
+ def self.example(i=nil)
6
+ i ||= 1
7
+
8
+ ip_address = IPAddr.new "127.0.0.#{i}"
9
+
10
+ ip_address.to_s
11
+ end
12
+
13
+ def self.list(count=nil)
14
+ count ||= 3
15
+
16
+ (1..count).map do |i|
17
+ example i
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,63 @@
1
+ module DNS
2
+ class ResolveHost
3
+ module Controls
4
+ module Server
5
+ def self.start(hostname: nil, ip_addresses: nil, &block)
6
+ hostname ||= Hostname.example
7
+ ip_addresses ||= [IPAddress.example]
8
+
9
+ bind_address = BindAddress.example
10
+ port = Port.example
11
+
12
+ interfaces = [[:udp, bind_address, port], [:tcp, bind_address, port]]
13
+
14
+ Celluloid.logger = Log.get self
15
+
16
+ dns_server = RubyDNS.run_server :listen => interfaces, :asynchronous => true do
17
+ match %r{\A#{Regexp.escape hostname}\z} do |request|
18
+ ip_addresses.each do |ip_address|
19
+ request.respond! ip_address
20
+ end
21
+ end
22
+ end
23
+
24
+ nameserver = Nameserver.new bind_address, port
25
+
26
+ block.(nameserver)
27
+
28
+ # The rubydns library does not properly unbind its server socket when
29
+ # the actor terminates. See the following github issue:
30
+ #
31
+ # https://github.com/ioquatix/rubydns/issues/60
32
+ #
33
+ # The workaround discovered by the person who filed the issue is
34
+ # pasted here. The proper way to stop the DNS server would be this:
35
+ #
36
+ # dns_server.terminate
37
+ #
38
+ # [Nathan Ladd, Fri 30 Dec 2016]
39
+ dns_server.actors.first.links.each(&:terminate)
40
+ end
41
+
42
+ class Log < ::Log
43
+ def tag!(tags)
44
+ tags << :celluloid
45
+ tags << :control_dns_server
46
+ end
47
+ end
48
+
49
+ module BindAddress
50
+ def self.example
51
+ '127.0.0.1'
52
+ end
53
+ end
54
+
55
+ module Port
56
+ def self.example
57
+ 10053
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,16 @@
1
+ require 'dns/resolve_host/controls/ip_address'
2
+ require 'dns/resolve_host/controls/hostname'
3
+
4
+ begin
5
+ require 'rubydns'
6
+ require 'dns/resolve_host/controls/server'
7
+ rescue LoadError
8
+ require 'pathname'
9
+
10
+ log_subject = Pathname.new(__FILE__).relative_path_from(Pathname.new(Dir.pwd))
11
+ logger = DNS::ResolveHost::Log.get log_subject.to_s
12
+
13
+ logger.warn <<~TEXT
14
+ rubydns is not present in the load path. As a result, the control server was not loaded. If the control server is needed, add `rubydns' to the current project.
15
+ TEXT
16
+ end
@@ -0,0 +1,9 @@
1
+ module DNS
2
+ class ResolveHost
3
+ module Defaults
4
+ def self.port
5
+ 53
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module DNS
2
+ class ResolveHost
3
+ class Log < ::Log
4
+ def tag!(tags)
5
+ tags << :dns_resolve_host
6
+ tags << :dns
7
+ tags << :verbose
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module DNS
2
+ class ResolveHost
3
+ Nameserver = Struct.new :ip_address, :port do
4
+ def to_a
5
+ [ip_address, port]
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,47 @@
1
+ module DNS
2
+ class ResolveHost
3
+ include Log::Dependency
4
+
5
+ configure :resolve_host
6
+
7
+ attr_accessor :nameserver
8
+
9
+ def call(hostname, &block)
10
+ if nameserver
11
+ options = { :nameserver_port => [nameserver.to_a] }
12
+ else
13
+ options = nil
14
+ end
15
+
16
+ logger.trace { "Resolving host (#{LogAttributes.get self, hostname})" }
17
+
18
+ Resolv::DNS.open options do |dns|
19
+ block.(dns) if block
20
+
21
+ addresses = dns.getaddresses hostname
22
+
23
+ addresses.map! &:to_s
24
+
25
+ if addresses.empty?
26
+ logger.warn { "Could not resolve host (#{LogAttributes.get self, hostname})" }
27
+ else
28
+ logger.info { "Resolved host (#{LogAttributes.get self, hostname}, Address#{'es' unless addresses.count == 1}: #{addresses * ', '})" }
29
+ end
30
+
31
+ return addresses
32
+ end
33
+ end
34
+
35
+ module LogAttributes
36
+ def self.get(resolve_host, hostname)
37
+ if resolve_host.nameserver
38
+ nameserver = resolve_host.nameserver.to_a * ':'
39
+ else
40
+ nameserver = "(system)"
41
+ end
42
+
43
+ "Hostname: #{hostname}, Nameserver: #{nameserver}"
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ module DNS
2
+ class ResolveHost
3
+ module Substitute
4
+ def self.build
5
+ ResolveHost.new
6
+ end
7
+
8
+ class ResolveHost
9
+ def call(hostname)
10
+ map[hostname]
11
+ end
12
+
13
+ def set(hostname, ip_addresses)
14
+ ip_addresses = Array(ip_addresses)
15
+
16
+ map[hostname] = ip_addresses
17
+
18
+ ip_addresses
19
+ end
20
+
21
+ def map
22
+ @map ||= Hash.new { [] }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ require 'configure'; Configure.activate
2
+ require 'log'
3
+
4
+ require 'dns/resolve_host/log'
5
+
6
+ require 'dns/resolve_host/defaults'
7
+ require 'dns/resolve_host/nameserver'
8
+ require 'dns/resolve_host/resolve_host'
9
+ require 'dns/resolve_host/substitute'
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evt-dns-resolve_host
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - The Eventide Project
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: evt-configure
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: evt-log
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: test_bench
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubydns
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: " "
70
+ email: opensource@eventide-project.org
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - lib/dns/resolve_host.rb
76
+ - lib/dns/resolve_host/controls.rb
77
+ - lib/dns/resolve_host/controls/hostname.rb
78
+ - lib/dns/resolve_host/controls/ip_address.rb
79
+ - lib/dns/resolve_host/controls/server.rb
80
+ - lib/dns/resolve_host/defaults.rb
81
+ - lib/dns/resolve_host/log.rb
82
+ - lib/dns/resolve_host/nameserver.rb
83
+ - lib/dns/resolve_host/resolve_host.rb
84
+ - lib/dns/resolve_host/substitute.rb
85
+ homepage: https://github.com/eventide-project/dns-resolve-host
86
+ licenses:
87
+ - MIT
88
+ metadata: {}
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 2.3.3
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 2.6.8
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: Resolve host names to IP addresses
109
+ test_files: []