bind9mgr 0.3.3 → 0.3.4

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
@@ -36,3 +36,12 @@
36
36
  * light bugfixes
37
37
  * adds dot to origin if there is no one
38
38
  * new specs
39
+
40
+ === 0.3.3 / 2011-10-05
41
+
42
+ * some resource record validations added
43
+
44
+ === 0.3.4 / 2011-10-14
45
+
46
+ * A record validations
47
+ * SOA record validations
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.3'
9
+ VERSION = '0.3.4'
10
10
 
11
11
  ZONES_BIND_SUBDIR = 'primary'
12
12
 
@@ -17,27 +17,34 @@ module Bind9mgr
17
17
  def valid?
18
18
  @errors = []
19
19
  (@errors << "Base type_and_rdata_shouldnt_be_blank"; return false) unless @type && @rdata
20
- (@errors << "Owner invalid") if @owner && ( !@owner.kind_of?(String) || (@owner.length < 1) || (@owner.match(/^\d+$/)) || (@owner == 'localhost') )
20
+ (@errors << "Owner invalid") if @owner && ( !@owner.kind_of?(String) || (@owner.match(/^\d+$/)) || (@owner == 'localhost') )
21
21
  (@errors << "Class invalid") if !klass.nil? && !KLASSES.include?( klass )
22
22
  (@errors << "Type not_supported") unless ALLOWED_TYPES.include?( type )
23
23
 
24
24
  validate_method_name = "validate_#{@type.downcase}"
25
-
26
- self.class.send validate_method_name if self.class.respond_to?(validate_method_name)
25
+
26
+ (self.send validate_method_name) if self.respond_to?(validate_method_name)
27
27
 
28
28
  return @errors.size == 0
29
29
  end
30
30
 
31
+ def validate_soa
32
+ (@errors << "Rdata should_be_an_array"; return false) unless @rdata.kind_of? Array
33
+ (@errors << "Rdata should_have_7_elements"; return false) unless @rdata.size == 7
34
+ (@errors << "Base a record validation is under construction") unless @rdata[0].match(/\.$/)
35
+ end
36
+
31
37
  def validate_a
32
- @errors << "Base a record validation is under construction"
38
+ (@errors << "Rdata should_be_a_string"; return false) unless @rdata.kind_of? String
39
+ (@errors << "Rdata should_not_be_blank"; return false) if @rdata.length < 1
33
40
  end
34
41
 
35
42
  def validate_cname
36
- @errors << "Base cname record validation is under construction"
43
+ # @errors << "Base cname record validation is under construction"
37
44
  end
38
45
 
39
46
  def validate_mx
40
- @errors << "Base mx record validation is under construction"
47
+ # @errors << "Base mx record validation is under construction"
41
48
  end
42
49
 
43
50
  ##
data/lib/zone.rb CHANGED
@@ -72,11 +72,18 @@ module Bind9mgr
72
72
  raise ArgumentError, "default_ttl not secified" unless @default_ttl
73
73
 
74
74
  add_default_rrs
75
-
75
+
76
+ rrhash = @records.inject({}){|s, v| s[v.type] ||= []; s[v.type] << v; s}
77
+
76
78
  cont = "; File is under automatic control. Edit with caution.\n"
77
79
  cont << ";;; Zone #{@origin} ;;;" << "\n"
78
80
  cont << "$ORIGIN #{@origin}" << "\n" if @origin
79
81
  cont << "$TTL #{@default_ttl}" << "\n" if @default_ttl
82
+
83
+ rrhash.keys.each do |rr_type|
84
+ cont << ";;; #{rr_type} ;;;\n"
85
+ cont << rrhash[rr_type].map{ |r| r.gen_rr_string }.join
86
+ end
80
87
  cont << @records.map{ |r| r.gen_rr_string }.join
81
88
 
82
89
  cont
@@ -47,6 +47,35 @@ describe Bind9mgr::ResourceRecord do
47
47
  expect { @rr.gen_rr_string }.not_to raise_error
48
48
  end
49
49
 
50
+ describe "A records validation" do
51
+ subject { Bind9mgr::ResourceRecord }
52
+
53
+ it( "with normal data" ) { subject.new( 'sub', nil, 'IN', 'A', '192.168.1.1' ).should be_valid }
54
+ it( "without class" ) { subject.new( 'sub', nil, nil, 'A', '192.168.1.1' ).should be_valid }
55
+ it( "with blank owner" ) { subject.new( '', nil, 'IN', 'A', '192.168.1.1' ).should be_valid }
56
+ it( "with nil owner" ) { subject.new( nil, nil, 'IN', 'A', '192.168.1.1' ).should be_valid }
57
+
58
+ it( "with '1' in all fields" ) { subject.new( '1', '1', '1', 'A', '1' ).should_not be_valid }
59
+ it( "with digit in owner" ) { subject.new( '1', nil, 'IN', 'A', '192.168.1.1' ).should_not be_valid }
60
+ it( "with double digit in owner" ) { subject.new( '11', nil, 'IN', 'A', '192.168.1.1' ).should_not be_valid }
61
+ it( "with blank rdata" ) { subject.new( 'sub', nil, 'IN', 'A', '' ).should_not be_valid }
62
+ it( "with nil rdata" ) { subject.new( 'sub', nil, 'IN', 'A', nil ).should_not be_valid }
63
+ it( "with digit in rdata" ) { subject.new( '1', nil, 'IN', 'A', '1' ).should_not be_valid }
64
+ it( "with char in rdata" ) { subject.new( '1', nil, 'IN', 'A', 's' ).should_not be_valid }
65
+ it( "with punctuation in rdata" ) { subject.new( '1', nil, 'IN', 'A', ',;;;' ).should_not be_valid }
66
+ it( "with wrong class" ) { subject.new( 'sub', nil, 'IN222', 'A', '192.168.1.1' ).should_not be_valid }
67
+ end
68
+
69
+ describe "SOA records validation" do
70
+ subject { Bind9mgr::ResourceRecord }
71
+
72
+ it( "with normal data" ) { subject.new( '@', nil, 'IN', 'SOA', ['qwe.com.', 'support@qwe.com', '123', '123', '123', '123', '123'] ).should be_valid }
73
+ it( "with wrong origin in rdata" ) { subject.new( '@', nil, 'IN', 'SOA', ['qwe', 'qwe', '123', '123', '123', '123', '123'] ).should_not be_valid }
74
+ it( "with wrong rdata size" ) { subject.new( '@', nil, 'IN', 'SOA', ['123', '123', '123'] ).should_not be_valid }
75
+ it( "with wrong rdata kind" ) { subject.new( '@', nil, 'IN', 'SOA', 'qwe' ).should_not be_valid }
76
+
77
+ end
78
+
50
79
  it "shoult have a list of allowed rr types" do
51
80
  Bind9mgr::ALLOWED_TYPES.should be_kind_of(Array)
52
81
  Bind9mgr::ALLOWED_TYPES.count.should > 0
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.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-05 00:00:00.000000000Z
12
+ date: 2011-10-14 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hoe
16
- requirement: &24264520 !ruby/object:Gem::Requirement
16
+ requirement: &17322180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '2.12'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *24264520
24
+ version_requirements: *17322180
25
25
  description: This gem contains some classes to manage bind9 zone files
26
26
  email:
27
27
  - mikhail@mad-box.ru