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: c0bc4acefdd0c176ea6f1d9fcbb4037f36da5606
4
- data.tar.gz: 4386be7b8b5d77463f91fd005a35735893fa64f4
3
+ metadata.gz: 5915405ebcc666b7bea1a17d2422b0209e25c140
4
+ data.tar.gz: 51643c7ca288e9af25a0f3df8fd209b631098b48
5
5
  SHA512:
6
- metadata.gz: 2a4143021040bf61c3de7509fe63db0c3951cc3bc3a3f42ab8ce3f9e95777228282063801cae652de32b7e8d51e5fe9f18a61b66e5061021fc0934cf05d692b3
7
- data.tar.gz: 6ef93f4db7399b45c31937ba71a5a5fbb208880a5ec503c4a3c82ff7255167850f78ce9a6f7951dc4beb6dc7e612105ac5531116da6be32c6a33140f26e2d237
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, ip)
26
- if found = dns_find(ip)
27
- raise Proxy::Dns::Collision, "#{ip} is already in use by #{found}" unless found == fqdn
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
- name = IPAddr.new(ip).reverse
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(ip)
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
 
@@ -1,7 +1,7 @@
1
1
  module Proxy
2
2
  module Dns
3
3
  module Powerdns
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.1'
5
5
  end
6
6
  end
7
7
  end
@@ -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
- uri = URI(smart_proxy_url)
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
- addresses = resolver.getaddresses(data['fqdn'])
20
- assert_equal([Resolv::IPv4.create(data['value'])], addresses, "#{data['fqdn']} should resolve to #{data['value']}")
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
- request = Net::HTTP::Delete.new(smart_proxy_url + 'dns/' + data['fqdn'])
23
- response = http.request request
24
- assert_equal(200, response.code.to_i)
21
+ test_scenario(data, data['value'], type, expected)
22
+ end
25
23
 
26
- assert(purge_cache data['fqdn'])
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
- addresses = resolver.getaddresses(data['fqdn'])
29
- assert_equal([], addresses)
30
- end
29
+ test_scenario(data, data['value'], type, expected)
31
30
  end
32
31
 
33
- def test_reverse_dns
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
- name = Resolv::IPv4.create(data['value']).to_name.to_s
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
- addresses = resolver.getnames(data['value'])
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('10.1.1.1').returns(false)
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, ip)
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('10.1.1.1').returns('test2.example.com')
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, ip) }
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.0
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-02-21 00:00:00.000000000 Z
11
+ date: 2016-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake