dns_one 0.4.2 → 0.4.3
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/README.md +6 -0
- data/lib/dns_one.rb +9 -3
- data/lib/dns_one/backend/db.rb +5 -1
- data/lib/dns_one/backend/file.rb +14 -5
- data/lib/dns_one/version.rb +1 -1
- data/lib/dns_one/zone_search.rb +15 -6
- data/util/sample_conf.yml +11 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 218dc35c2add52a6bc28230581cf23c36d9ddf3f
|
4
|
+
data.tar.gz: 1de9365403cb1cb20d0ae24858dfbfc06299fd05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e5e40f70701eb9b81e829d46a40d60492b83cf35d918c4a9ce02ea9d63638b5581bf6b88b8229ca1ed7b459a7b1657ead42f34699af88c1107b56be516fe75f
|
7
|
+
data.tar.gz: 13485f2609f753e5ce53c6d78e33551e0e8fdda428edf577b15f277259cbdae469779d1176c9d18f3851993cc024b64361e39896cd7a0e190d76853fa0cf4ae4
|
data/README.md
CHANGED
@@ -34,6 +34,12 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
|
34
34
|
|
35
35
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
36
36
|
|
37
|
+
## Compatibility
|
38
|
+
|
39
|
+
IPV6 error in Ruby 2.3.0:
|
40
|
+
|
41
|
+
variables address, a1 and a2 should`nt be frozen in 2.3.0/lib/ruby/2.3.0/resolv.rb
|
42
|
+
|
37
43
|
## Contributing
|
38
44
|
|
39
45
|
Bug reports and pull requests are welcome on GitHub at https://github.com/tomlobato/dns_one.
|
data/lib/dns_one.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
|
+
# Core
|
2
|
+
require 'syslog'
|
3
|
+
require 'syslog/logger'
|
1
4
|
|
5
|
+
# Gems
|
2
6
|
require 'rubydns'
|
3
7
|
require 'active_record'
|
4
8
|
require 'yaml'
|
5
9
|
require 'rexec'
|
6
|
-
|
7
|
-
|
10
|
+
|
11
|
+
# DnsOne
|
8
12
|
|
9
13
|
require "dns_one/core_extensions"
|
10
14
|
require "dns_one/log"
|
@@ -36,7 +40,7 @@ module DnsOne; class DnsOne
|
|
36
40
|
|
37
41
|
# check_root
|
38
42
|
begin
|
39
|
-
Dir.chdir WORK_DIR
|
43
|
+
Dir.chdir (@conf.config[:work_dir] || WORK_DIR)
|
40
44
|
rescue => e
|
41
45
|
Log.w "Cannot change working dir to #{WORK_DIR}. Will continue in #{Dir.pwd}."
|
42
46
|
end
|
@@ -54,6 +58,8 @@ module DnsOne; class DnsOne
|
|
54
58
|
conf = YAML.load_file conf_file
|
55
59
|
conf.deep_symbolize_keys!
|
56
60
|
|
61
|
+
conf[:config] ||= {}
|
62
|
+
|
57
63
|
OpenStruct.new conf
|
58
64
|
end
|
59
65
|
|
data/lib/dns_one/backend/db.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module Backend; class
|
1
|
+
module Backend; class BackendDB
|
2
2
|
def initialize conf
|
3
3
|
@query = conf.delete :query
|
4
4
|
@db_conf = conf
|
@@ -32,6 +32,10 @@ module Backend; class DB
|
|
32
32
|
record_values&.first
|
33
33
|
end
|
34
34
|
|
35
|
+
def allow_cache
|
36
|
+
true
|
37
|
+
end
|
38
|
+
|
35
39
|
private
|
36
40
|
|
37
41
|
def build_query dom_name
|
data/lib/dns_one/backend/file.rb
CHANGED
@@ -1,22 +1,31 @@
|
|
1
1
|
|
2
|
-
module Backend; class
|
2
|
+
module Backend; class BackendFile
|
3
3
|
def initialize file
|
4
4
|
@domain_map = {}
|
5
|
-
|
5
|
+
load file
|
6
6
|
end
|
7
7
|
|
8
8
|
def find dom_name
|
9
9
|
@domain_map[dom_name.downcase]
|
10
10
|
end
|
11
11
|
|
12
|
+
def allow_cache
|
13
|
+
false
|
14
|
+
end
|
15
|
+
|
12
16
|
private
|
13
17
|
|
14
|
-
def load
|
18
|
+
def load file
|
15
19
|
File.open(file).each_line do |line|
|
20
|
+
line.strip!
|
16
21
|
domain_name, rec_set_name = line
|
17
|
-
.strip
|
18
22
|
.split(/[,\s]+/)
|
19
|
-
|
23
|
+
if domain_name and not domain_name.empty?
|
24
|
+
@domain_map[domain_name.strip.downcase] = rec_set_name&.strip || ''
|
25
|
+
else
|
26
|
+
Log.w "Ignoring #{file} line: #{line}"
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
30
|
+
|
22
31
|
end; end
|
data/lib/dns_one/version.rb
CHANGED
data/lib/dns_one/zone_search.rb
CHANGED
@@ -29,6 +29,10 @@ module DnsOne; class ZoneSearch
|
|
29
29
|
Log.d "record set name #{ rec_set_name ? 'found' : 'not_found' }"
|
30
30
|
rec_set_name or return
|
31
31
|
|
32
|
+
if rec_set_name == ''
|
33
|
+
rec_set_name = @conf.record_sets.keys.first.to_s
|
34
|
+
end
|
35
|
+
|
32
36
|
rec_set = @conf.record_sets[rec_set_name.to_sym]
|
33
37
|
Log.d "record set #{ rec_set ? 'found' : 'not found' }"
|
34
38
|
rec_set or return
|
@@ -55,16 +59,17 @@ module DnsOne; class ZoneSearch
|
|
55
59
|
def set_backend
|
56
60
|
if file = @conf.backend[:file]
|
57
61
|
unless File.exists? file
|
58
|
-
Util.die "
|
62
|
+
Util.die "Domain list file #{file} not found."
|
59
63
|
end
|
60
|
-
Backend::
|
64
|
+
Backend::BackendFile.new file
|
61
65
|
else
|
62
|
-
Backend::
|
66
|
+
Backend::BackendDB.new @conf.backend
|
63
67
|
end
|
64
68
|
end
|
65
69
|
|
66
70
|
def find_record_set dom_name
|
67
|
-
use_cache =
|
71
|
+
use_cache = true
|
72
|
+
use_cache = false if dom_name =~ /^NC/
|
68
73
|
dom_name.sub! /^NC/, ''
|
69
74
|
|
70
75
|
dom_name.downcase!
|
@@ -75,12 +80,16 @@ module DnsOne; class ZoneSearch
|
|
75
80
|
dom_name.sub! @ignore_subdomains_re, ''
|
76
81
|
end
|
77
82
|
|
78
|
-
|
83
|
+
enabled_cache = use_cache && @backend.allow_cache
|
84
|
+
|
85
|
+
if enabled_cache and rec_set = @cache.find(dom_name)
|
79
86
|
Log.d "found in cache"
|
80
87
|
rec_set
|
81
88
|
else
|
82
89
|
if rec_set = @backend.find(dom_name)
|
83
|
-
|
90
|
+
if enabled_cache
|
91
|
+
@cache.add dom_name, rec_set
|
92
|
+
end
|
84
93
|
rec_set
|
85
94
|
end
|
86
95
|
end
|
data/util/sample_conf.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
|
2
2
|
config:
|
3
|
-
run_as: dnsserver
|
4
|
-
|
5
|
-
|
3
|
+
run_as: dnsserver # optional, but highly recommended! adduser --system dnsserver
|
4
|
+
ignore_subdomains: www en it es pt ru fr at # optional
|
5
|
+
# cache_max: 100000 # optional, defaults to 10000
|
6
6
|
|
7
7
|
backend:
|
8
8
|
##############
|
@@ -12,14 +12,17 @@ backend:
|
|
12
12
|
username: db_user
|
13
13
|
password: db_pass
|
14
14
|
pool: 20
|
15
|
+
|
15
16
|
adapter: postgresql
|
16
17
|
host: my-pg-db.com
|
17
18
|
port: 5432
|
19
|
+
|
18
20
|
# adapter: mysql2
|
19
21
|
# host: my-mysql-db.com
|
20
22
|
# port: 3306
|
21
23
|
# # socket: /var/run/mysqld/mysqld.sock"
|
22
|
-
|
24
|
+
|
25
|
+
query: SELECT 'my_set_1' FROM domains WHERE url = $domain LIMIT 1
|
23
26
|
# query: SELECT domains.record_set FROM domains WHERE domain_name = $domain LIMIT 1
|
24
27
|
|
25
28
|
# or...
|
@@ -28,9 +31,9 @@ backend:
|
|
28
31
|
# File backend #
|
29
32
|
################
|
30
33
|
|
31
|
-
# file: /etc/dns_one/
|
34
|
+
# file: /etc/dns_one/domains.csv
|
32
35
|
|
33
|
-
#
|
36
|
+
# domains.csv example (set is optional, if missing the first record_set will be used)):
|
34
37
|
# mydomain.com set1
|
35
38
|
# myotherdomain.com
|
36
39
|
# myotherdomain2.com
|
@@ -38,7 +41,7 @@ backend:
|
|
38
41
|
|
39
42
|
record_sets:
|
40
43
|
|
41
|
-
|
44
|
+
my_set_1:
|
42
45
|
A: 123.234.345.456
|
43
46
|
AAAA: 1234:3c00::f03c:91fa:fec2:15df
|
44
47
|
NS:
|
@@ -54,7 +57,7 @@ record_sets:
|
|
54
57
|
- 200 # minimum The minimum number of seconds to be used for TTL values in RRs.
|
55
58
|
# More about SOA fields on http://ruby-doc.org/stdlib-2.0.0/libdoc/resolv/rdoc/Resolv/DNS/Resource/SOA.html
|
56
59
|
|
57
|
-
|
60
|
+
my_other_set:
|
58
61
|
A: 32.34.54.56
|
59
62
|
AAAA: 9034:3c00::f03c:91fb:fec2:15d0
|
60
63
|
NS:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Lobato
|
@@ -166,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
166
|
version: '0'
|
167
167
|
requirements: []
|
168
168
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.5.
|
169
|
+
rubygems_version: 2.5.2
|
170
170
|
signing_key:
|
171
171
|
specification_version: 4
|
172
172
|
summary: DNS server for many zones sharing only one or few records, written in Ruby.
|