bind9mgr 0.3.13 → 0.3.14

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/History.txt CHANGED
@@ -87,3 +87,9 @@
87
87
 
88
88
  * Parser fix: TXT records with spaces are parsed without failure
89
89
  * test added
90
+
91
+ === 0.3.14 / 2013-03-05
92
+
93
+ * Parser fix: TXT, SRV, MX parse algorithm rewrited
94
+ * Parser rules definition optimized
95
+ * test zone contents updated
data/lib/bind9mgr.rb CHANGED
@@ -6,7 +6,7 @@ require File.join( File.dirname(__FILE__), 'resource_record' )
6
6
  require File.join( File.dirname(__FILE__), 'parser' )
7
7
 
8
8
  module Bind9mgr
9
- VERSION = '0.3.13'
9
+ VERSION = '0.3.14'
10
10
 
11
11
  ZONES_BIND_SUBDIR = 'primary'
12
12
 
data/lib/parser.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Bind9mgr
2
2
  # this TYPES will be parsed with simplified state_rules chain
3
- TYPES = %w{A CNAME PTR NS SRV} # SOA, MX, TXT - are different
3
+ TYPES = %w{A CNAME PTR NS} # SOA, MX, TXT, SRV - are different
4
4
  class Parser
5
5
 
6
6
  attr_reader :state
@@ -10,26 +10,40 @@ module Bind9mgr
10
10
  @state = :start
11
11
  @result = Zone.new
12
12
 
13
+ @SHARED_RULES = {
14
+ :txt => Proc.new{ |t| t == 'TXT' ? update_last_rr(nil, nil, nil, t, nil) : false },
15
+ :mx => Proc.new{ |t| t == 'MX' ? update_last_rr(nil, nil, nil, t, nil) : false },
16
+ :srv => Proc.new{ |t| t == 'SRV' ? update_last_rr(nil, nil, nil, t, nil) : false }
17
+ }
18
+
13
19
  @STATE_RULES =
14
20
  # [current_state, target_state, proc to perform(token will be passe in)
