smart_proxy_dns_powerdns 0.2.0 → 0.2.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5915405ebcc666b7bea1a17d2422b0209e25c140
|
4
|
+
data.tar.gz: 51643c7ca288e9af25a0f3df8fd209b631098b48
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e56cf914dbf2dce5334691d4bf332cf272c47e859402b202453f8998b90a6e993def0a38ca865f7906167d7769c94120b38f7efcf5842dd44a1fcdd583bc75c
|
7
|
+
data.tar.gz: 40b5f8ebac73a321889d4f7e3edeb3e24f25050a4972df7d9a81f7e6ede6fb0ef08cd2c002e62561fd5d9c9cb8f5fb6f67abb571821139e8c3f8cefaadc1972a
|
data/README.md
CHANGED
@@ -62,7 +62,7 @@ First you need to run the smart proxy on `http://localhost:8000` and a powerdns
|
|
62
62
|
|
63
63
|
It is assumed the powerdns instance has both the `example.com` and `in-addr.arpa` domains configured. If not, create them:
|
64
64
|
|
65
|
-
INSERT INTO domains (name, type) VALUES ('example.com', 'master'), ('in-addr.arpa', 'master');
|
65
|
+
INSERT INTO domains (name, type) VALUES ('example.com', 'master'), ('in-addr.arpa', 'master'), ('ip6.arpa', 'master');
|
66
66
|
INSERT INTO records (domain_id, name, type, content) SELECT id domain_id, name, 'SOA', 'ns1.example.com hostmaster.example.com. 0 3600 1800 1209600 3600' FROM domains WHERE NOT EXISTS (SELECT 1 FROM records WHERE records.domain_id=domains.id AND records.name=domains.name AND type='SOA');
|
67
67
|
|
68
68
|
Then run the tests:
|
@@ -22,13 +22,12 @@ module Proxy::Dns::Powerdns
|
|
22
22
|
do_create(fqdn, ip, "A")
|
23
23
|
end
|
24
24
|
|
25
|
-
def create_ptr_record(fqdn,
|
26
|
-
if found = dns_find(
|
27
|
-
raise Proxy::Dns::Collision, "#{
|
25
|
+
def create_ptr_record(fqdn, value)
|
26
|
+
if found = dns_find(value)
|
27
|
+
raise Proxy::Dns::Collision, "#{value} is already in use by #{found}" unless found == fqdn
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
do_create(name, fqdn, "PTR")
|
30
|
+
do_create(value, fqdn, "PTR")
|
32
31
|
end
|
33
32
|
|
34
33
|
def do_create(name, value, type)
|
@@ -40,8 +39,7 @@ module Proxy::Dns::Powerdns
|
|
40
39
|
do_remove(fqdn, "A")
|
41
40
|
end
|
42
41
|
|
43
|
-
def remove_ptr_record(
|
44
|
-
name = ip # Note ip is already in-addr.arpa
|
42
|
+
def remove_ptr_record(name)
|
45
43
|
do_remove(name, "PTR")
|
46
44
|
end
|
47
45
|
|
@@ -7,32 +7,31 @@ class DnsPowerdnsIntegrationTest < Test::Unit::TestCase
|
|
7
7
|
|
8
8
|
def test_forward_dns
|
9
9
|
data = {'fqdn' => fqdn, 'value' => ip, 'type' => 'A'}
|
10
|
+
type = Resolv::DNS::Resource::IN::A
|
11
|
+
expected = type.new(Resolv::IPv4.create(data['value']))
|
10
12
|
|
11
|
-
|
12
|
-
|
13
|
-
Net::HTTP.start(uri.host, uri.port) do |http|
|
14
|
-
request = Net::HTTP::Post.new(smart_proxy_url + 'dns/')
|
15
|
-
request.form_data = data
|
16
|
-
response = http.request request
|
17
|
-
assert_equal(200, response.code.to_i)
|
13
|
+
test_scenario(data, data['fqdn'], type, expected)
|
14
|
+
end
|
18
15
|
|
19
|
-
|
20
|
-
|
16
|
+
def test_reverse_dns_v4
|
17
|
+
data = {'fqdn' => fqdn, 'value' => IPAddr.new(ip).reverse, 'type' => 'PTR'}
|
18
|
+
type = Resolv::DNS::Resource::IN::PTR
|
19
|
+
expected = type.new(Resolv::DNS::Name.create(data['fqdn'] + '.'))
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
assert_equal(200, response.code.to_i)
|
21
|
+
test_scenario(data, data['value'], type, expected)
|
22
|
+
end
|
25
23
|
|
26
|
-
|
24
|
+
def test_reverse_dns_v6
|
25
|
+
data = {'fqdn' => fqdn, 'value' => IPAddr.new(ipv6).reverse, 'type' => 'PTR'}
|
26
|
+
type = Resolv::DNS::Resource::IN::PTR
|
27
|
+
expected = type.new(Resolv::DNS::Name.create(data['fqdn'] + '.'))
|
27
28
|
|
28
|
-
|
29
|
-
assert_equal([], addresses)
|
30
|
-
end
|
29
|
+
test_scenario(data, data['value'], type, expected)
|
31
30
|
end
|
32
31
|
|
33
|
-
|
34
|
-
data = {'fqdn' => fqdn, 'value' => ip, 'type' => 'PTR'}
|
32
|
+
private
|
35
33
|
|
34
|
+
def test_scenario(data, name, type, expected)
|
36
35
|
uri = URI(smart_proxy_url)
|
37
36
|
|
38
37
|
Net::HTTP.start(uri.host, uri.port) do |http|
|
@@ -41,10 +40,7 @@ class DnsPowerdnsIntegrationTest < Test::Unit::TestCase
|
|
41
40
|
response = http.request request
|
42
41
|
assert_equal(200, response.code.to_i)
|
43
42
|
|
44
|
-
|
45
|
-
|
46
|
-
addresses = resolver.getnames(data['value'])
|
47
|
-
assert_equal([Resolv::DNS::Name.create(data['fqdn'] + '.')], addresses, "#{data['value']} should reverse to #{data['fqdn']}")
|
43
|
+
assert_equal([expected], resolver.getresources(name, type))
|
48
44
|
|
49
45
|
request = Net::HTTP::Delete.new(smart_proxy_url + 'dns/' + name)
|
50
46
|
response = http.request request
|
@@ -52,13 +48,10 @@ class DnsPowerdnsIntegrationTest < Test::Unit::TestCase
|
|
52
48
|
|
53
49
|
assert(purge_cache name)
|
54
50
|
|
55
|
-
|
56
|
-
assert_equal([], addresses)
|
51
|
+
assert_equal([], resolver.getresources(name, type))
|
57
52
|
end
|
58
53
|
end
|
59
54
|
|
60
|
-
private
|
61
|
-
|
62
55
|
def resolver
|
63
56
|
Resolv::DNS.new(:nameserver_port => [['127.0.0.1', 5300]])
|
64
57
|
end
|
@@ -76,6 +69,10 @@ class DnsPowerdnsIntegrationTest < Test::Unit::TestCase
|
|
76
69
|
IPAddr.new(rand(2 ** 32), Socket::AF_INET).to_s
|
77
70
|
end
|
78
71
|
|
72
|
+
def ipv6
|
73
|
+
IPAddr.new(rand(2 ** 128), Socket::AF_INET6).to_s
|
74
|
+
end
|
75
|
+
|
79
76
|
def purge_cache name
|
80
77
|
%x{#{ENV['PDNS_CONTROL'] || "pdns_control"} purge "#{name}"}
|
81
78
|
$? == 0
|
@@ -36,21 +36,21 @@ class DnsPowerdnsRecordTest < Test::Unit::TestCase
|
|
36
36
|
def test_create_ptr
|
37
37
|
instance = klass.new
|
38
38
|
|
39
|
-
instance.expects(:dns_find).with('
|
39
|
+
instance.expects(:dns_find).with('1.1.1.10.in-addr.arpa').returns(false)
|
40
40
|
instance.expects(:get_zone).with('1.1.1.10.in-addr.arpa').returns({'id' => 1, 'name' => '1.1.10.in-addr.arpa'})
|
41
41
|
instance.expects(:create_record).with(1, '1.1.1.10.in-addr.arpa', 'PTR', 'test.example.com').returns(true)
|
42
42
|
instance.expects(:rectify_zone).with('1.1.10.in-addr.arpa').returns(true)
|
43
43
|
|
44
|
-
assert instance.create_ptr_record(fqdn,
|
44
|
+
assert instance.create_ptr_record(fqdn, reverse_ip)
|
45
45
|
end
|
46
46
|
|
47
47
|
# Test PTR record creation fails if the record exists
|
48
48
|
def test_create_ptr_conflict
|
49
49
|
instance = klass.new
|
50
50
|
|
51
|
-
instance.expects(:dns_find).with('
|
51
|
+
instance.expects(:dns_find).with('1.1.1.10.in-addr.arpa').returns('test2.example.com')
|
52
52
|
|
53
|
-
assert_raise(Proxy::Dns::Collision) { instance.create_ptr_record(fqdn,
|
53
|
+
assert_raise(Proxy::Dns::Collision) { instance.create_ptr_record(fqdn, reverse_ip) }
|
54
54
|
end
|
55
55
|
|
56
56
|
# Test A record removal
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_proxy_dns_powerdns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ewoud Kohl van Wijngaarden
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|