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: 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