15
- [ [:start, :origin, Proc.new{ |t| t == '$ORIGIN' }],
16
- [:origin, :last_token_in_a_row, Proc.new{ |t| set_origin t }],
17
- [:start, :ttl, Proc.new{ |t| t == '$TTL' }],
21
+ [ [:origin, :last_token_in_a_row, Proc.new{ |t| set_origin t }],
18
22
  [:ttl, :last_token_in_a_row, Proc.new{ |t| set_ttl t }],
19
23
  [:last_token_in_a_row, :start, Proc.new{ |t| t == "\n" ? true : false }],
20
- [:start, :type, Proc.new{ |t| TYPES.include?(t) ? add_rr(nil, nil, nil, t, nil) : false }],
21
- [:start, :klass, Proc.new{ |t| KLASSES.include?(t) ? add_rr(nil, nil, t, nil, nil) : false }],
22
- [:start, :rttl, Proc.new{ |t| t.match(/^\d+$/) ? add_rr(nil, t, nil, nil, nil) : false }],
23
- [:start, :owner, Proc.new{ |t| add_rr(t, nil, nil, nil, nil) }],
24
24
  [:owner, :rttl, Proc.new{ |t| t.match(/^\d+$/) ? update_last_rr(nil, t, nil, nil, nil) : false }],
25
25
  [:owner, :klass, Proc.new{ |t| KLASSES.include?(t) ? update_last_rr(nil, nil, t, nil, nil) : false }],
26
26
  [:owner, :type, Proc.new{ |t| TYPES.include?(t) ? update_last_rr(nil, nil, nil, t, nil) : false }],
27
- [:owner, :mx, Proc.new{ |t| t == 'MX' ? update_last_rr(nil, nil, nil, t, nil) : false }],
28
- [:owner, :txt, Proc.new{ |t| t == 'TXT' ? update_last_rr(nil, nil, nil, t, nil) : false }],
27
+ [:owner, :mx, @SHARED_RULES[:mx]],
28
+ [:owner, :srv, @SHARED_RULES[:srv]],
29
+ [:owner, :txt, @SHARED_RULES[:txt]],
29
30
  [:rttl, :klass, Proc.new{ |t| KLASSES.include?(t) ? update_last_rr(nil, nil, t, nil, nil) : false }],
31
+ [:rttl, :txt, @SHARED_RULES[:txt]],
32
+ [:rttl, :srv, @SHARED_RULES[:srv]],
33
+ [:klass, :mx, @SHARED_RULES[:mx]],
34
+ [:klass, :txt, @SHARED_RULES[:txt]],
35
+ [:klass, :srv, @SHARED_RULES[:srv]],
30
36
  [:klass, :type, Proc.new{ |t| TYPES.include?(t) ? update_last_rr(nil, nil, nil, t, nil) : false }],
31
- [:type, :last_token_in_a_row, Proc.new{ |t| update_last_rr(nil, nil, nil, nil, t) }],
32
37
  [:klass, :soa, Proc.new{ |t| t == 'SOA' ? update_last_rr(nil, nil, nil, t, nil) : false }],
38
+ [:type, :last_token_in_a_row, Proc.new{ |t| update_last_rr(nil, nil, nil, nil, t) }],
39
+ [:start, :type, Proc.new{ |t| TYPES.include?(t) ? add_rr(nil, nil, nil, t, nil) : false }],
40
+ [:start, :klass, Proc.new{ |t| KLASSES.include?(t) ? add_rr(nil, nil, t, nil, nil) : false }],
41
+ [:start, :rttl, Proc.new{ |t| t.match(/^\d+$/) ? add_rr(nil, t, nil, nil, nil) : false }],
42
+ [:start, :origin, Proc.new{ |t| t == '$ORIGIN' }],
43
+ [:start, :ttl, Proc.new{ |t| t == '$TTL' }],
44
+ [:start, :srv, @SHARED_RULES[:srv]],
45
+ [:start, :txt, @SHARED_RULES[:txt]],
46
+ [:start, :owner, Proc.new{ |t| add_rr(t, nil, nil, nil, nil) }],
33
47
  [:soa, :last_token_in_a_row, Proc.new{ |t| rdata = [t] + @tokens.shift(@tokens.index(')'))
34
48
  rdata.select!{|tt| tt != "\n" }
35
49
  raise ParserError, "Zone parsing error: parentices expected in SOA record.\n#{@content}" if (rdata[2] != '(') && (@tokens.first != ')')
@@ -43,8 +57,8 @@ module Bind9mgr
43
57
  update_last_rr(nil, nil, nil, nil, rdata)
44
58
  @tokens.shift
45
59
  }],
46
- [:klass, :mx, Proc.new{ |t| t == 'MX' ? update_last_rr(nil, nil, nil, t, nil) : false }],
47
60
  [:mx, :last_token_in_a_row, Proc.new{ |t| update_last_rr(nil, nil, nil, nil, [t] + [@tokens.shift]) }],
61
+ [:srv, :last_token_in_a_row, Proc.new{ |t| update_last_rr(nil, nil, nil, nil, [t] + [@tokens.shift(3)]) }],
48
62
  [:txt, :last_token_in_a_row, Proc.new{ |t| update_last_rr(nil, nil, nil, nil, ([t] + [@tokens.shift(@tokens.index("\n"))]).join(" ")) }] # '\t' symbol is lost here! may be a BUG
49
63
  ]
50
64
  end
@@ -84,6 +98,7 @@ module Bind9mgr
84
98
  private
85
99
 
86
100
  def tokenize str
101
+ str.squeeze!("\n\t\r")
87
102
  dirty_tokens = str.gsub(/;.*$/, '').split(/[ \t\r]/)
88
103
 
89
104
  puts dirty_tokens.inspect
@@ -91,8 +106,6 @@ module Bind9mgr
91
106
  tokens = []
92
107
  dirty_tokens.each do |t|
93
108
 
94
-
95
-
96
109
  if t.index("\n")
97
110
  puts "n found: #{t.inspect}"
98
111
  while t.index("\n") do
data/spec/parser_spec.rb CHANGED
@@ -21,6 +21,22 @@ www CNAME @
21
21
  cloud.ru. IN A 192.168.1.1
22
22
  human-txt TXT 'this is text with spases'
23
23
 
24
+
25
+
26
+ dev-office 300 IN TXT 'v=spf1 mx mx:mail.dev-office.o7russia.ru ~all'
27
+ dev-office2 300 TXT 'v=spf2 mx mx:mail.dev-office.o7russia.ru ~all'
28
+ dev-office3 IN TXT 'v=spf3 mx mx:mail.dev-office.o7russia.ru ~all'
29
+ dev-office4 TXT 'v=spf4 mx mx:mail.dev-office.o7russia.ru ~all'
30
+ TXT 'v=spf5 mx mx:mail.dev-office.o7russia.ru ~all'
31
+
32
+ test-srv 444 IN SRV 0 1 555 46.61.233.44
33
+ test-srv2 444 SRV 0 2 555 46.61.233.44
34
+ test-srv3 IN SRV 0 3 555 46.61.233.44
35
+ test-srv4 SRV 0 4 555 46.61.233.44
36
+ SRV 0 5 555 46.61.233.44
37
+
38
+ _sip._tls.dev-office SRV 0 5 443 sip.dev-office
39
+
24
40
  NS ns2.cloud.ru
25
41
  manager IN A 192.168.1.20
26
42
  director IN A 192.168.1.23
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bind9mgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.13
4
+ version: 0.3.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-13 00:00:00.000000000 Z
12
+ date: 2013-03-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rdoc