radd 1.5.2 → 1.6.1
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/radd/config.rb +1 -1
- data/lib/radd/nameserver.rb +40 -10
- data/lib/radd/version.rb +1 -1
- data/lib/radd.rb +1 -1
- metadata +1 -6
- data/lib/radd/dns.rb +0 -18
- data/lib/radd/dns_service.rb +0 -12
- data/lib/radd/http.rb +0 -7
- data/lib/radd/http_service.rb +0 -12
- data/lib/radd/tasks.rb +0 -39
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 99edc874f70f644cf13bbf53d5c59b3ac621dc994c385ce89d5f5bff04e8037a
|
|
4
|
+
data.tar.gz: 37456bd0c2e82685f58267af57eda13c25a4b9be214383f8c015bfdd35d153e1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f5e072ab89ccb5963f45896caf52432803f0c73b2e99829d98df93ee1d272bbe7550ae842622baae686f3d6f509c6c0ed6de2a8e2e65ffd2de94b624872d0b9f
|
|
7
|
+
data.tar.gz: '0082acfb267945c00505fddc30ec6babc905eae7c6f8d6f28abc1d1cff99eeff473e0bf5257af6a6eda96842727cfa25f684b81b5b08096bff7e17fa17f2da30'
|
data/lib/radd/config.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Radd
|
|
|
10
10
|
raise ConfigurationError, "could not open config file #{file_path}" unless file_path.file?
|
|
11
11
|
config = YAML.load(file_path.read)
|
|
12
12
|
raise ConfigurationError, 'origin missing' unless config['origin']
|
|
13
|
-
@origin = config['origin']
|
|
13
|
+
@origin = Resolv::DNS::Name.create(config['origin'])
|
|
14
14
|
raise ConfigurationError, 'invalid IP' unless Radd.valid_ip?(config['ip'])
|
|
15
15
|
@ip = config['ip']
|
|
16
16
|
uri = URI.parse("http://#{config['http']}")
|
data/lib/radd/nameserver.rb
CHANGED
|
@@ -6,18 +6,48 @@ module Radd
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def process(name, resource_class, transaction)
|
|
9
|
-
name = name.downcase
|
|
10
|
-
|
|
9
|
+
name = Resolv::DNS::Name.create(name.downcase)
|
|
10
|
+
type = query_type(resource_class)
|
|
11
|
+
if Radd.origin == name
|
|
12
|
+
case type
|
|
13
|
+
when :A then return respond_a(transaction, Radd.ip)
|
|
14
|
+
when :SOA then return transaction.respond!(Radd.mname, Radd.rname, Radd.serial, 10800, 1800, 604800, 1800)
|
|
15
|
+
when :NS then return transaction.respond!(Radd.mname)
|
|
16
|
+
end
|
|
17
|
+
elsif name.subdomain_of?(Radd.origin)
|
|
18
|
+
case type
|
|
19
|
+
when :A then return respond_a(transaction, Radd.query(name))
|
|
20
|
+
when :MX, :AAAA then return transaction.fail!(:NoError)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
transaction.fail!(:Refused)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def query_type(resource_class)
|
|
11
29
|
if Resolv::DNS::Resource::IN::A == resource_class
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
elsif resource_class <= Resolv::DNS::Resource::
|
|
18
|
-
|
|
30
|
+
:A
|
|
31
|
+
elsif resource_class <= Resolv::DNS::Resource::SOA
|
|
32
|
+
:SOA
|
|
33
|
+
elsif resource_class <= Resolv::DNS::Resource::NS
|
|
34
|
+
:NS
|
|
35
|
+
elsif resource_class <= Resolv::DNS::Resource::MX
|
|
36
|
+
:MX
|
|
37
|
+
elsif resource_class <= Resolv::DNS::Resource::IN::AAAA
|
|
38
|
+
:AAAA
|
|
39
|
+
else
|
|
40
|
+
:UNKNOWN
|
|
19
41
|
end
|
|
20
|
-
transaction.fail!(:NXDomain)
|
|
21
42
|
end
|
|
43
|
+
|
|
44
|
+
def respond_a(transaction, ip)
|
|
45
|
+
if ip
|
|
46
|
+
transaction.respond!(ip, ttl: Radd.ttl)
|
|
47
|
+
else
|
|
48
|
+
transaction.fail!(:NXDomain)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
22
52
|
end
|
|
23
53
|
end
|
data/lib/radd/version.rb
CHANGED
data/lib/radd.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: radd
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthias Grosser
|
|
@@ -206,17 +206,12 @@ files:
|
|
|
206
206
|
- lib/radd/cli.rb
|
|
207
207
|
- lib/radd/config.rb
|
|
208
208
|
- lib/radd/db.rb
|
|
209
|
-
- lib/radd/dns.rb
|
|
210
|
-
- lib/radd/dns_service.rb
|
|
211
209
|
- lib/radd/errors.rb
|
|
212
|
-
- lib/radd/http.rb
|
|
213
|
-
- lib/radd/http_service.rb
|
|
214
210
|
- lib/radd/ip.rb
|
|
215
211
|
- lib/radd/middleware.rb
|
|
216
212
|
- lib/radd/nameserver.rb
|
|
217
213
|
- lib/radd/record.rb
|
|
218
214
|
- lib/radd/schema.rb
|
|
219
|
-
- lib/radd/tasks.rb
|
|
220
215
|
- lib/radd/update.rb
|
|
221
216
|
- lib/radd/version.rb
|
|
222
217
|
- lib/radd/webserver.rb
|
data/lib/radd/dns.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
class Radd::DNS < Async::DNS::Server
|
|
2
|
-
def initialize
|
|
3
|
-
super(Async::DNS::Endpoint.for(Radd.host, port: Radd.dns_port))
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
def process(name, resource_class, transaction)
|
|
7
|
-
name = name.downcase
|
|
8
|
-
if Resolv::DNS::Resource::IN::A == resource_class
|
|
9
|
-
if Radd.domain == name
|
|
10
|
-
ip = Radd.ip
|
|
11
|
-
else
|
|
12
|
-
ip = Radd.query(name)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
return transaction.respond!(ip, ttl: 300) if ip
|
|
16
|
-
transaction.fail!(:NXDomain)
|
|
17
|
-
end
|
|
18
|
-
end
|
data/lib/radd/dns_service.rb
DELETED
data/lib/radd/http.rb
DELETED
data/lib/radd/http_service.rb
DELETED
data/lib/radd/tasks.rb
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
namespace :radd do
|
|
2
|
-
task :config do
|
|
3
|
-
Radd::Cli.load_config
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
namespace :db do
|
|
7
|
-
desc 'Create database'
|
|
8
|
-
task create: :config do
|
|
9
|
-
load './db/schema.rb'
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
desc 'Add record'
|
|
14
|
-
task add: :config do
|
|
15
|
-
print "Enter name: "
|
|
16
|
-
name = STDIN.gets.chomp
|
|
17
|
-
print "Password: "
|
|
18
|
-
password = STDIN.gets.chomp
|
|
19
|
-
print "Re-type password: "
|
|
20
|
-
password_confirmation = STDIN.gets.chomp
|
|
21
|
-
raise "Password mismatch!" unless password == password_confirmation
|
|
22
|
-
record = Radd::Record.new(password: password)
|
|
23
|
-
record.name = name
|
|
24
|
-
record.save
|
|
25
|
-
puts "Added record '#{name}'\n"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
desc 'List all records'
|
|
29
|
-
task list: :config do
|
|
30
|
-
puts
|
|
31
|
-
records = Radd::Record.all
|
|
32
|
-
tab = [records.map(&:name).map(&:size).max, 24].compact.max
|
|
33
|
-
records.each do |record|
|
|
34
|
-
puts "#{record.name.ljust(tab)} #{record.ip.to_s.ljust(15)} #{record.updated_at || 'never updated'}\n"
|
|
35
|
-
end
|
|
36
|
-
puts
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
end
|