inspec 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -2
- data/README.md +21 -7
- data/lib/inspec/resource.rb +1 -0
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/ini.rb +23 -0
- data/lib/resources/json.rb +39 -20
- data/lib/resources/registry_key.rb +32 -11
- data/lib/resources/user.rb +12 -2
- data/test/helper.rb +5 -0
- data/test/integration/cookbooks/os_prepare/files/example.csv +7 -0
- data/test/integration/cookbooks/os_prepare/files/example.ini +6 -0
- data/test/integration/cookbooks/os_prepare/files/example.json +12 -0
- data/test/integration/cookbooks/os_prepare/files/example.yml +7 -0
- data/test/integration/cookbooks/os_prepare/recipes/default.rb +1 -0
- data/test/integration/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb +19 -0
- data/test/integration/cookbooks/os_prepare/recipes/registry_key.rb +5 -0
- data/test/integration/test/integration/default/csv_spec.rb +5 -0
- data/test/integration/test/integration/default/ini_spec.rb +5 -0
- data/test/integration/test/integration/default/json_spec.rb +5 -0
- data/test/integration/test/integration/default/registry_key_spec.rb +14 -0
- data/test/integration/test/integration/default/yaml_spec.rb +5 -0
- data/test/unit/mock/cmd/getent-passwd-jfolmer +1 -0
- data/test/unit/mock/cmd/id-jfolmer +1 -0
- data/test/unit/mock/files/rootwrap.conf +7 -0
- data/test/unit/resources/ini_test.rb +16 -0
- data/test/unit/resources/user_test.rb +13 -0
- metadata +29 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75b5b2cf05d5f27de71c74ba5ee3bf4d8e5ea281
|
4
|
+
data.tar.gz: b1934841d5088956ebc3021d31190d21aa8d3a9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66fe3886fed541edc87ceb0ed0f421fc8d66b4fff67f8b9564627d5f10e4b8b762a0c0be04c8dad76718b9b51d5f70abc6daa5effc95f29403cfa0c01eae207a
|
7
|
+
data.tar.gz: 7da21c7c93b062a6ef3529438ad585dabf7a3ded7aa8fcb67a12aa71aa8b5c4f57631bd4d6385eb6d8a016969329dab984d8509774c9afd5c6963c3508574070
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,26 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [0.9.
|
4
|
-
[Full Changelog](https://github.com/chef/inspec/compare/v0.9.
|
3
|
+
## [0.9.4](https://github.com/chef/inspec/tree/0.9.4) (2015-11-24)
|
4
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.9.3...0.9.4)
|
5
|
+
|
6
|
+
**Fixed bugs:**
|
7
|
+
|
8
|
+
- registry\_key needs to be case insensitive [\#254](https://github.com/chef/inspec/issues/254)
|
9
|
+
- User resource doesn't handle group names with spaces [\#238](https://github.com/chef/inspec/issues/238)
|
10
|
+
|
11
|
+
**Closed issues:**
|
12
|
+
|
13
|
+
- inspec does not extract section name from test file header [\#182](https://github.com/chef/inspec/issues/182)
|
14
|
+
|
15
|
+
**Merged pull requests:**
|
16
|
+
|
17
|
+
- bugfix: user resources support for group with whitespace [\#258](https://github.com/chef/inspec/pull/258) ([chris-rock](https://github.com/chris-rock))
|
18
|
+
- Improve conf file resources \(csv, json, yaml, ini\) [\#257](https://github.com/chef/inspec/pull/257) ([chris-rock](https://github.com/chris-rock))
|
19
|
+
- Bugfix: make registry\_key resource case-insensitive [\#255](https://github.com/chef/inspec/pull/255) ([alexpop](https://github.com/alexpop))
|
20
|
+
- improvement: update install instructions and add notes for windows builds [\#253](https://github.com/chef/inspec/pull/253) ([chris-rock](https://github.com/chris-rock))
|
21
|
+
|
22
|
+
## [v0.9.3](https://github.com/chef/inspec/tree/v0.9.3) (2015-11-20)
|
23
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.9.2...v0.9.3)
|
5
24
|
|
6
25
|
**Implemented enhancements:**
|
7
26
|
|
@@ -19,6 +38,7 @@
|
|
19
38
|
|
20
39
|
**Merged pull requests:**
|
21
40
|
|
41
|
+
- 0.9.3 [\#251](https://github.com/chef/inspec/pull/251) ([arlimus](https://github.com/arlimus))
|
22
42
|
- Introduce automated changelog generation [\#250](https://github.com/chef/inspec/pull/250) ([arlimus](https://github.com/arlimus))
|
23
43
|
- ensure all test directories are on the runner $LOAD\_PATH [\#249](https://github.com/chef/inspec/pull/249) ([schisamo](https://github.com/schisamo))
|
24
44
|
- bugfix: support multiple computed calls to describe [\#247](https://github.com/chef/inspec/pull/247) ([arlimus](https://github.com/arlimus))
|
data/README.md
CHANGED
@@ -39,9 +39,17 @@ inspec exec test.rb -t docker://container_id
|
|
39
39
|
|
40
40
|
## Installation
|
41
41
|
|
42
|
-
|
42
|
+
InSpec requires Ruby ( >1.9 ).
|
43
43
|
|
44
|
-
|
44
|
+
### Install it via rubygems.org
|
45
|
+
|
46
|
+
```bash
|
47
|
+
gem install inspec
|
48
|
+
```
|
49
|
+
|
50
|
+
### Install it from source
|
51
|
+
|
52
|
+
That requires [bundler](http://bundler.io/):
|
45
53
|
|
46
54
|
```bash
|
47
55
|
bundle install
|
@@ -55,16 +63,22 @@ gem build inspec.gemspec
|
|
55
63
|
gem install inspec-*.gem
|
56
64
|
```
|
57
65
|
|
58
|
-
|
66
|
+
On Windows, you need to install [Ruby](http://rubyinstaller.org/downloads/) with [Ruby Development Kit](https://github.com/oneclick/rubyinstaller/wiki/Development-Kit) to build dependencies with its native extensions.
|
59
67
|
|
60
|
-
|
61
|
-
gem install inspec
|
62
|
-
```
|
68
|
+
### Run InSpec
|
63
69
|
|
64
70
|
You should now be able to run:
|
65
71
|
|
66
72
|
```bash
|
67
|
-
inspec --help
|
73
|
+
$ inspec --help
|
74
|
+
Commands:
|
75
|
+
inspec check PATH # verify test structure in PATH
|
76
|
+
inspec detect # detect the target OS
|
77
|
+
inspec exec PATHS # run all test files
|
78
|
+
inspec help [COMMAND] # Describe available commands or one specific command
|
79
|
+
inspec json PATH # read all tests in PATH and generate a JSON profile
|
80
|
+
inspec shell # open an interactive debugging shell
|
81
|
+
inspec version # prints the version of this tool
|
68
82
|
```
|
69
83
|
|
70
84
|
# Examples
|
data/lib/inspec/resource.rb
CHANGED
data/lib/inspec/version.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# author: Christoph Hartmann
|
3
|
+
# author: Dominik Richter
|
4
|
+
|
5
|
+
require 'utils/simpleconfig'
|
6
|
+
|
7
|
+
# Parses a ini file
|
8
|
+
# Usage:
|
9
|
+
# descibe ini do
|
10
|
+
# its("auth_protocol") { should eq "https" }
|
11
|
+
# end
|
12
|
+
class IniConfig < JsonConfig
|
13
|
+
name 'ini'
|
14
|
+
|
15
|
+
# override file load and parse hash with simple config
|
16
|
+
def parse(content)
|
17
|
+
SimpleConfig.new(content).params
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"INI #{@path}"
|
22
|
+
end
|
23
|
+
end
|
data/lib/resources/json.rb
CHANGED
@@ -15,7 +15,21 @@ class JsonConfig < Inspec.resource(1)
|
|
15
15
|
|
16
16
|
def initialize(path)
|
17
17
|
@path = path
|
18
|
-
@
|
18
|
+
@file = inspec.file(@path)
|
19
|
+
@file_content = @file.content
|
20
|
+
|
21
|
+
# check if file is available
|
22
|
+
if !@file.file?
|
23
|
+
skip_resource "Can't find file \"#{@conf_path}\""
|
24
|
+
return @params = {}
|
25
|
+
end
|
26
|
+
|
27
|
+
# check if file is readable
|
28
|
+
if @file_content.empty? && @file.size > 0
|
29
|
+
skip_resource "Can't read file \"#{@conf_path}\""
|
30
|
+
return @params = {}
|
31
|
+
end
|
32
|
+
|
19
33
|
@params = parse(@file_content)
|
20
34
|
end
|
21
35
|
|
@@ -24,21 +38,39 @@ class JsonConfig < Inspec.resource(1)
|
|
24
38
|
JSON.parse(content)
|
25
39
|
end
|
26
40
|
|
41
|
+
def value(key)
|
42
|
+
extract_value(key, @params)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Shorthand to retrieve a parameter name via `#its`.
|
46
|
+
# Example: describe json('file') { its('paramX') { should eq 'Y' } }
|
47
|
+
#
|
48
|
+
# @param [String] name name of the field to retrieve
|
49
|
+
# @return [Object] the value stored at this position
|
50
|
+
def method_missing(*keys)
|
51
|
+
# catch bahavior of rspec its implementation
|
52
|
+
# @see https://github.com/rspec/rspec-its/blob/master/lib/rspec/its.rb#L110
|
53
|
+
keys.shift if keys.is_a?(Array) && keys[0] == :[]
|
54
|
+
value(keys)
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_s
|
58
|
+
"Json #{@path}"
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
27
63
|
def extract_value(keys, value)
|
28
64
|
key = keys.shift
|
29
65
|
return nil if key.nil?
|
30
66
|
|
31
|
-
# check if key is a num, try to extract from array
|
32
|
-
if key.to_i.to_s == key
|
33
|
-
value = value[key.to_i]
|
34
67
|
# if value is an array, iterate over each child
|
35
|
-
|
68
|
+
if value.is_a?(Array)
|
36
69
|
value = value.map { |i|
|
37
70
|
extract_value([key], i)
|
38
71
|
}
|
39
|
-
# normal value extraction
|
40
72
|
else
|
41
|
-
value = value[key].nil? ? nil : value[key]
|
73
|
+
value = value[key.to_s].nil? ? nil : value[key.to_s]
|
42
74
|
end
|
43
75
|
|
44
76
|
# check if further keys exist
|
@@ -48,17 +80,4 @@ class JsonConfig < Inspec.resource(1)
|
|
48
80
|
return value
|
49
81
|
end
|
50
82
|
end
|
51
|
-
|
52
|
-
# Shorthand to retrieve a parameter name via `#its`.
|
53
|
-
# Example: describe json('file') { its('paramX') { should eq 'Y' } }
|
54
|
-
#
|
55
|
-
# @param [String] name name of the field to retrieve
|
56
|
-
# @return [Object] the value stored at this position
|
57
|
-
def method_missing(name)
|
58
|
-
@params[name.to_s]
|
59
|
-
end
|
60
|
-
|
61
|
-
def to_s
|
62
|
-
"Json #{@path}"
|
63
|
-
end
|
64
83
|
end
|
@@ -23,37 +23,36 @@ class RegistryKey < Inspec.resource(1)
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def exists?
|
26
|
-
!
|
26
|
+
!registry_key(@reg_key).nil?
|
27
27
|
end
|
28
28
|
|
29
29
|
def has_value?(value)
|
30
|
-
val =
|
31
|
-
!val.nil? && val
|
30
|
+
val = registry_key(@reg_key)
|
31
|
+
!val.nil? && registry_property_value(val, '(default)') == value ? true : false
|
32
32
|
end
|
33
33
|
|
34
34
|
def has_property?(property_name, property_type = nil)
|
35
|
-
val =
|
36
|
-
!val.nil? &&
|
35
|
+
val = registry_key(@reg_key)
|
36
|
+
!val.nil? && registry_property_exists(val, property_name) && (property_type.nil? || registry_property_type(val, property_name) == map2type(property_type)) ? true : false
|
37
37
|
end
|
38
38
|
|
39
39
|
# deactivate rubocop, because we need to stay compatible with Serverspe
|
40
40
|
# rubocop:disable Style/OptionalArguments
|
41
41
|
def has_property_value?(property_name, property_type = nil, value)
|
42
42
|
# rubocop:enable Style/OptionalArguments
|
43
|
-
val =
|
43
|
+
val = registry_key(@reg_key)
|
44
44
|
|
45
45
|
# convert value to binary if required
|
46
46
|
value = value.bytes if !property_type.nil? && map2type(property_type) == 3 && !value.is_a?(Array)
|
47
47
|
|
48
|
-
!val.nil? && val
|
48
|
+
!val.nil? && registry_property_value(val, property_name) == value && (property_type.nil? || registry_property_type(val, property_name) == map2type(property_type)) ? true : false
|
49
49
|
end
|
50
50
|
|
51
51
|
# returns nil, if not existant or value
|
52
52
|
def method_missing(meth)
|
53
53
|
# get data
|
54
|
-
val =
|
55
|
-
|
56
|
-
val[meth.to_s]['value']
|
54
|
+
val = registry_key(@reg_key)
|
55
|
+
registry_property_value(val, meth)
|
57
56
|
end
|
58
57
|
|
59
58
|
def to_s
|
@@ -62,7 +61,25 @@ class RegistryKey < Inspec.resource(1)
|
|
62
61
|
|
63
62
|
private
|
64
63
|
|
65
|
-
def
|
64
|
+
def registry_property_exists(regkey, property)
|
65
|
+
return false if regkey.nil? || property.nil?
|
66
|
+
# always ensure the key is lower case
|
67
|
+
!regkey[property.to_s.downcase].nil?
|
68
|
+
end
|
69
|
+
|
70
|
+
def registry_property_value(regkey, property)
|
71
|
+
return nil if regkey.nil? || property.nil?
|
72
|
+
# always ensure the key is lower case
|
73
|
+
regkey[property.to_s.downcase]['value']
|
74
|
+
end
|
75
|
+
|
76
|
+
def registry_property_type(regkey, property)
|
77
|
+
return nil if regkey.nil? || property.nil?
|
78
|
+
# always ensure the key is lower case
|
79
|
+
regkey[property.to_s.downcase]['type']
|
80
|
+
end
|
81
|
+
|
82
|
+
def registry_key(path)
|
66
83
|
return @registy_cache if defined?(@registy_cache)
|
67
84
|
|
68
85
|
# load registry key and all properties
|
@@ -87,6 +104,10 @@ class RegistryKey < Inspec.resource(1)
|
|
87
104
|
# return nil if cmd.exit_status != 0, try to parse json
|
88
105
|
begin
|
89
106
|
@registy_cache = JSON.parse(cmd.stdout)
|
107
|
+
# convert keys to lower case
|
108
|
+
@registy_cache = Hash[@registy_cache.map do |key, value|
|
109
|
+
[key.downcase, value]
|
110
|
+
end]
|
90
111
|
rescue JSON::ParserError => _e
|
91
112
|
@registy_cache = nil
|
92
113
|
end
|
data/lib/resources/user.rb
CHANGED
@@ -195,8 +195,7 @@ class UnixUser < UserInfo
|
|
195
195
|
|
196
196
|
# parse words
|
197
197
|
params = SimpleConfig.new(
|
198
|
-
cmd.stdout.chomp,
|
199
|
-
line_separator: ' ',
|
198
|
+
parse_id_entries(cmd.stdout.chomp),
|
200
199
|
assignment_re: /^\s*([^=]*?)\s*=\s*(.*?)\s*$/,
|
201
200
|
group_re: nil,
|
202
201
|
multiple_values: false,
|
@@ -210,6 +209,17 @@ class UnixUser < UserInfo
|
|
210
209
|
groups: parse_value(params['groups']).values,
|
211
210
|
}
|
212
211
|
end
|
212
|
+
|
213
|
+
# splits the results of id into seperate lines
|
214
|
+
def parse_id_entries(raw)
|
215
|
+
data = []
|
216
|
+
until (index = raw.index(/\)\s{1}/)).nil?
|
217
|
+
data.push(raw[0, index+1]) # inclue closing )
|
218
|
+
raw = raw[index+2, raw.length-index-2]
|
219
|
+
end
|
220
|
+
data.push(raw) if !raw.nil?
|
221
|
+
data.join("\n")
|
222
|
+
end
|
213
223
|
end
|
214
224
|
|
215
225
|
class LinuxUser < UnixUser
|
data/test/helper.rb
CHANGED
@@ -91,6 +91,7 @@ class MockLoader
|
|
91
91
|
'example.csv' => mockfile.call('example.csv'),
|
92
92
|
'policyfile.lock.json' => mockfile.call('policyfile.lock.json'),
|
93
93
|
'/sys/class/net/br0/bridge' => mockdir.call(true),
|
94
|
+
'rootwrap.conf' => mockfile.call('rootwrap.conf'),
|
94
95
|
}
|
95
96
|
|
96
97
|
# create all mock commands
|
@@ -156,6 +157,10 @@ class MockLoader
|
|
156
157
|
'id root' => cmd.call('id-root'),
|
157
158
|
'getent passwd root' => cmd.call('getent-passwd-root'),
|
158
159
|
'chage -l root' => cmd.call('chage-l-root'),
|
160
|
+
# user information for ldap test
|
161
|
+
'id jfolmer' => cmd.call('id-jfolmer'),
|
162
|
+
'getent passwd jfolmer' => cmd.call('getent-passwd-jfolmer'),
|
163
|
+
'chage -l jfolmer' => cmd.call('chage-l-root'),
|
159
164
|
# user info for mac
|
160
165
|
'id chartmann' => cmd.call('id-chartmann'),
|
161
166
|
'dscl -q . -read /Users/chartmann NFSHomeDirectory PrimaryGroupID RecordName UniqueID UserShell' => cmd.call('dscl'),
|
@@ -0,0 +1,7 @@
|
|
1
|
+
name,version,license,title,description
|
2
|
+
addressable,2.3.6,Apache 2.0,URI Implementation,"Addressable is a replacement for the URI implementation that is part of
|
3
|
+
Ruby's standard library. It more closely conforms to the relevant RFCs and
|
4
|
+
adds support for IRIs and URI templates."
|
5
|
+
ast,2.0.0,MIT,A library for working with Abstract Syntax Trees.,A library for working with Abstract Syntax Trees.
|
6
|
+
astrolabe,1.3.0,MIT,An object-oriented AST extension for Parser,An object-oriented AST extension for Parser
|
7
|
+
berkshelf,3.2.3,Apache 2.0,"Manages a Cookbook's, or an Application's, Cookbook dependencies","Manages a Cookbook's, or an Application's, Cookbook dependencies"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# author: Christoph Hartmann
|
3
|
+
# author: Dominik Richter
|
4
|
+
#
|
5
|
+
# adds a yaml file
|
6
|
+
|
7
|
+
gid = 'root'
|
8
|
+
gid = 'wheel' if node['platform_family'] == 'freebsd'
|
9
|
+
|
10
|
+
['yml', 'json', 'csv', 'ini'].each { |filetype|
|
11
|
+
|
12
|
+
cookbook_file "/tmp/example.#{filetype}" do
|
13
|
+
source "example.#{filetype}"
|
14
|
+
owner 'root'
|
15
|
+
group gid
|
16
|
+
mode '0755'
|
17
|
+
action :create
|
18
|
+
end
|
19
|
+
}
|
@@ -66,4 +66,9 @@ if node['platform_family'] == 'windows'
|
|
66
66
|
action :create
|
67
67
|
end
|
68
68
|
|
69
|
+
registry_key 'HKLM\System\CurrentControlSet\Control\Lsa\MSV1_0' do
|
70
|
+
values [{ name: 'NTLMMinServerSec', type: :dword, data: 537_395_200 }]
|
71
|
+
recursive true
|
72
|
+
action :create
|
73
|
+
end
|
69
74
|
end
|
@@ -6,11 +6,16 @@ if os.windows?
|
|
6
6
|
it { should exist }
|
7
7
|
it { should have_value('test') }
|
8
8
|
it { should have_property('binary value', :binary) }
|
9
|
+
it { should have_property('Binary value', :binary) }
|
9
10
|
it { should have_property('string value') }
|
11
|
+
it { should have_property('String value') }
|
10
12
|
it { should have_property('dword value', :dword) }
|
11
13
|
it { should have_property_value('multistring value', :multi_string, ['test', 'multi','string','data']) }
|
14
|
+
it { should have_property_value('Multistring Value', :multi_string, ['test', 'multi','string','data']) }
|
12
15
|
it { should have_property_value('qword value', :qword, 0) }
|
16
|
+
it { should have_property_value('Qword value', :qword, 0) }
|
13
17
|
it { should have_property_value('binary value', :binary, 'dfa0f066') }
|
18
|
+
it { should have_property_value('Binary value', :binary, 'dfa0f066') }
|
14
19
|
end
|
15
20
|
|
16
21
|
# serverspec compatability
|
@@ -33,6 +38,8 @@ if os.windows?
|
|
33
38
|
describe registry_key('HKLM\System\CurrentControlSet\Control\Session Manager') do
|
34
39
|
it { should exist }
|
35
40
|
it { should_not have_property_value('SafeDllSearchMode', :type_dword, 0) }
|
41
|
+
# case-insensitive test
|
42
|
+
it { should_not have_property_value('safedllsearchmode', :type_dword, 0) }
|
36
43
|
end
|
37
44
|
|
38
45
|
describe registry_key('HKLM\System\CurrentControlSet\Services\LanManServer\Parameters') do
|
@@ -43,6 +50,8 @@ if os.windows?
|
|
43
50
|
describe registry_key('HKLM\Software\Policies\Microsoft\Internet Explorer\Main') do
|
44
51
|
it { should exist }
|
45
52
|
its('Isolation64Bit') { should eq 1 }
|
53
|
+
# check that its is case-insensitive
|
54
|
+
its('isolation64bit') { should eq 1 }
|
46
55
|
end
|
47
56
|
|
48
57
|
describe registry_key('HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services') do
|
@@ -50,4 +59,9 @@ if os.windows?
|
|
50
59
|
its('MinEncryptionLevel') { should eq 3 }
|
51
60
|
end
|
52
61
|
|
62
|
+
describe registry_key('HKLM\System\CurrentControlSet\Control\Lsa\MSV1_0') do
|
63
|
+
it { should exist }
|
64
|
+
its('NTLMMinServerSec') { should eq 537_395_200 }
|
65
|
+
its('NtlmMinServerSec') { should eq 537_395_200 }
|
66
|
+
end
|
53
67
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
jfolmer:x:0:0:jfolmer:/jfolmer:/bin/bash
|
@@ -0,0 +1 @@
|
|
1
|
+
uid=201105(jfolmer) gid=200513(domain users) groups=200513(domain users),200512(domain admins),200572(denied rodc password replication group)
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Test the ini file format
|
2
|
+
# Configuration for cinder-rootwrap
|
3
|
+
|
4
|
+
[DEFAULT]
|
5
|
+
# List of directories to load filter definitions from (separated by ',').
|
6
|
+
filters_path=/etc/cinder/rootwrap.d,/usr/share/cinder/rootwrap
|
7
|
+
exec_dirs=/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# author: Christoph Hartmann
|
3
|
+
# author: Dominik Richter
|
4
|
+
|
5
|
+
require 'helper'
|
6
|
+
require 'inspec/resource'
|
7
|
+
|
8
|
+
describe 'Inspec::Resources::Ini' do
|
9
|
+
|
10
|
+
it 'check ini parsing on ubuntu' do
|
11
|
+
resource = MockLoader.new(:ubuntu1404).load_resource('ini', 'rootwrap.conf')
|
12
|
+
result = {"DEFAULT"=>{"filters_path"=>"/etc/cinder/rootwrap.d,/usr/share/cinder/rootwrap", "exec_dirs"=>"/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin"}}
|
13
|
+
_(resource.params).must_equal result
|
14
|
+
_(resource.value(['DEFAULT','exec_dirs'])).must_equal '/sbin,/usr/sbin,/bin,/usr/bin,/usr/local/bin,/usr/local/sbin'
|
15
|
+
end
|
16
|
+
end
|
@@ -20,6 +20,19 @@ describe 'Inspec::Resources::User' do
|
|
20
20
|
_(resource.warndays).must_equal 7
|
21
21
|
end
|
22
22
|
|
23
|
+
# ubuntu 14.04 test with ldap user
|
24
|
+
it 'read user on ubuntu' do
|
25
|
+
resource = MockLoader.new(:ubuntu1404).load_resource('user', 'jfolmer')
|
26
|
+
_(resource.exists?).must_equal true
|
27
|
+
_(resource.group).must_equal 'domain users'
|
28
|
+
_(resource.groups).must_equal ['domain users', 'domain admins', 'denied rodc password replication group']
|
29
|
+
_(resource.home).must_equal '/jfolmer'
|
30
|
+
_(resource.shell).must_equal '/bin/bash'
|
31
|
+
_(resource.mindays).must_equal 0
|
32
|
+
_(resource.maxdays).must_equal 99999
|
33
|
+
_(resource.warndays).must_equal 7
|
34
|
+
end
|
35
|
+
|
23
36
|
# serverspec compatibility tests (do not test matcher)
|
24
37
|
it 'verify serverspec compatibility' do
|
25
38
|
resource = MockLoader.new(:ubuntu1404).load_resource('user', 'root')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: r-train
|
@@ -211,6 +211,7 @@ files:
|
|
211
211
|
- lib/resources/group.rb
|
212
212
|
- lib/resources/host.rb
|
213
213
|
- lib/resources/inetd_conf.rb
|
214
|
+
- lib/resources/ini.rb
|
214
215
|
- lib/resources/interface.rb
|
215
216
|
- lib/resources/iptables.rb
|
216
217
|
- lib/resources/json.rb
|
@@ -257,17 +258,25 @@ files:
|
|
257
258
|
- test/helper.rb
|
258
259
|
- test/integration/.kitchen.yml
|
259
260
|
- test/integration/Berksfile
|
261
|
+
- test/integration/cookbooks/os_prepare/files/example.csv
|
262
|
+
- test/integration/cookbooks/os_prepare/files/example.ini
|
263
|
+
- test/integration/cookbooks/os_prepare/files/example.json
|
264
|
+
- test/integration/cookbooks/os_prepare/files/example.yml
|
260
265
|
- test/integration/cookbooks/os_prepare/metadata.rb
|
261
266
|
- test/integration/cookbooks/os_prepare/recipes/apt.rb
|
262
267
|
- test/integration/cookbooks/os_prepare/recipes/default.rb
|
263
268
|
- test/integration/cookbooks/os_prepare/recipes/file.rb
|
269
|
+
- test/integration/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb
|
264
270
|
- test/integration/cookbooks/os_prepare/recipes/package.rb
|
265
271
|
- test/integration/cookbooks/os_prepare/recipes/registry_key.rb
|
266
272
|
- test/integration/cookbooks/os_prepare/recipes/service.rb
|
267
273
|
- test/integration/test/integration/default/_debug_spec.rb
|
268
274
|
- test/integration/test/integration/default/apt_spec.rb
|
275
|
+
- test/integration/test/integration/default/csv_spec.rb
|
269
276
|
- test/integration/test/integration/default/file_spec.rb
|
270
277
|
- test/integration/test/integration/default/group_spec.rb
|
278
|
+
- test/integration/test/integration/default/ini_spec.rb
|
279
|
+
- test/integration/test/integration/default/json_spec.rb
|
271
280
|
- test/integration/test/integration/default/kernel_module_spec.rb
|
272
281
|
- test/integration/test/integration/default/kernel_parameter_spec.rb
|
273
282
|
- test/integration/test/integration/default/package_spec.rb
|
@@ -275,6 +284,7 @@ files:
|
|
275
284
|
- test/integration/test/integration/default/registry_key_spec.rb
|
276
285
|
- test/integration/test/integration/default/service_spec.rb
|
277
286
|
- test/integration/test/integration/default/user_spec.rb
|
287
|
+
- test/integration/test/integration/default/yaml_spec.rb
|
278
288
|
- test/resource/command_test.rb
|
279
289
|
- test/resource/dsl_test.rb
|
280
290
|
- test/resource/file_test.rb
|
@@ -306,8 +316,10 @@ files:
|
|
306
316
|
- test/unit/mock/cmd/get-service-dhcp
|
307
317
|
- test/unit/mock/cmd/get-windows-feature
|
308
318
|
- test/unit/mock/cmd/getent-hosts-example.com
|
319
|
+
- test/unit/mock/cmd/getent-passwd-jfolmer
|
309
320
|
- test/unit/mock/cmd/getent-passwd-root
|
310
321
|
- test/unit/mock/cmd/id-chartmann
|
322
|
+
- test/unit/mock/cmd/id-jfolmer
|
311
323
|
- test/unit/mock/cmd/id-root
|
312
324
|
- test/unit/mock/cmd/initctl-show-config-ssh
|
313
325
|
- test/unit/mock/cmd/initctl-status-ssh
|
@@ -349,6 +361,7 @@ files:
|
|
349
361
|
- test/unit/mock/files/ntp.conf
|
350
362
|
- test/unit/mock/files/passwd
|
351
363
|
- test/unit/mock/files/policyfile.lock.json
|
364
|
+
- test/unit/mock/files/rootwrap.conf
|
352
365
|
- test/unit/mock/files/ssh_config
|
353
366
|
- test/unit/mock/files/sshd_config
|
354
367
|
- test/unit/mock/profiles/empty/metadata.rb
|
@@ -369,6 +382,7 @@ files:
|
|
369
382
|
- test/unit/resources/group_test.rb
|
370
383
|
- test/unit/resources/host_test.rb
|
371
384
|
- test/unit/resources/inetd_conf_test.rb
|
385
|
+
- test/unit/resources/ini_test.rb
|
372
386
|
- test/unit/resources/interface_test.rb
|
373
387
|
- test/unit/resources/iptables_test.rb
|
374
388
|
- test/unit/resources/json_test.rb
|
@@ -427,17 +441,25 @@ test_files:
|
|
427
441
|
- test/helper.rb
|
428
442
|
- test/integration/.kitchen.yml
|
429
443
|
- test/integration/Berksfile
|
444
|
+
- test/integration/cookbooks/os_prepare/files/example.csv
|
445
|
+
- test/integration/cookbooks/os_prepare/files/example.ini
|
446
|
+
- test/integration/cookbooks/os_prepare/files/example.json
|
447
|
+
- test/integration/cookbooks/os_prepare/files/example.yml
|
430
448
|
- test/integration/cookbooks/os_prepare/metadata.rb
|
431
449
|
- test/integration/cookbooks/os_prepare/recipes/apt.rb
|
432
450
|
- test/integration/cookbooks/os_prepare/recipes/default.rb
|
433
451
|
- test/integration/cookbooks/os_prepare/recipes/file.rb
|
452
|
+
- test/integration/cookbooks/os_prepare/recipes/json_yaml_csv_ini.rb
|
434
453
|
- test/integration/cookbooks/os_prepare/recipes/package.rb
|
435
454
|
- test/integration/cookbooks/os_prepare/recipes/registry_key.rb
|
436
455
|
- test/integration/cookbooks/os_prepare/recipes/service.rb
|
437
456
|
- test/integration/test/integration/default/_debug_spec.rb
|
438
457
|
- test/integration/test/integration/default/apt_spec.rb
|
458
|
+
- test/integration/test/integration/default/csv_spec.rb
|
439
459
|
- test/integration/test/integration/default/file_spec.rb
|
440
460
|
- test/integration/test/integration/default/group_spec.rb
|
461
|
+
- test/integration/test/integration/default/ini_spec.rb
|
462
|
+
- test/integration/test/integration/default/json_spec.rb
|
441
463
|
- test/integration/test/integration/default/kernel_module_spec.rb
|
442
464
|
- test/integration/test/integration/default/kernel_parameter_spec.rb
|
443
465
|
- test/integration/test/integration/default/package_spec.rb
|
@@ -445,6 +467,7 @@ test_files:
|
|
445
467
|
- test/integration/test/integration/default/registry_key_spec.rb
|
446
468
|
- test/integration/test/integration/default/service_spec.rb
|
447
469
|
- test/integration/test/integration/default/user_spec.rb
|
470
|
+
- test/integration/test/integration/default/yaml_spec.rb
|
448
471
|
- test/resource/command_test.rb
|
449
472
|
- test/resource/dsl_test.rb
|
450
473
|
- test/resource/file_test.rb
|
@@ -476,8 +499,10 @@ test_files:
|
|
476
499
|
- test/unit/mock/cmd/get-service-dhcp
|
477
500
|
- test/unit/mock/cmd/get-windows-feature
|
478
501
|
- test/unit/mock/cmd/getent-hosts-example.com
|
502
|
+
- test/unit/mock/cmd/getent-passwd-jfolmer
|
479
503
|
- test/unit/mock/cmd/getent-passwd-root
|
480
504
|
- test/unit/mock/cmd/id-chartmann
|
505
|
+
- test/unit/mock/cmd/id-jfolmer
|
481
506
|
- test/unit/mock/cmd/id-root
|
482
507
|
- test/unit/mock/cmd/initctl-show-config-ssh
|
483
508
|
- test/unit/mock/cmd/initctl-status-ssh
|
@@ -519,6 +544,7 @@ test_files:
|
|
519
544
|
- test/unit/mock/files/ntp.conf
|
520
545
|
- test/unit/mock/files/passwd
|
521
546
|
- test/unit/mock/files/policyfile.lock.json
|
547
|
+
- test/unit/mock/files/rootwrap.conf
|
522
548
|
- test/unit/mock/files/ssh_config
|
523
549
|
- test/unit/mock/files/sshd_config
|
524
550
|
- test/unit/mock/profiles/empty/metadata.rb
|
@@ -539,6 +565,7 @@ test_files:
|
|
539
565
|
- test/unit/resources/group_test.rb
|
540
566
|
- test/unit/resources/host_test.rb
|
541
567
|
- test/unit/resources/inetd_conf_test.rb
|
568
|
+
- test/unit/resources/ini_test.rb
|
542
569
|
- test/unit/resources/interface_test.rb
|
543
570
|
- test/unit/resources/iptables_test.rb
|
544
571
|
- test/unit/resources/json_test.rb
|