inspec 0.16.4 → 0.17.0
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/CHANGELOG.md +25 -2
- data/README.md +14 -7
- data/docs/ctl_inspec.rst +19 -3
- data/docs/inspec_and_friends.rst +12 -8
- data/docs/readme.rst +14 -9
- data/examples/profile/controls/example.rb +2 -0
- data/examples/profile/controls/gordon.rb +3 -0
- data/inspec.gemspec +1 -1
- data/lib/bundles/inspec-compliance/api.rb +3 -3
- data/lib/bundles/inspec-compliance/cli.rb +3 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/file.rb +16 -0
- data/lib/resources/passwd.rb +40 -11
- data/lib/resources/powershell.rb +5 -0
- data/lib/resources/service.rb +2 -0
- data/test/functional/inspec_exec_test.rb +1 -1
- data/test/integration/default/powershell_spec.rb +5 -0
- data/test/integration/default/vbscript_spec.rb +5 -0
- data/test/unit/resources/passwd_test.rb +35 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2454963fda63c4f4fbac8878277b21c1fc41d43a
|
4
|
+
data.tar.gz: acdaf6cd9432ff53d73a3140344c831d8fe7fa2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b08a2835b8f86afca3167418009b38dbdd3196db983d26c4f72cf049cf66deb8efc7e35c58710417e1ffb72ef055755dcb76746e812018a6c6e15a7ee8c45f96
|
7
|
+
data.tar.gz: a815b5c316027b14c308642943e57aa8a88e176e7e5abcbb9d658c1e3b3a5626ba66f23fd292df0c5c5f258b7c3a4c339f203e38428c786ac202ba763d63a240
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,29 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [0.
|
4
|
-
[Full Changelog](https://github.com/chef/inspec/compare/v0.16.
|
3
|
+
## [0.17.0](https://github.com/chef/inspec/tree/0.17.0) (2016-03-31)
|
4
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.16.4...0.17.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- add advanced passwd filters \(experimental\) [\#602](https://github.com/chef/inspec/pull/602) ([arlimus](https://github.com/arlimus))
|
9
|
+
|
10
|
+
**Closed issues:**
|
11
|
+
|
12
|
+
- readable.by not working on RHEL7 [\#597](https://github.com/chef/inspec/issues/597)
|
13
|
+
- sshd\_config resource no method error [\#595](https://github.com/chef/inspec/issues/595)
|
14
|
+
- Update the readme.md file to include new cli output [\#590](https://github.com/chef/inspec/issues/590)
|
15
|
+
|
16
|
+
**Merged pull requests:**
|
17
|
+
|
18
|
+
- add file uid and gid accessors [\#603](https://github.com/chef/inspec/pull/603) ([arlimus](https://github.com/arlimus))
|
19
|
+
- fix errors introduced in \#593 [\#594](https://github.com/chef/inspec/pull/594) ([chris-rock](https://github.com/chris-rock))
|
20
|
+
- Updated documentation and examples to include tags and references [\#593](https://github.com/chef/inspec/pull/593) ([aaronlippold](https://github.com/aaronlippold))
|
21
|
+
- Ease removal of whitespace for Powershell Write-Output and VBScript Echo [\#592](https://github.com/chef/inspec/pull/592) ([chris-rock](https://github.com/chris-rock))
|
22
|
+
- Amazon linux support for service resource [\#580](https://github.com/chef/inspec/pull/580) ([jbussdieker](https://github.com/jbussdieker))
|
23
|
+
- Fixed API calls for inspec compliance [\#537](https://github.com/chef/inspec/pull/537) ([JTabel](https://github.com/JTabel))
|
24
|
+
|
25
|
+
## [v0.16.4](https://github.com/chef/inspec/tree/v0.16.4) (2016-03-25)
|
26
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v0.16.3...v0.16.4)
|
5
27
|
|
6
28
|
**Implemented enhancements:**
|
7
29
|
|
@@ -19,6 +41,7 @@
|
|
19
41
|
|
20
42
|
**Merged pull requests:**
|
21
43
|
|
44
|
+
- 0.16.4 [\#591](https://github.com/chef/inspec/pull/591) ([arlimus](https://github.com/arlimus))
|
22
45
|
- Improvements to gordon example and docs [\#583](https://github.com/chef/inspec/pull/583) ([alexpop](https://github.com/alexpop))
|
23
46
|
- bugfix: fix rare inspec shell missing all resources [\#582](https://github.com/chef/inspec/pull/582) ([alexpop](https://github.com/alexpop))
|
24
47
|
- document tags and refs [\#561](https://github.com/chef/inspec/pull/561) ([chris-rock](https://github.com/chris-rock))
|
data/README.md
CHANGED
@@ -74,13 +74,20 @@ You should now be able to run:
|
|
74
74
|
```bash
|
75
75
|
$ inspec --help
|
76
76
|
Commands:
|
77
|
-
inspec
|
78
|
-
inspec
|
79
|
-
inspec
|
80
|
-
inspec
|
81
|
-
inspec
|
82
|
-
inspec
|
83
|
-
inspec
|
77
|
+
inspec archive PATH # archive a profile to tar.gz (default) ...
|
78
|
+
inspec check PATH # verify all tests at the specified PATH
|
79
|
+
inspec compliance SUBCOMMAND ... # Chef Compliance commands
|
80
|
+
inspec detect # detect the target OS
|
81
|
+
inspec exec PATH(S) # run all test files at the specified PATH.
|
82
|
+
inspec help [COMMAND] # Describe available commands or one spe...
|
83
|
+
inspec init TEMPLATE ... # Scaffolds a new project
|
84
|
+
inspec json PATH # read all tests in PATH and generate a ...
|
85
|
+
inspec shell # open an interactive debugging shell
|
86
|
+
inspec supermarket SUBCOMMAND ... # Supermarket commands
|
87
|
+
inspec version # prints the version of this tool
|
88
|
+
|
89
|
+
Options:
|
90
|
+
[--diagnose], [--no-diagnose] # Show diagnostics (versions, configurations)
|
84
91
|
```
|
85
92
|
|
86
93
|
# Examples
|
data/docs/ctl_inspec.rst
CHANGED
@@ -106,19 +106,26 @@ This subcommand has the following syntax:
|
|
106
106
|
|
107
107
|
.. code-block:: bash
|
108
108
|
|
109
|
-
$ inspec exec
|
109
|
+
$ inspec exec PATH(S) (options)
|
110
110
|
|
111
111
|
where:
|
112
112
|
|
113
|
-
* ``
|
113
|
+
* ``PATH(S)`` is one (or more) locations against which tests are run
|
114
114
|
|
115
115
|
Options
|
116
116
|
-----------------------------------------------------
|
117
117
|
This subcommand has additional options:
|
118
118
|
|
119
|
-
``--id
|
119
|
+
``--id=``
|
120
120
|
Use to attach a profile identifier to all test results.
|
121
121
|
|
122
|
+
``--controls="a b c"``
|
123
|
+
A list of controls to run. Ignore all other tests.
|
124
|
+
|
125
|
+
``--format=FORMAT``
|
126
|
+
Which formatter to use: progress, documentation, json
|
127
|
+
|
128
|
+
|
122
129
|
Examples
|
123
130
|
-----------------------------------------------------
|
124
131
|
The following examples show how to use this subcommand.
|
@@ -129,6 +136,12 @@ The following examples show how to use this subcommand.
|
|
129
136
|
|
130
137
|
$ inspec exec test.rb
|
131
138
|
|
139
|
+
**Run test 'tmp-01' locally and ignore other tests**
|
140
|
+
|
141
|
+
.. code-block:: bash
|
142
|
+
|
143
|
+
$ inspec exec test.rb --controls="tmp-01"
|
144
|
+
|
132
145
|
**Run a test on a remote host using SSH**
|
133
146
|
|
134
147
|
.. code-block:: bash
|
@@ -175,6 +188,9 @@ Options
|
|
175
188
|
-----------------------------------------------------
|
176
189
|
This subcommand has additional options:
|
177
190
|
|
191
|
+
``--controls="a b c"``
|
192
|
+
Use to read only specific subset of controls in the PATH profile.
|
193
|
+
|
178
194
|
``--id``
|
179
195
|
Use to attach a profile identifier to all test results.
|
180
196
|
|
data/docs/inspec_and_friends.rst
CHANGED
@@ -16,10 +16,12 @@ A complete InSpec rule looks like:
|
|
16
16
|
control "sshd-11" do
|
17
17
|
impact 1.0
|
18
18
|
title "Server: Set protocol version to SSHv2"
|
19
|
-
desc "
|
20
|
-
|
21
|
-
|
22
|
-
"
|
19
|
+
desc "Set the SSH protocol version to 2. Don't use legacy
|
20
|
+
insecure SSHv1 connections anymore."
|
21
|
+
tag security: "level-1"
|
22
|
+
tag "openssh-server"
|
23
|
+
ref "Server Security Guide v.1.0", url: "http://..."
|
24
|
+
|
23
25
|
describe sshd_config do
|
24
26
|
its('Protocol') { should eq('2') }
|
25
27
|
end
|
@@ -59,10 +61,12 @@ One of the key differences is that InSpec targets more user groups. It is optimi
|
|
59
61
|
control "sshd-11" do
|
60
62
|
impact 1.0
|
61
63
|
title "Server: Set protocol version to SSHv2"
|
62
|
-
desc "
|
63
|
-
|
64
|
-
|
65
|
-
"
|
64
|
+
desc "Set the SSH protocol version to 2. Don't use legacy
|
65
|
+
insecure SSHv1 connections anymore."
|
66
|
+
tag security: "level-1"
|
67
|
+
tag "openssh-server"
|
68
|
+
ref "Server Security Guide v.1.0" url: "http://..."
|
69
|
+
|
66
70
|
describe sshd_config do
|
67
71
|
its('Protocol') { should cmp 2 }
|
68
72
|
end
|
data/docs/readme.rst
CHANGED
@@ -24,6 +24,9 @@ We add a control to this file, to check the ``/tmp`` path in our system:
|
|
24
24
|
impact 0.7 # The criticality, if this control fails.
|
25
25
|
title "Create separate /tmp partition" # A human-readable title
|
26
26
|
desc "An optional description..."
|
27
|
+
tag mygroup: "tag" # A tag can be a simple value or
|
28
|
+
tag "tag" # can have a more complex key/value pair.
|
29
|
+
ref "name", url: "http://..." # A reference to a document, uri: is optional
|
27
30
|
describe file('/tmp') do # The actual test
|
28
31
|
it { should be_mounted }
|
29
32
|
end
|
@@ -50,10 +53,11 @@ It will contain:
|
|
50
53
|
control "sshd-11" do
|
51
54
|
impact 1.0
|
52
55
|
title "Server: Set protocol version to SSHv2"
|
53
|
-
desc "
|
54
|
-
|
55
|
-
|
56
|
-
"
|
56
|
+
desc "Set the SSH protocol version to 2. Don't use legacy
|
57
|
+
insecure SSHv1 connections anymore."
|
58
|
+
tag security: "openssh-server"
|
59
|
+
ref "Document A-12"
|
60
|
+
|
57
61
|
describe sshd_config do
|
58
62
|
its('Protocol') { should eq('2') }
|
59
63
|
end
|
@@ -62,11 +66,12 @@ It will contain:
|
|
62
66
|
control "sshd-7" do
|
63
67
|
impact 1.0
|
64
68
|
title "Server: Do not permit root-based login with password."
|
65
|
-
desc "
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
"
|
69
|
+
desc "To reduce the potential to gain full privileges
|
70
|
+
of a system in the course of an attack (by either misconfiguration
|
71
|
+
or vulnerabilities), do not allow login as root with password"
|
72
|
+
tag security: "openssh-server"
|
73
|
+
ref "Document A-12"
|
74
|
+
|
70
75
|
describe sshd_config do
|
71
76
|
its('PermitRootLogin') { should match(/no|without-password/) }
|
72
77
|
end
|
@@ -9,6 +9,8 @@ control "tmp-1.0" do # A unique ID for this control
|
|
9
9
|
impact 0.7 # The criticality, if this control fails.
|
10
10
|
title "Create /tmp directory" # A human-readable title
|
11
11
|
desc "An optional description..." # Describe why this is needed
|
12
|
+
tag data: "temp data" # A tag allows you to associate key information
|
13
|
+
tag "security" # to the test
|
12
14
|
ref "Document A-12", url: 'http://...' # Additional references
|
13
15
|
|
14
16
|
describe file('/tmp') do # The actual test
|
@@ -15,6 +15,9 @@ control 'gordon-1.0' do
|
|
15
15
|
impact 0.7
|
16
16
|
title 'Verify the version number of Gordon'
|
17
17
|
desc 'An optional description...'
|
18
|
+
tag 'gordon'
|
19
|
+
ref 'Gordon Requirements 1.0', uri: 'http://...'
|
20
|
+
|
18
21
|
describe gordon_config do
|
19
22
|
its('version') { should eq('1.0') }
|
20
23
|
its('size') { should <= 20 }
|
data/inspec.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
|
-
spec.add_dependency 'r-train', '~> 0.10.
|
27
|
+
spec.add_dependency 'r-train', '~> 0.10.4'
|
28
28
|
spec.add_dependency 'thor', '~> 0.19'
|
29
29
|
spec.add_dependency 'json', '~> 1.8'
|
30
30
|
spec.add_dependency 'rainbow', '~> 2'
|
@@ -10,10 +10,10 @@ module Compliance
|
|
10
10
|
# everything will be stored in local Configuration store
|
11
11
|
class API # rubocop:disable Metrics/ClassLength
|
12
12
|
# logs into the server, retrieves a token and stores it locally
|
13
|
-
def self.login(server, username, password, insecure)
|
13
|
+
def self.login(server, username, password, insecure, apipath)
|
14
14
|
config = Compliance::Configuration.new
|
15
|
-
config['server'] = server
|
16
|
-
url = "#{server}/oauth/token"
|
15
|
+
config['server'] = "#{server}#{apipath}"
|
16
|
+
url = "#{config['server']}/oauth/token"
|
17
17
|
|
18
18
|
success, data = Compliance::API.post(url, username, password, insecure)
|
19
19
|
if !data.nil?
|
@@ -16,8 +16,10 @@ module Compliance
|
|
16
16
|
desc: 'Chef Compliance Password'
|
17
17
|
option :insecure, aliases: :k, type: :boolean,
|
18
18
|
desc: 'Explicitly allows InSpec to perform "insecure" SSL connections and transfers'
|
19
|
+
option :apipath, type: :string, default: '/api',
|
20
|
+
desc: 'Set the path to the API, defaults to /api'
|
19
21
|
def login(server)
|
20
|
-
success, msg = Compliance::API.login(server, options['user'], options['password'], options['insecure'])
|
22
|
+
success, msg = Compliance::API.login(server, options['user'], options['password'], options['insecure'], options['apipath'])
|
21
23
|
if success
|
22
24
|
puts 'Successfully authenticated'
|
23
25
|
else
|
data/lib/inspec/version.rb
CHANGED
data/lib/resources/file.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
# author: Christoph Hartmann
|
5
5
|
# license: All rights reserved
|
6
6
|
|
7
|
+
require 'shellwords'
|
8
|
+
|
7
9
|
module Inspec::Resources
|
8
10
|
class FileResource < Inspec.resource(1) # rubocop:disable Metrics/ClassLength
|
9
11
|
name 'file'
|
@@ -89,6 +91,20 @@ module Inspec::Resources
|
|
89
91
|
end
|
90
92
|
end
|
91
93
|
|
94
|
+
# TODO: This is temporary and must be moved to train
|
95
|
+
def uid
|
96
|
+
res = inspec.command('stat '+Shellwords.escape(@path)+' -c %u')
|
97
|
+
return nil if res.exit_status != 0 || res.stdout.empty?
|
98
|
+
res.stdout.to_i
|
99
|
+
end
|
100
|
+
|
101
|
+
# TODO: This is temporary and must be moved to train
|
102
|
+
def gid
|
103
|
+
res = inspec.command('stat '+Shellwords.escape(@path)+' -c %u')
|
104
|
+
return nil if res.exit_status != 0 || res.stdout.empty?
|
105
|
+
res.stdout.to_i
|
106
|
+
end
|
107
|
+
|
92
108
|
def to_s
|
93
109
|
"File #{path}"
|
94
110
|
end
|
data/lib/resources/passwd.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
require 'utils/parser'
|
17
17
|
|
18
18
|
module Inspec::Resources
|
19
|
-
class Passwd < Inspec.resource(1)
|
19
|
+
class Passwd < Inspec.resource(1) # rubocop:disable Metrics/ClassLength
|
20
20
|
name 'passwd'
|
21
21
|
desc 'Use the passwd InSpec audit resource to test the contents of /etc/passwd, which contains the following information for users that may log into the system and/or as users that own running processes.'
|
22
22
|
example "
|
@@ -56,16 +56,7 @@ module Inspec::Resources
|
|
56
56
|
res = @params
|
57
57
|
filters = ''
|
58
58
|
hm.each do |attr, condition|
|
59
|
-
|
60
|
-
filters += " #{attr} = #{condition.inspect}"
|
61
|
-
res = res.find_all do |line|
|
62
|
-
case line[attr.to_s]
|
63
|
-
when condition
|
64
|
-
true
|
65
|
-
else
|
66
|
-
false
|
67
|
-
end
|
68
|
-
end
|
59
|
+
res, filters = filter_attribute(attr, condition, res, filters)
|
69
60
|
end
|
70
61
|
content = res.map { |x| x.values.join(':') }.join("\n")
|
71
62
|
Passwd.new(@path, content: content, filters: @filters + filters)
|
@@ -124,5 +115,43 @@ module Inspec::Resources
|
|
124
115
|
def map_data(id)
|
125
116
|
@params.map { |x| x[id] }
|
126
117
|
end
|
118
|
+
|
119
|
+
def filter_res_line(item, matcher, condition, positive)
|
120
|
+
# TODO: REWORK ALL OF THESE, please don't depend on them except for simple equality!
|
121
|
+
case matcher
|
122
|
+
when '<'
|
123
|
+
item.to_i < condition
|
124
|
+
when '<='
|
125
|
+
item.to_i <= condition
|
126
|
+
when '>'
|
127
|
+
item.to_i > condition
|
128
|
+
when '>='
|
129
|
+
item.to_i >= condition
|
130
|
+
else
|
131
|
+
condition = condition.to_s if condition.is_a? Integer
|
132
|
+
case item
|
133
|
+
when condition
|
134
|
+
positive
|
135
|
+
else
|
136
|
+
!positive
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
def filter_attribute(attr, condition, res, filters)
|
142
|
+
matcher = '=='
|
143
|
+
positive = true
|
144
|
+
if condition.is_a?(Hash) && condition.length == 1
|
145
|
+
matcher = condition.keys[0].to_s
|
146
|
+
condition = condition.values[0]
|
147
|
+
end
|
148
|
+
positive = false if matcher == '!='
|
149
|
+
|
150
|
+
a = res.find_all do |line|
|
151
|
+
filter_res_line(line[attr.to_s], matcher, condition, positive)
|
152
|
+
end
|
153
|
+
b = filters + " #{attr} #{matcher} #{condition.inspect}"
|
154
|
+
[a, b]
|
155
|
+
end
|
127
156
|
end
|
128
157
|
end
|
data/lib/resources/powershell.rb
CHANGED
data/lib/resources/service.rb
CHANGED
@@ -9,6 +9,11 @@ describe powershell(script) do
|
|
9
9
|
its('stderr') { should eq '' }
|
10
10
|
end
|
11
11
|
|
12
|
+
# remove whitespace \r\n from stdout
|
13
|
+
describe powershell(script) do
|
14
|
+
its('strip') { should eq "hello" }
|
15
|
+
end
|
16
|
+
|
12
17
|
# legacy test with `script` resource
|
13
18
|
describe script(script) do
|
14
19
|
its('stdout') { should eq "hello\r\n" }
|
@@ -9,6 +9,11 @@ describe vbscript(vbscript) do
|
|
9
9
|
its('stdout') { should eq "hello\r\n" }
|
10
10
|
end
|
11
11
|
|
12
|
+
# remove whitespace \r\n from stdout
|
13
|
+
describe vbscript(vbscript) do
|
14
|
+
its('strip') { should eq "hello" }
|
15
|
+
end
|
16
|
+
|
12
17
|
# ensure that we do not require a newline
|
13
18
|
describe vbscript("Wscript.Stdout.Write \"hello\"") do
|
14
19
|
its('stdout') { should eq 'hello' }
|
@@ -42,7 +42,7 @@ describe 'Inspec::Resources::Passwd' do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'prints a nice to_s string' do
|
45
|
-
_(child.to_s).must_equal '/etc/passwd with uid
|
45
|
+
_(child.to_s).must_equal '/etc/passwd with uid == 0'
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'retrieves singular elements instead of arrays when filter has only one entry' do
|
@@ -59,7 +59,7 @@ describe 'Inspec::Resources::Passwd' do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'prints a nice to_s string' do
|
62
|
-
_(child.to_s).must_equal '/etc/passwd with user
|
62
|
+
_(child.to_s).must_equal '/etc/passwd with user == /^www/'
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -76,4 +76,37 @@ describe 'Inspec::Resources::Passwd' do
|
|
76
76
|
_(passwd.usernames).must_equal ['root', 'www-data']
|
77
77
|
end
|
78
78
|
end
|
79
|
+
|
80
|
+
# TODO REWORK ALL OF THESE, please don't depend on them yet!
|
81
|
+
describe 'experimental features' do
|
82
|
+
it 'retrieves username via uids < x' do
|
83
|
+
_(passwd.uids({ :< => 33 }).count).must_equal 1
|
84
|
+
_(passwd.uids({ :< => 34 }).count).must_equal 2
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'retrieves username via uids <= x' do
|
88
|
+
_(passwd.uids({ :<= => 32 }).count).must_equal 1
|
89
|
+
_(passwd.uids({ :<= => 33 }).count).must_equal 2
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'retrieves username via uids > x' do
|
93
|
+
_(passwd.uids({ :> => 0 }).count).must_equal 1
|
94
|
+
_(passwd.uids({ :> => -1 }).count).must_equal 2
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'retrieves username via uids >= x' do
|
98
|
+
_(passwd.uids({ :>= => 1 }).count).must_equal 1
|
99
|
+
_(passwd.uids({ :>= => 0 }).count).must_equal 2
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'retrieves username via uids == x' do
|
103
|
+
_(passwd.uids({ :== => 0 }).count).must_equal 1
|
104
|
+
_(passwd.uids({ :== => 1 }).count).must_equal 0
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'retrieves username via uids != x' do
|
108
|
+
_(passwd.uids({ :!= => 0 }).count).must_equal 1
|
109
|
+
_(passwd.uids({ :!= => 1 }).count).must_equal 2
|
110
|
+
end
|
111
|
+
end
|
79
112
|
end
|
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.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Richter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: r-train
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.10.
|
19
|
+
version: 0.10.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.10.
|
26
|
+
version: 0.10.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: thor
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|