zonefile 1.02 → 1.03
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.
- data/CHANGELOG +4 -0
- data/lib/zonefile/zonefile.rb +27 -6
- data/tests/test-zone.db +3 -2
- data/tests/zonefile.rb +8 -2
- metadata +9 -5
data/CHANGELOG
ADDED
data/lib/zonefile/zonefile.rb
CHANGED
@@ -106,7 +106,15 @@ class Zonefile
|
|
106
106
|
zf.split(/\n/).map do |line|
|
107
107
|
r = line.gsub(/\t/, ' ')
|
108
108
|
r = r.gsub(/\s+/, ' ')
|
109
|
-
|
109
|
+
# FIXME: this is ugly and not accurate, couldn't find proper regex:
|
110
|
+
# Don't strip ';' if it's quoted. Happens a lot in TXT records.
|
111
|
+
(0..(r.length - 1)).find_all { |i| r[i].chr == ';' }.each do |comment_idx|
|
112
|
+
if !r[(comment_idx+1)..-1].index(/['"]/) then
|
113
|
+
r = r[0..(comment_idx-1)]
|
114
|
+
break
|
115
|
+
end
|
116
|
+
end
|
117
|
+
r
|
110
118
|
end.delete_if { |line| line.empty? || line[0].chr == ';'}.join("\n")
|
111
119
|
end
|
112
120
|
|
@@ -228,8 +236,8 @@ class Zonefile
|
|
228
236
|
(#{valid_name})
|
229
237
|
/ix
|
230
238
|
add_record('ptr', :name => $1, :class => $3, :ttl => $2, :host => $4)
|
231
|
-
elsif line =~
|
232
|
-
|
239
|
+
elsif line =~ /^(#{valid_name})? \s* #{ttl_cls} TXT \s+ (.*)$/ix
|
240
|
+
add_record('txt', :name => $1, :ttl => $2, :class => $3, :text => $4.strip)
|
233
241
|
elsif line =~ /\$TTL\s+(#{rr_ttl})/i
|
234
242
|
@ttl = $1
|
235
243
|
end
|
@@ -250,8 +258,6 @@ class Zonefile
|
|
250
258
|
; Database file #{@filename || 'unknown'} for #{@origin || 'unknown'} zone.
|
251
259
|
; Zone version: #{self.soa[:serial]}
|
252
260
|
;
|
253
|
-
#{@origin ? "$ORIGIN #{@origin}" : ''}
|
254
|
-
#{@ttl ? "$TTL #{@ttl}" : ''}
|
255
261
|
#{self.soa[:origin]} #{self.soa[:ttl]} IN SOA #{self.soa[:primary]} #{self.soa[:email]} (
|
256
262
|
#{self.soa[:serial]} ; serial number
|
257
263
|
#{self.soa[:refresh]} ; refresh
|
@@ -259,6 +265,10 @@ class Zonefile
|
|
259
265
|
#{self.soa[:expire]} ; expire
|
260
266
|
#{self.soa[:minimumTTL]} ; minimum TTL
|
261
267
|
)
|
268
|
+
|
269
|
+
#{@origin ? "$ORIGIN #{@origin}" : ''}
|
270
|
+
#{@ttl ? "$TTL #{@ttl}" : ''}
|
271
|
+
|
262
272
|
; Zone NS Records
|
263
273
|
ENDH
|
264
274
|
self.ns.each do |ns|
|
@@ -269,21 +279,32 @@ ENDH
|
|
269
279
|
out << "#{mx[:name]} #{mx[:ttl]} #{mx[:class]} MX #{mx[:pri]} #{mx[:host]}\n"
|
270
280
|
end
|
271
281
|
|
282
|
+
out << "\n; Zone A Records\n" unless self.a.empty?
|
272
283
|
self.a.each do |a|
|
273
284
|
out << "#{a[:name]} #{a[:ttl]} #{a[:class]} A #{a[:host]}\n"
|
274
285
|
end
|
286
|
+
|
287
|
+
out << "\n; Zone CNAME Records\n" unless self.cname.empty?
|
275
288
|
self.cname.each do |cn|
|
276
289
|
out << "#{cn[:name]} #{cn[:ttl]} #{cn[:class]} CNAME #{cn[:host]}\n"
|
277
290
|
end
|
291
|
+
|
292
|
+
out << "\n; Zone AAAA Records\n" unless self.a4.empty?
|
278
293
|
self.a4.each do |a4|
|
279
294
|
out << "#{a4[:name]} #{a4[:ttl]} #{a4[:class]} AAAA #{a4[:host]}\n"
|
280
295
|
end
|
296
|
+
|
297
|
+
out << "\n; Zone TXT Records\n" unless self.txt.empty?
|
281
298
|
self.txt.each do |tx|
|
282
|
-
out << "#{tx[:name]} #{tx[:ttl]} #{tx[:class]} TXT
|
299
|
+
out << "#{tx[:name]} #{tx[:ttl]} #{tx[:class]} TXT #{tx[:text]}\n"
|
283
300
|
end
|
301
|
+
|
302
|
+
out << "\n; Zone SRV Records\n" unless self.srv.empty?
|
284
303
|
self.srv.each do |srv|
|
285
304
|
out << "#{srv[:name]} #{srv[:ttl]} #{srv[:class]} SRV #{srv[:pri]} #{srv[:weight]} #{srv[:port]} #{srv[:host]}\n"
|
286
305
|
end
|
306
|
+
|
307
|
+
out << "\n; Zone PTR Records\n" unless self.ptr.empty?
|
287
308
|
self.ptr.each do |ptr|
|
288
309
|
out << "#{ptr[:name]} #{ptr[:ttl]} #{ptr[:class]} PTR #{ptr[:host]}\n"
|
289
310
|
end
|
data/tests/test-zone.db
CHANGED
@@ -23,12 +23,13 @@ www IN A 127.0.0.1
|
|
23
23
|
43200 IN A 10.0.0.3
|
24
24
|
IN MX 10 10.0.0.4
|
25
25
|
A 10.0.0.5
|
26
|
-
TXT "web
|
26
|
+
TXT "web;server"
|
27
27
|
foo IN A 10.0.0.6
|
28
28
|
mini A 10.0.0.7
|
29
29
|
icarus IN AAAA fe80::0260:83ff:fe7c:3a2a
|
30
30
|
soup IN TXT "This is a text message"
|
31
|
-
txta TXT "
|
31
|
+
txta TXT "t=y; o=-" ; Nasty Comment
|
32
|
+
_kerberos IN TXT maxnet.ao
|
32
33
|
_sip._tcp.example.com. 86400 IN SRV 0 5 5060 sipserver.example.com.
|
33
34
|
12.23.21.23.in-addr.arpa IN PTR www.myhost.example.com.
|
34
35
|
|
data/tests/zonefile.rb
CHANGED
@@ -99,11 +99,17 @@ class TC_Zonefile < Test::Unit::TestCase
|
|
99
99
|
end
|
100
100
|
|
101
101
|
def test_txt
|
102
|
-
|
102
|
+
puts @zf.txt.inspect
|
103
|
+
assert_equal '"web;server"', @zf.txt[0][:text]
|
103
104
|
assert_equal 'IN', @zf.txt[1][:class]
|
104
105
|
assert_equal 'soup', @zf.txt[1][:name]
|
105
106
|
assert_equal 'txta', @zf.txt[2][:name]
|
106
|
-
assert_equal
|
107
|
+
assert_equal 'IN', @zf.txt[3][:class]
|
108
|
+
assert_equal "\"t=y; o=-\"", @zf.txt[2][:text]
|
109
|
+
assert_equal 'maxnet.ao', @zf.txt[3][:text]
|
110
|
+
assert_equal '_kerberos', @zf.txt[3][:name]
|
111
|
+
|
112
|
+
assert_equal 4, @zf.txt.size
|
107
113
|
begin
|
108
114
|
@swap_txt = true
|
109
115
|
swap
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zonefile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: "1.
|
8
|
+
- 3
|
9
|
+
version: "1.03"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Martin Boese
|
@@ -14,11 +14,14 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-10-
|
17
|
+
date: 2011-10-12 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
21
|
-
description:
|
21
|
+
description: |-
|
22
|
+
A library that can create, read, write, modify BIND compatible Zonefiles (RFC1035).
|
23
|
+
Warning: It probably works for most cases, but it might not be able to read all files
|
24
|
+
even if they are valid for bind.
|
22
25
|
email: martin@internet.ao
|
23
26
|
executables: []
|
24
27
|
|
@@ -31,6 +34,7 @@ files:
|
|
31
34
|
- lib/zonefile.rb
|
32
35
|
- tests/test-zone.db
|
33
36
|
- tests/zonefile.rb
|
37
|
+
- CHANGELOG
|
34
38
|
has_rdoc: true
|
35
39
|
homepage: http://zonefile.rubyforge.org/
|
36
40
|
licenses: []
|