smart_proxy_dns_powerdns 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
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
|