dns-zonefile 1.1.2 → 1.1.3
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 +4 -4
- data/Dockerfile +1 -1
- data/circle.yml +6 -0
- data/dns-zonefile.gemspec +1 -1
- data/lib/dns/zonefile.rb +51 -67
- data/lib/dns/zonefile.treetop +24 -11
- data/lib/dns/zonefile/version.rb +1 -1
- metadata +4 -4
- data/.travis.yml +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2d2cf8f81008cd088e5a4beb910bdd6fac23bc21
|
4
|
+
data.tar.gz: 9585b78227f0ec5b9fe993c108febfc20962c9fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d361f79d9ea5ff9f0ff49ce4bb21d3c31e2e4794169c752edd78e51f3d0d90641b8bd6eea1d79f1c248ed5031485036f8102ffce5a5942054c9f51d28dc9bcb3
|
7
|
+
data.tar.gz: b281a14ab6d5bfa7cfbfa48f9012daad168ab87ed6bc3bfa2d25c89d581d0127908e5b4fa5e603d427b13de78f770d6815d2bd1d0a0dd7f05231495487f42c28
|
data/Dockerfile
CHANGED
data/circle.yml
ADDED
data/dns-zonefile.gemspec
CHANGED
@@ -19,7 +19,7 @@ This is an attempt to use Ruby parse them into an object graph which can
|
|
19
19
|
be investigated programatically, manipulated, validated or printed into
|
20
20
|
some canonical form.
|
21
21
|
EOD
|
22
|
-
spec.homepage = "
|
22
|
+
spec.homepage = "https://github.com/craigw/dns-zonefile"
|
23
23
|
|
24
24
|
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
25
25
|
# delete this section to allow pushing this gem to any host.
|
data/lib/dns/zonefile.rb
CHANGED
@@ -51,6 +51,7 @@ module DNS
|
|
51
51
|
when 'PTR' then @records << PTR.new(@vars, e)
|
52
52
|
when 'SRV' then @records << SRV.new(@vars, e)
|
53
53
|
when 'SPF' then @records << SPF.new(@vars, e)
|
54
|
+
when 'SSHFP' then @records << SSHFP.new(@vars, e)
|
54
55
|
when 'TXT' then @records << TXT.new(@vars, e)
|
55
56
|
when 'SOA' then ;
|
56
57
|
else
|
@@ -70,34 +71,6 @@ module DNS
|
|
70
71
|
end
|
71
72
|
|
72
73
|
class Record
|
73
|
-
# assign, with handling for '@'
|
74
|
-
def self.writer_for_at(*attribs)
|
75
|
-
attribs.each do |attrib|
|
76
|
-
c = <<-MTH
|
77
|
-
def #{attrib}=(val)
|
78
|
-
@#{attrib} = val.gsub('@', @vars['origin'])
|
79
|
-
end
|
80
|
-
MTH
|
81
|
-
class_eval c, __FILE__, __LINE__
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
# assign, with handling for '@', with inheritance
|
86
|
-
def self.inheriting_writer_for_at(*attribs)
|
87
|
-
attribs.each do |attrib|
|
88
|
-
c = <<-MTH
|
89
|
-
def #{attrib}=(val)
|
90
|
-
if val.strip.empty?
|
91
|
-
@#{attrib} = @vars[:last_host]
|
92
|
-
else
|
93
|
-
@#{attrib} = val.gsub('@', @vars['origin'])
|
94
|
-
end
|
95
|
-
end
|
96
|
-
MTH
|
97
|
-
class_eval c, __FILE__, __LINE__
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
74
|
# assign, with handling for global TTL
|
102
75
|
def self.writer_for_ttl(*attribs)
|
103
76
|
attribs.each do |attrib|
|
@@ -119,22 +92,37 @@ module DNS
|
|
119
92
|
@klass ||= 'IN'
|
120
93
|
end
|
121
94
|
|
95
|
+
private
|
96
|
+
def qualify_host(host)
|
97
|
+
origin = vars['origin']
|
98
|
+
host = vars[:last_host] if host =~ /^\s*$/
|
99
|
+
host = host.gsub(/@/, origin)
|
100
|
+
if host =~ /\.$/
|
101
|
+
host
|
102
|
+
else
|
103
|
+
if origin =~ /^\./
|
104
|
+
host + origin
|
105
|
+
else
|
106
|
+
host + "." + origin
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
attr_accessor :vars
|
111
|
+
|
122
112
|
end
|
123
113
|
|
124
114
|
class SOA < Record
|
125
115
|
attr_accessor :origin, :nameserver, :responsible_party, :serial, :refresh_time, :retry_time, :expiry_time, :nxttl
|
126
116
|
|
127
|
-
writer_for_at :origin, :nameserver, :responsible_party
|
128
|
-
|
129
117
|
def initialize(vars, zonefile_soa=nil)
|
130
118
|
@vars = vars
|
131
119
|
if zonefile_soa
|
132
|
-
self.origin = zonefile_soa.origin.to_s
|
120
|
+
self.origin = qualify_host(zonefile_soa.origin.to_s)
|
133
121
|
@vars[:last_host] = self.origin
|
134
122
|
self.ttl = zonefile_soa.ttl.to_i
|
135
123
|
self.klass = zonefile_soa.klass.to_s
|
136
|
-
|
137
|
-
self.responsible_party = zonefile_soa.rp.to_s
|
124
|
+
self.nameserver = qualify_host(zonefile_soa.ns.to_s)
|
125
|
+
self.responsible_party = qualify_host(zonefile_soa.rp.to_s)
|
138
126
|
self.serial = zonefile_soa.serial.to_i
|
139
127
|
self.refresh_time = zonefile_soa.refresh.to_i
|
140
128
|
self.retry_time = zonefile_soa.reretry.to_i
|
@@ -147,12 +135,10 @@ module DNS
|
|
147
135
|
class A < Record
|
148
136
|
attr_accessor :host, :address
|
149
137
|
|
150
|
-
inheriting_writer_for_at :host
|
151
|
-
|
152
138
|
def initialize(vars, zonefile_record)
|
153
139
|
@vars = vars
|
154
140
|
if zonefile_record
|
155
|
-
self.host = zonefile_record.host.to_s
|
141
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
156
142
|
@vars[:last_host] = self.host
|
157
143
|
self.ttl = zonefile_record.ttl.to_i
|
158
144
|
self.klass = zonefile_record.klass.to_s
|
@@ -167,17 +153,14 @@ module DNS
|
|
167
153
|
class CNAME < Record
|
168
154
|
attr_accessor :host, :domainname
|
169
155
|
|
170
|
-
inheriting_writer_for_at :host
|
171
|
-
writer_for_at :domainname
|
172
|
-
|
173
156
|
def initialize(vars, zonefile_record)
|
174
157
|
@vars = vars
|
175
158
|
if zonefile_record
|
176
|
-
self.host = zonefile_record.host.to_s
|
159
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
177
160
|
@vars[:last_host] = self.host
|
178
161
|
self.ttl = zonefile_record.ttl.to_i
|
179
162
|
self.klass = zonefile_record.klass.to_s
|
180
|
-
self.domainname = zonefile_record.target.to_s
|
163
|
+
self.domainname = qualify_host(zonefile_record.target.to_s)
|
181
164
|
end
|
182
165
|
end
|
183
166
|
|
@@ -188,18 +171,15 @@ module DNS
|
|
188
171
|
class MX < Record
|
189
172
|
attr_accessor :host, :priority, :domainname
|
190
173
|
|
191
|
-
inheriting_writer_for_at :host
|
192
|
-
writer_for_at :domainname
|
193
|
-
|
194
174
|
def initialize(vars, zonefile_record)
|
195
175
|
@vars = vars
|
196
176
|
if zonefile_record
|
197
|
-
self.host = zonefile_record.host.to_s
|
177
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
198
178
|
@vars[:last_host] = self.host
|
199
179
|
self.ttl = zonefile_record.ttl.to_i
|
200
180
|
self.klass = zonefile_record.klass.to_s
|
201
181
|
self.priority = zonefile_record.priority.to_i
|
202
|
-
self.domainname = zonefile_record.exchanger.to_s
|
182
|
+
self.domainname = qualify_host(zonefile_record.exchanger.to_s)
|
203
183
|
end
|
204
184
|
end
|
205
185
|
|
@@ -210,12 +190,10 @@ module DNS
|
|
210
190
|
class NAPTR < Record
|
211
191
|
attr_accessor :host, :data
|
212
192
|
|
213
|
-
inheriting_writer_for_at :host
|
214
|
-
|
215
193
|
def initialize(vars, zonefile_record)
|
216
194
|
@vars = vars
|
217
195
|
if zonefile_record
|
218
|
-
self.host = zonefile_record.host.to_s
|
196
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
219
197
|
@vars[:last_host] = self.host
|
220
198
|
self.ttl = zonefile_record.ttl.to_i
|
221
199
|
self.klass = zonefile_record.klass.to_s
|
@@ -227,17 +205,14 @@ module DNS
|
|
227
205
|
class NS < Record
|
228
206
|
attr_accessor :host, :domainname
|
229
207
|
|
230
|
-
inheriting_writer_for_at :host
|
231
|
-
writer_for_at :domainname
|
232
|
-
|
233
208
|
def initialize(vars, zonefile_record)
|
234
209
|
@vars = vars
|
235
210
|
if zonefile_record
|
236
|
-
self.host = zonefile_record.host.to_s
|
211
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
237
212
|
@vars[:last_host] = self.host
|
238
213
|
self.ttl = zonefile_record.ttl.to_i
|
239
214
|
self.klass = zonefile_record.klass.to_s
|
240
|
-
self.domainname = zonefile_record.nameserver.to_s
|
215
|
+
self.domainname = qualify_host(zonefile_record.nameserver.to_s)
|
241
216
|
end
|
242
217
|
end
|
243
218
|
|
@@ -247,17 +222,14 @@ module DNS
|
|
247
222
|
class PTR < Record
|
248
223
|
attr_accessor :host, :domainname
|
249
224
|
|
250
|
-
inheriting_writer_for_at :host
|
251
|
-
writer_for_at :domainname
|
252
|
-
|
253
225
|
def initialize(vars, zonefile_record)
|
254
226
|
@vars = vars
|
255
227
|
if zonefile_record
|
256
|
-
self.host = zonefile_record.host.to_s
|
228
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
257
229
|
@vars[:last_host] = self.host
|
258
230
|
self.ttl = zonefile_record.ttl.to_i
|
259
231
|
self.klass = zonefile_record.klass.to_s
|
260
|
-
self.domainname = zonefile_record.target.to_s
|
232
|
+
self.domainname = qualify_host(zonefile_record.target.to_s)
|
261
233
|
end
|
262
234
|
end
|
263
235
|
|
@@ -267,35 +239,47 @@ module DNS
|
|
267
239
|
class SRV < Record
|
268
240
|
attr_accessor :host, :priority, :weight, :port, :domainname
|
269
241
|
|
270
|
-
inheriting_writer_for_at :host
|
271
|
-
writer_for_at :domainname
|
272
|
-
|
273
242
|
def initialize(vars, zonefile_record)
|
274
243
|
@vars = vars
|
275
244
|
if zonefile_record
|
276
|
-
self.host = zonefile_record.host.to_s
|
245
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
277
246
|
@vars[:last_host] = self.host
|
278
247
|
self.ttl = zonefile_record.ttl.to_i
|
279
248
|
self.klass = zonefile_record.klass.to_s
|
280
249
|
self.priority = zonefile_record.priority.to_i
|
281
250
|
self.weight = zonefile_record.weight.to_i
|
282
251
|
self.port = zonefile_record.port.to_i
|
283
|
-
self.domainname = zonefile_record.target.to_s
|
252
|
+
self.domainname = qualify_host(zonefile_record.target.to_s)
|
284
253
|
end
|
285
254
|
end
|
286
255
|
|
287
256
|
alias :target :domainname
|
288
257
|
end
|
289
258
|
|
259
|
+
class SSHFP < Record
|
260
|
+
attr_accessor :host, :alg, :fptype, :fp
|
261
|
+
|
262
|
+
def initialize(vars, zonefile_record)
|
263
|
+
@vars = vars
|
264
|
+
if zonefile_record
|
265
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
266
|
+
@vars[:last_host] = self.host
|
267
|
+
self.ttl = zonefile_record.ttl.to_i
|
268
|
+
self.klass = zonefile_record.klass.to_s
|
269
|
+
self.alg = zonefile_record.alg.to_i
|
270
|
+
self.fptype = zonefile_record.fptype.to_i
|
271
|
+
self.fp = zonefile_record.fp.to_s
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
290
276
|
class TXT < Record
|
291
277
|
attr_accessor :host, :data
|
292
278
|
|
293
|
-
inheriting_writer_for_at :host
|
294
|
-
|
295
279
|
def initialize(vars, zonefile_record)
|
296
280
|
@vars = vars
|
297
281
|
if zonefile_record
|
298
|
-
self.host = zonefile_record.host.to_s
|
282
|
+
self.host = qualify_host(zonefile_record.host.to_s)
|
299
283
|
@vars[:last_host] = self.host
|
300
284
|
self.ttl = zonefile_record.ttl.to_i
|
301
285
|
self.klass = zonefile_record.klass.to_s
|
data/lib/dns/zonefile.treetop
CHANGED
@@ -53,7 +53,7 @@ grammar Zonefile
|
|
53
53
|
end
|
54
54
|
|
55
55
|
rule resource_record
|
56
|
-
record:(a_record / aaaa_record / cname_record / mx_record / naptr_record / ns_record / ptr_record / srv_record / spf_record / txt_record / soa_record) space* comment? linebreak {
|
56
|
+
record:(a_record / aaaa_record / cname_record / mx_record / naptr_record / ns_record / ptr_record / srv_record / spf_record / sshfp_record / txt_record / soa_record) space* comment? linebreak {
|
57
57
|
def zone
|
58
58
|
p = parent
|
59
59
|
while p.respond_to?(:parent) && p.parent
|
@@ -221,7 +221,7 @@ grammar Zonefile
|
|
221
221
|
end
|
222
222
|
}
|
223
223
|
end
|
224
|
-
|
224
|
+
|
225
225
|
rule spf_record
|
226
226
|
host space ms_age ttl klass "SPF" space data:txt_data {
|
227
227
|
def to_s
|
@@ -233,7 +233,19 @@ grammar Zonefile
|
|
233
233
|
end
|
234
234
|
}
|
235
235
|
end
|
236
|
-
|
236
|
+
|
237
|
+
rule sshfp_record
|
238
|
+
host space ms_age ttl klass "SSHFP" space alg:integer space fptype:integer space fp:fingerprint {
|
239
|
+
def to_s
|
240
|
+
"#{host} #{ttl} #{klass} SSHFP #{alg} #{fptype} #{fp}"
|
241
|
+
end
|
242
|
+
|
243
|
+
def record_type
|
244
|
+
"SSHFP"
|
245
|
+
end
|
246
|
+
}
|
247
|
+
end
|
248
|
+
|
237
249
|
rule txt_record
|
238
250
|
host space ms_age ttl klass "TXT" space data:ms_txt_data {
|
239
251
|
def to_s
|
@@ -436,14 +448,15 @@ grammar Zonefile
|
|
436
448
|
rule host
|
437
449
|
( ([*a-zA-Z0-9\-\._]+) / "@" / ' ' / "\t" ) {
|
438
450
|
def to_s
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
451
|
+
text_value
|
452
|
+
end
|
453
|
+
}
|
454
|
+
end
|
455
|
+
|
456
|
+
rule fingerprint
|
457
|
+
[a-fA-Z0-9:]+ {
|
458
|
+
def to_s
|
459
|
+
text_value.strip
|
447
460
|
end
|
448
461
|
}
|
449
462
|
end
|
data/lib/dns/zonefile/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dns-zonefile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig R Webster
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: treetop
|
@@ -96,7 +96,6 @@ extra_rdoc_files: []
|
|
96
96
|
files:
|
97
97
|
- ".gitignore"
|
98
98
|
- ".rspec"
|
99
|
-
- ".travis.yml"
|
100
99
|
- Dockerfile
|
101
100
|
- Gemfile
|
102
101
|
- LICENCE
|
@@ -105,6 +104,7 @@ files:
|
|
105
104
|
- TODO
|
106
105
|
- bin/console
|
107
106
|
- bin/setup
|
107
|
+
- circle.yml
|
108
108
|
- dns-zonefile.gemspec
|
109
109
|
- doc/example.com.zone
|
110
110
|
- doc/example2.com.zone
|
@@ -114,7 +114,7 @@ files:
|
|
114
114
|
- lib/dns/zonefile.rb
|
115
115
|
- lib/dns/zonefile.treetop
|
116
116
|
- lib/dns/zonefile/version.rb
|
117
|
-
homepage:
|
117
|
+
homepage: https://github.com/craigw/dns-zonefile
|
118
118
|
licenses: []
|
119
119
|
metadata:
|
120
120
|
allowed_push_host: https://rubygems.org
|
data/.travis.yml
DELETED