dns_one 0.4.48 → 0.4.49
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dns_one/backend/base.rb +9 -0
- data/lib/dns_one/backend/db.rb +15 -10
- data/lib/dns_one/backend/file.rb +1 -1
- data/lib/dns_one/backend/http_bell.rb +62 -0
- data/lib/dns_one/cache.rb +1 -1
- data/lib/dns_one/version.rb +1 -1
- data/lib/dns_one/zone_search.rb +28 -19
- data/util/dns_one.service +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31952ea93dc7ece574b2a235f1dca11504c4e892
|
4
|
+
data.tar.gz: 9aa0c8f73e8255825d711f94cb574ae84d15ac98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33bda4530037b8037b897a1ec3d2c9a86cfc20d84837b176171c531dbc15447646837848d4a0b85df41730df16d5a2a2916c1647d3bc73ad351f03604a4c1d5a
|
7
|
+
data.tar.gz: 4d12197f714963e6512dae88d456ce914cd16c2fad47f0359b0b9d373780bb858b10b6163c6e2fd192a17e103ab32e5e93c79440ad2d34a81bbeb49bdfebb579
|
data/lib/dns_one/backend/db.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
module DnsOne; module Backend; class DB
|
2
|
+
module DnsOne; module Backend; class DB < Base
|
3
3
|
|
4
4
|
def initialize conf
|
5
5
|
@query = conf.delete :query
|
@@ -7,12 +7,23 @@ module DnsOne; module Backend; class DB
|
|
7
7
|
setup_db
|
8
8
|
end
|
9
9
|
|
10
|
-
def find dom_name
|
10
|
+
def find dom_name
|
11
|
+
query build_query(dom_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Find a dummy zone to make AR/pg load all dependencies
|
15
|
+
def preload_dummy?
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def query sql, tries = 1
|
11
22
|
return if tries > 3
|
12
23
|
|
13
24
|
# http://jakeyesbeck.com/2016/02/14/ruby-threads-and-active-record-connections/
|
14
25
|
res = ActiveRecord::Base.connection_pool.with_connection do
|
15
|
-
ActiveRecord::Base.connection.execute
|
26
|
+
ActiveRecord::Base.connection.execute sql
|
16
27
|
end
|
17
28
|
|
18
29
|
first_record = res&.first
|
@@ -23,17 +34,11 @@ module DnsOne; module Backend; class DB
|
|
23
34
|
Log.e "SQL query error. Trying to reconnect #{tries}. Details:\n#{e.desc}"
|
24
35
|
# http://geoff.evason.name/2015/01/18/postgres-ssl-connection-has-been-closed-unexpectedly
|
25
36
|
ActiveRecord::Base.connection.reconnect!
|
26
|
-
find
|
37
|
+
find sql, (tries+1)
|
27
38
|
rescue => e
|
28
39
|
Log.e "SQL query error. Details:\n#{e.desc}"
|
29
40
|
end
|
30
41
|
|
31
|
-
def allow_cache
|
32
|
-
true
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
42
|
def build_query dom_name
|
38
43
|
@query.sub "'$domain'",
|
39
44
|
ActiveRecord::Base.connection.quote(dom_name)
|
data/lib/dns_one/backend/file.rb
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
|
2
|
+
module DnsOne; module Backend; class HTTPBell < Base
|
3
|
+
|
4
|
+
def initialize conf
|
5
|
+
@conf = conf
|
6
|
+
@domains = {}
|
7
|
+
@last_id = nil
|
8
|
+
update
|
9
|
+
listen_updater_bell
|
10
|
+
end
|
11
|
+
|
12
|
+
def find dom_name
|
13
|
+
@domains[dom_name]
|
14
|
+
end
|
15
|
+
|
16
|
+
def allow_cache
|
17
|
+
false
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def update
|
23
|
+
last_id = @last_id || 0
|
24
|
+
|
25
|
+
url = @conf[:update_cache_url].sub '$id', last_id.to_s
|
26
|
+
|
27
|
+
recs = `curl #{url}`
|
28
|
+
.split("\n")
|
29
|
+
.map{ |r|
|
30
|
+
r.strip.split /\s+/
|
31
|
+
}
|
32
|
+
|
33
|
+
recs.each do |rec|
|
34
|
+
id, domain = rec
|
35
|
+
id = id.to_i
|
36
|
+
@domains[domain] = @conf[:update_cache_record_set]
|
37
|
+
if !@last_id || @last_id < id
|
38
|
+
@last_id = id
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Log.d "#{recs.size} new domains added."
|
43
|
+
end
|
44
|
+
|
45
|
+
def listen_updater_bell
|
46
|
+
unless @conf[:update_cache_bell_port]
|
47
|
+
return
|
48
|
+
end
|
49
|
+
require "socket"
|
50
|
+
dts = TCPServer.new '0.0.0.0', @conf[:update_cache_bell_port]
|
51
|
+
Thread.new do
|
52
|
+
loop do
|
53
|
+
Thread.start(dts.accept) do |s|
|
54
|
+
s.close
|
55
|
+
Log.i "update`ing..."
|
56
|
+
update
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end; end; end
|
data/lib/dns_one/cache.rb
CHANGED
data/lib/dns_one/version.rb
CHANGED
data/lib/dns_one/zone_search.rb
CHANGED
@@ -17,8 +17,9 @@ module DnsOne; class ZoneSearch
|
|
17
17
|
@cache = Cache.new @conf[:cache_max]
|
18
18
|
@ignore_subdomains_re = build_ignore_subdomains_re
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
if @backend.preload_dummy?
|
21
|
+
query 'dummy.com.br', Resolv::DNS::Resource::IN, '1.2.3.4'
|
22
|
+
end
|
22
23
|
|
23
24
|
self
|
24
25
|
end
|
@@ -38,7 +39,7 @@ module DnsOne; class ZoneSearch
|
|
38
39
|
|
39
40
|
# use first record set if rec_set_name == ''
|
40
41
|
rec_set_name = @conf[:record_sets].keys.first if rec_set_name == ''
|
41
|
-
|
42
|
+
|
42
43
|
rec_set = @conf[:record_sets][rec_set_name.to_sym]
|
43
44
|
Log.d "record set #{ rec_set ? 'found' : 'not found' }"
|
44
45
|
return records unless rec_set
|
@@ -81,20 +82,20 @@ module DnsOne; class ZoneSearch
|
|
81
82
|
unless ::File.exists? file
|
82
83
|
Util.die "Domain list file #{file} not found."
|
83
84
|
end
|
84
|
-
Backend::File.new file
|
85
|
+
Backend::File.new file
|
86
|
+
elsif @conf[:backend][:update_cache_url]
|
87
|
+
unless @conf[:backend][:update_cache_record_set]
|
88
|
+
Util.die "backend.update_cache_record_set not set."
|
89
|
+
end
|
90
|
+
Backend::HTTPBell.new @conf[:backend]
|
85
91
|
else
|
86
92
|
Backend::DB.new @conf[:backend]
|
87
93
|
end
|
88
94
|
end
|
89
95
|
|
90
96
|
def find_record_set dom_name
|
91
|
-
use_cache =
|
92
|
-
|
93
|
-
dom_name.sub! /^NC/, ''
|
94
|
-
|
95
|
-
dom_name.downcase!
|
96
|
-
|
97
|
-
dom_name.sub! /\.home$/i, ''
|
97
|
+
dom_name, use_cache = check_debug_tags dom_name
|
98
|
+
dom_name = normalize_domain dom_name
|
98
99
|
|
99
100
|
if @ignore_subdomains_re
|
100
101
|
dom_name.sub! @ignore_subdomains_re, ''
|
@@ -102,22 +103,30 @@ module DnsOne; class ZoneSearch
|
|
102
103
|
|
103
104
|
enabled_cache = use_cache && @backend.allow_cache
|
104
105
|
|
105
|
-
from_cache = false
|
106
|
-
|
107
106
|
if enabled_cache and rec_set = @cache.find(dom_name)
|
108
107
|
Log.d "found in cache (#{@cache.stat})"
|
109
|
-
|
110
|
-
[rec_set, from_cache]
|
108
|
+
[rec_set, true]
|
111
109
|
else
|
112
110
|
if rec_set = @backend.find(dom_name)
|
113
|
-
if enabled_cache
|
114
|
-
|
115
|
-
end
|
116
|
-
[rec_set, from_cache]
|
111
|
+
@cache.add dom_name, rec_set if enabled_cache
|
112
|
+
[rec_set, false]
|
117
113
|
end
|
118
114
|
end
|
119
115
|
end
|
120
116
|
|
117
|
+
def normalize_domain dom_name
|
118
|
+
dom_name.downcase
|
119
|
+
.sub(/\.home$/i, '')
|
120
|
+
end
|
121
|
+
|
122
|
+
def check_debug_tags dom_name
|
123
|
+
use_cache = true
|
124
|
+
if dom_name.sub!(/^NC/, '')
|
125
|
+
use_cache = false
|
126
|
+
end
|
127
|
+
[dom_name, use_cache]
|
128
|
+
end
|
129
|
+
|
121
130
|
def check_record_sets
|
122
131
|
if @conf[:record_sets].blank?
|
123
132
|
Util.die "Record sets cannot be empty. Check file."
|
data/util/dns_one.service
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dns_one
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.49
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Lobato
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -160,8 +160,10 @@ files:
|
|
160
160
|
- exe/dns_one
|
161
161
|
- gempush
|
162
162
|
- lib/dns_one.rb
|
163
|
+
- lib/dns_one/backend/base.rb
|
163
164
|
- lib/dns_one/backend/db.rb
|
164
165
|
- lib/dns_one/backend/file.rb
|
166
|
+
- lib/dns_one/backend/http_bell.rb
|
165
167
|
- lib/dns_one/cache.rb
|
166
168
|
- lib/dns_one/cli.rb
|
167
169
|
- lib/dns_one/core_ext/blank.rb
|