zonefile 1.04 → 1.06
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG +1 -0
- data/lib/zonefile/zonefile.rb +28 -3
- data/tests/test-zone.db +8 -0
- data/tests/zonefile.rb +45 -3
- metadata +25 -46
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 23d7b96f880fc4a87ae278280123e1425b68aa81
|
4
|
+
data.tar.gz: 35387ada562d7ae8cee0dbae606788fbc0862240
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 352fab59555103484bb27a8594d5fefa49aa12c3d46f53256d846deebd2699db7122661184409e116ee692b76dad9d20428a11a4f6f0c80bba596aec3e8b214b
|
7
|
+
data.tar.gz: fa666a85d05633a00cf5ee589919b6ed0ec26f5192ba2bd45ca6a9414e96dc3b8c90b53def3278e2f43f8f0898e6289054bd124d22ddde189279fdce0ed9d27c
|
data/CHANGELOG
CHANGED
data/lib/zonefile/zonefile.rb
CHANGED
@@ -40,8 +40,12 @@
|
|
40
40
|
# - :name, :ttl, :class, :algorithm, :flags, :iterations, :salt, :next, :types
|
41
41
|
# * NSEC3PARAM
|
42
42
|
# - :name, :ttl, :class, :algorithm, :flags, :iterations, :salt
|
43
|
+
# * TLSA
|
44
|
+
# - :name, :ttl, :class, :certificate_usage, :selector, :matching_type, :data
|
43
45
|
# * NAPTR
|
44
46
|
# - :name, :ttl, :class, :order, :preference, :flags, :service, :regexp, :replacement
|
47
|
+
# * SPF
|
48
|
+
# - :name, :ttl, :class, :text
|
45
49
|
#
|
46
50
|
# == Examples
|
47
51
|
#
|
@@ -98,7 +102,7 @@
|
|
98
102
|
|
99
103
|
class Zonefile
|
100
104
|
|
101
|
-
RECORDS = %w{ mx a a4 ns cname txt ptr srv soa ds dnskey rrsig nsec nsec3 nsec3param naptr }
|
105
|
+
RECORDS = %w{ mx a a4 ns cname txt ptr srv soa ds dnskey rrsig nsec nsec3 nsec3param tlsa naptr spf }
|
102
106
|
attr :records
|
103
107
|
attr :soa
|
104
108
|
attr :data
|
@@ -310,6 +314,16 @@ class Zonefile
|
|
310
314
|
add_record( 'rrsig', :name => $1, :ttl => $2, :class => $3, :type_covered => $4, :algorithm => $5,
|
311
315
|
:labels => $6.to_i, :original_ttl => $7.to_i, :expiration => $8.to_i, :inception => $9.to_i,
|
312
316
|
:key_tag => $10.to_i, :signer => $11, :signature => $12.gsub( /\s/,'') )
|
317
|
+
elsif line=~/^(#{valid_name}) \s*
|
318
|
+
#{ttl_cls}
|
319
|
+
TLSA \s
|
320
|
+
(\d+) \s
|
321
|
+
(\d+) \s
|
322
|
+
(\d+) \s
|
323
|
+
#{base64}
|
324
|
+
/ix
|
325
|
+
add_record( 'tlsa', :name => $1, :ttl => $2, :class => $3, :certificate_usage => $4.to_i,
|
326
|
+
:selector => $5.to_i, :matching_type => $6.to_i, :data => $7 )
|
313
327
|
elsif line=~/^(#{valid_name})? \s*
|
314
328
|
#{ttl_cls}
|
315
329
|
NAPTR \s
|
@@ -353,6 +367,8 @@ class Zonefile
|
|
353
367
|
add_record('ptr', :name => $1, :class => $3, :ttl => $2, :host => $4)
|
354
368
|
elsif line =~ /^(#{valid_name})? \s* #{ttl_cls} TXT \s+ (.*)$/ix
|
355
369
|
add_record('txt', :name => $1, :ttl => $2, :class => $3, :text => $4.strip)
|
370
|
+
elsif line =~ /^(#{valid_name})? \s* #{ttl_cls} SPF \s+ (.*)$/ix
|
371
|
+
add_record('spf', :name => $1, :ttl => $2, :class => $3, :text => $4.strip)
|
356
372
|
elsif line =~ /\$TTL\s+(#{rr_ttl})/i
|
357
373
|
@ttl = $1
|
358
374
|
end
|
@@ -383,9 +399,8 @@ class Zonefile
|
|
383
399
|
|
384
400
|
#{@origin ? "$ORIGIN #{@origin}" : ''}
|
385
401
|
#{@ttl ? "$TTL #{@ttl}" : ''}
|
386
|
-
|
387
|
-
; Zone NS Records
|
388
402
|
ENDH
|
403
|
+
out << "\n; Zone NS Records\n" unless self.ns.empty?
|
389
404
|
self.ns.each do |ns|
|
390
405
|
out << "#{ns[:name]} #{ns[:ttl]} #{ns[:class]} NS #{ns[:host]}\n"
|
391
406
|
end
|
@@ -414,6 +429,11 @@ ENDH
|
|
414
429
|
out << "#{tx[:name]} #{tx[:ttl]} #{tx[:class]} TXT #{tx[:text]}\n"
|
415
430
|
end
|
416
431
|
|
432
|
+
out << "\n; Zone SPF Records\n" unless self.spf.empty?
|
433
|
+
self.spf.each do |spf|
|
434
|
+
out << "#{spf[:name]} #{spf[:ttl]} #{spf[:class]} SPF #{spf[:text]}\n"
|
435
|
+
end
|
436
|
+
|
417
437
|
out << "\n; Zone SRV Records\n" unless self.srv.empty?
|
418
438
|
self.srv.each do |srv|
|
419
439
|
out << "#{srv[:name]} #{srv[:ttl]} #{srv[:class]} SRV #{srv[:pri]} #{srv[:weight]} #{srv[:port]} #{srv[:host]}\n"
|
@@ -454,6 +474,11 @@ ENDH
|
|
454
474
|
out << "#{rrsig[:name]} #{rrsig[:ttl]} #{rrsig[:class]} RRSIG #{rrsig[:type_covered]} #{rrsig[:algorithm]} #{rrsig[:labels]} #{rrsig[:original_ttl]} #{rrsig[:expiration]} #{rrsig[:inception]} #{rrsig[:key_tag]} #{rrsig[:signer]} #{rrsig[:signature]}\n"
|
455
475
|
end
|
456
476
|
|
477
|
+
out << "\n; Zone TLSA Records\n" unless self.tlsa.empty?
|
478
|
+
self.tlsa.each do |tlsa|
|
479
|
+
out << "#{tlsa[:name]} #{tlsa[:ttl]} #{tlsa[:class]} TLSA #{tlsa[:certificate_usage]} #{tlsa[:selector]} #{tlsa[:matching_type]} #{tlsa[:data]}\n"
|
480
|
+
end
|
481
|
+
|
457
482
|
out << "\n; Zone NAPTR Records\n" unless self.ds.empty?
|
458
483
|
self.naptr.each do |naptr|
|
459
484
|
out << "#{naptr[:name]} #{naptr[:ttl]} #{naptr[:class]} NAPTR #{naptr[:order]} #{naptr[:preference]} #{naptr[:flags]} #{naptr[:service]} #{naptr[:regexp]} #{naptr[:replacement]}\n"
|
data/tests/test-zone.db
CHANGED
@@ -15,6 +15,7 @@ $ORIGIN test-zone.db
|
|
15
15
|
|
16
16
|
@ IN A 127.0.0.1
|
17
17
|
@ IN MX 10 mail
|
18
|
+
@ IN SPF "v=spf1 mx ~all"
|
18
19
|
ftp IN CNAME www
|
19
20
|
localhost IN A 127.0.0.1
|
20
21
|
mail IN A 127.0.0.1
|
@@ -24,11 +25,13 @@ www IN A 127.0.0.1
|
|
24
25
|
IN MX 10 10.0.0.4
|
25
26
|
A 10.0.0.5
|
26
27
|
TXT "web;server"
|
28
|
+
SPF "v=spf1 -all"
|
27
29
|
foo IN A 10.0.0.6
|
28
30
|
mini A 10.0.0.7
|
29
31
|
icarus IN AAAA fe80::0260:83ff:fe7c:3a2a
|
30
32
|
soup IN TXT "This is a text message"
|
31
33
|
txta TXT "t=y; o=-" ; Nasty Comment
|
34
|
+
elsewhere IN SPF "v=spf1 mx ?all"
|
32
35
|
_kerberos IN TXT maxnet.ao
|
33
36
|
_sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.
|
34
37
|
12.23.21.23.in-addr.arpa IN PTR www.myhost.example.com.
|
@@ -54,4 +57,9 @@ alfa.example.com. 86400 IN NSEC host.example.com. (
|
|
54
57
|
A MX RRSIG NSEC TYPE1234 )
|
55
58
|
IN NSEC3 1 1 12 aabbccdd ( 2vptu5timamqttgl4luu7kg2leoaor3s A RRSIG )
|
56
59
|
IN NSEC3PARAM 1 0 12 aabbccdd
|
60
|
+
_443._tcp.www.example.com. 86400 IN TLSA (
|
61
|
+
1 1 2 92003ba34942dc74152e2f2c408d29ec
|
62
|
+
a5a520e7f2e06bb944f4dca346baf63c
|
63
|
+
1b177615d466f6c4b71c216a50292bd5
|
64
|
+
8c9ebdd2f74e38fe51ffd48c43326cbc )
|
57
65
|
urn.example.com. IN NAPTR 100 50 "s" "http+N2L+N2C+N2R" "" www.example.com.
|
data/tests/zonefile.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
|
3
3
|
|
4
4
|
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
@@ -9,7 +9,7 @@ require 'zonefile'
|
|
9
9
|
|
10
10
|
$zonefile = ARGV[0] || 'test-zone.db'
|
11
11
|
|
12
|
-
class TC_Zonefile <
|
12
|
+
class TC_Zonefile < Minitest::Unit::TestCase
|
13
13
|
|
14
14
|
def setup
|
15
15
|
@zf = Zonefile.from_file(File.dirname(__FILE__) + '/'+$zonefile, 'test-origin')
|
@@ -32,7 +32,7 @@ class TC_Zonefile < Test::Unit::TestCase
|
|
32
32
|
assert_equal 2, @zf.ptr.size
|
33
33
|
assert @zf.ptr[0][:host] == data[0][:host]
|
34
34
|
assert @zf.ptr[1][:name] == data[1][:name]
|
35
|
-
|
35
|
+
assert_raises(NoMethodError) do
|
36
36
|
@zf.dont_exist(123,123,123)
|
37
37
|
end
|
38
38
|
end
|
@@ -132,6 +132,26 @@ class TC_Zonefile < Test::Unit::TestCase
|
|
132
132
|
end unless @swap_txt
|
133
133
|
end
|
134
134
|
|
135
|
+
def test_spf
|
136
|
+
assert_equal '"v=spf1 mx ~all"', @zf.spf[0][:text]
|
137
|
+
assert_equal "IN", @zf.spf[0][:class]
|
138
|
+
assert_equal "@", @zf.spf[0][:name]
|
139
|
+
assert_equal '"v=spf1 -all"', @zf.spf[1][:text]
|
140
|
+
assert_equal 'www', @zf.spf[1][:name]
|
141
|
+
assert_nil @zf.spf[1][:class]
|
142
|
+
assert_equal "elsewhere", @zf.spf[2][:name]
|
143
|
+
assert_equal '"v=spf1 mx ?all"', @zf.spf[2][:text]
|
144
|
+
|
145
|
+
assert_equal 3, @zf.spf.size
|
146
|
+
|
147
|
+
begin
|
148
|
+
@swap_txt = true
|
149
|
+
swap
|
150
|
+
test_txt
|
151
|
+
end unless @swap_txt
|
152
|
+
end
|
153
|
+
|
154
|
+
|
135
155
|
def test_a4
|
136
156
|
assert_equal 'icarus', @zf.a4[0][:name]
|
137
157
|
assert_equal 'IN', @zf.a4[0][:class]
|
@@ -302,6 +322,28 @@ SIGNATURE
|
|
302
322
|
end unless @swap_rrsig
|
303
323
|
end
|
304
324
|
|
325
|
+
def test_tlsa
|
326
|
+
assert_equal "_443._tcp.www.example.com.", @zf.tlsa[0][:name]
|
327
|
+
assert_equal '86400', @zf.srv[0][:ttl]
|
328
|
+
assert_equal 1, @zf.tlsa[0][:certificate_usage]
|
329
|
+
assert_equal 1, @zf.tlsa[0][:selector]
|
330
|
+
assert_equal 2, @zf.tlsa[0][:matching_type]
|
331
|
+
|
332
|
+
sig = <<SIGNATURE.gsub( /\s+/,'').strip
|
333
|
+
92003ba34942dc74152e2f2c408d29ec
|
334
|
+
a5a520e7f2e06bb944f4dca346baf63c
|
335
|
+
1b177615d466f6c4b71c216a50292bd5
|
336
|
+
8c9ebdd2f74e38fe51ffd48c43326cbc
|
337
|
+
SIGNATURE
|
338
|
+
assert_equal sig, @zf.tlsa[0][:data].gsub( /\s+/,'')
|
339
|
+
|
340
|
+
begin
|
341
|
+
@swap_tlsa= true
|
342
|
+
swap
|
343
|
+
test_tlsa
|
344
|
+
end unless @swap_tlsa
|
345
|
+
end
|
346
|
+
|
305
347
|
def test_origin
|
306
348
|
assert_equal 'test-zone.db', @zf.origin
|
307
349
|
swap
|
metadata
CHANGED
@@ -1,71 +1,50 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: zonefile
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 4
|
9
|
-
version: "1.04"
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '1.06'
|
10
5
|
platform: ruby
|
11
|
-
authors:
|
6
|
+
authors:
|
12
7
|
- Martin Boese
|
13
8
|
autorequire:
|
14
9
|
bindir: bin
|
15
10
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2013-02-06 00:00:00 Z
|
11
|
+
date: 2017-06-15 00:00:00.000000000 Z
|
18
12
|
dependencies: []
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
Warning: It probably works for most cases, but it might not be able to read all files
|
23
|
-
even if they are valid for bind.
|
13
|
+
description: "A library that can create, read, write, modify BIND compatible Zonefiles
|
14
|
+
(RFC1035).\nWarning: It probably works for most cases, but it might not be able
|
15
|
+
to read all files \neven if they are valid for bind."
|
24
16
|
email: martin@internet.ao
|
25
17
|
executables: []
|
26
|
-
|
27
18
|
extensions: []
|
28
|
-
|
29
19
|
extra_rdoc_files: []
|
30
|
-
|
31
|
-
|
32
|
-
- lib/zonefile/zonefile.rb
|
20
|
+
files:
|
21
|
+
- CHANGELOG
|
33
22
|
- lib/zonefile.rb
|
23
|
+
- lib/zonefile/zonefile.rb
|
34
24
|
- tests/test-zone.db
|
35
25
|
- tests/zonefile.rb
|
36
|
-
- CHANGELOG
|
37
26
|
homepage: http://zonefile.rubyforge.org/
|
38
|
-
licenses:
|
39
|
-
|
27
|
+
licenses:
|
28
|
+
- MIT
|
29
|
+
metadata: {}
|
40
30
|
post_install_message:
|
41
31
|
rdoc_options: []
|
42
|
-
|
43
|
-
require_paths:
|
32
|
+
require_paths:
|
44
33
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
-
|
47
|
-
requirements:
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
48
36
|
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
version: "0"
|
54
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
-
none: false
|
56
|
-
requirements:
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
57
41
|
- - ">="
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
|
60
|
-
segments:
|
61
|
-
- 0
|
62
|
-
version: "0"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
63
44
|
requirements: []
|
64
|
-
|
65
45
|
rubyforge_project: zonefile
|
66
|
-
rubygems_version:
|
46
|
+
rubygems_version: 2.4.8
|
67
47
|
signing_key:
|
68
|
-
specification_version:
|
48
|
+
specification_version: 4
|
69
49
|
summary: BIND 8/9 Zonefile Reader and Writer
|
70
50
|
test_files: []
|
71
|
-
|