inspec 1.25.1 → 1.26.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -14
- data/docs/resources/interface.md.erb +2 -2
- data/inspec.gemspec +1 -1
- data/lib/bundles/inspec-compliance/http.rb +8 -4
- data/lib/bundles/inspec-compliance/target.rb +6 -0
- data/lib/bundles/inspec-habitat/profile.rb +11 -7
- data/lib/inspec/cli.rb +0 -7
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/gem.rb +6 -6
- data/lib/resources/http.rb +11 -10
- data/lib/resources/interface.rb +1 -1
- data/lib/resources/postgres_conf.rb +10 -5
- data/lib/resources/powershell.rb +1 -0
- data/lib/resources/processes.rb +2 -0
- metadata +5 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fecbcfd7ae1d3b85d799bc71dc2eabe989f16136
|
4
|
+
data.tar.gz: 20bd1251717cd160dbd5b4b8884ca2d916838f3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3553ac4c21f7f73f70fcaed794292b013f7106a7b226ffb5500c1c9c6451d4355d10aa0526d28d32db926e6a281f5a1f48cf7bcb68255b893853020debfa8a42
|
7
|
+
data.tar.gz: 743f7fce23d0d50eb6d3df716c7f44d9ca1f8824fdc47df6940d77308a720146caf07eb1f6c3a47616cc230561e832b32aa89206d97ace6cea43a7e69abd5f13
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [v1.
|
3
|
+
## [v1.26.0](https://github.com/chef/inspec/tree/v1.26.0) (2017-05-30)
|
4
|
+
[Full Changelog](https://github.com/chef/inspec/compare/v1.25.1...v1.26.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Improvements to Habitat plan [\#1820](https://github.com/chef/inspec/pull/1820) ([smith](https://github.com/smith))
|
9
|
+
|
10
|
+
**Fixed bugs:**
|
11
|
+
|
12
|
+
- bugfix: adjust localhost+sudo test output to train update [\#1873](https://github.com/chef/inspec/pull/1873) ([arlimus](https://github.com/arlimus))
|
13
|
+
- bugfix: do not send nil to command on unsupported OS [\#1865](https://github.com/chef/inspec/pull/1865) ([arlimus](https://github.com/arlimus))
|
14
|
+
- bugfix: non-url servers with compliance login [\#1861](https://github.com/chef/inspec/pull/1861) ([arlimus](https://github.com/arlimus))
|
15
|
+
- Habitat Profiles: redirect stderr to stdout [\#1826](https://github.com/chef/inspec/pull/1826) ([adamleff](https://github.com/adamleff))
|
16
|
+
|
17
|
+
**Closed issues:**
|
18
|
+
|
19
|
+
- Using Automate - `compliance\_profile\_name': undefined method `\[\]' for nil:NilClass \(NoMethodError\) seeing 1.25.1 Inspec [\#1848](https://github.com/chef/inspec/issues/1848)
|
20
|
+
- Missing filesystem size check for InSpec [\#1843](https://github.com/chef/inspec/issues/1843)
|
21
|
+
|
22
|
+
## [v1.25.1](https://github.com/chef/inspec/tree/v1.25.1) (2017-05-20)
|
4
23
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.25.0...v1.25.1)
|
5
24
|
|
6
25
|
**Implemented enhancements:**
|
@@ -70,28 +89,15 @@
|
|
70
89
|
- provide `inspec.version` information [\#1719](https://github.com/chef/inspec/pull/1719) ([arlimus](https://github.com/arlimus))
|
71
90
|
- provide the `inspec` keyword [\#1718](https://github.com/chef/inspec/pull/1718) ([arlimus](https://github.com/arlimus))
|
72
91
|
- print and prettyprint the inspec backend class [\#1717](https://github.com/chef/inspec/pull/1717) ([arlimus](https://github.com/arlimus))
|
73
|
-
- inspec control.to\_ruby to use newlines instead of `\n` [\#1705](https://github.com/chef/inspec/pull/1705) ([arlimus](https://github.com/arlimus))
|
74
92
|
|
75
93
|
**Fixed bugs:**
|
76
94
|
|
77
95
|
- pretty-print multiline control descriptions [\#1711](https://github.com/chef/inspec/pull/1711) ([arlimus](https://github.com/arlimus))
|
78
96
|
- bugfix: unindent description misbehaviors [\#1707](https://github.com/chef/inspec/pull/1707) ([arlimus](https://github.com/arlimus))
|
79
|
-
- handle json parse errors in docker resource [\#1706](https://github.com/chef/inspec/pull/1706) ([chris-rock](https://github.com/chris-rock))
|
80
97
|
|
81
98
|
## [v1.21.0](https://github.com/chef/inspec/tree/v1.21.0) (2017-04-24)
|
82
99
|
[Full Changelog](https://github.com/chef/inspec/compare/v1.20.0...v1.21.0)
|
83
100
|
|
84
|
-
**Implemented enhancements:**
|
85
|
-
|
86
|
-
- fetch user groups while building user object [\#1681](https://github.com/chef/inspec/pull/1681) ([Happycoil](https://github.com/Happycoil))
|
87
|
-
- update sslshake to v1.2 [\#1680](https://github.com/chef/inspec/pull/1680) ([arlimus](https://github.com/arlimus))
|
88
|
-
|
89
|
-
**Fixed bugs:**
|
90
|
-
|
91
|
-
- Web references in inspec shell help are wrong [\#1667](https://github.com/chef/inspec/issues/1667)
|
92
|
-
- bugfix: solve warn on uninitialized [\#1694](https://github.com/chef/inspec/pull/1694) ([arlimus](https://github.com/arlimus))
|
93
|
-
- fix web reference url [\#1669](https://github.com/chef/inspec/pull/1669) ([chris-rock](https://github.com/chris-rock))
|
94
|
-
|
95
101
|
|
96
102
|
|
97
103
|
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
@@ -4,7 +4,7 @@ title: About the interface Resource
|
|
4
4
|
|
5
5
|
# interface
|
6
6
|
|
7
|
-
Use the `interface` InSpec audit resource to test basic network adapter properties, such as name, status,
|
7
|
+
Use the `interface` InSpec audit resource to test basic network adapter properties, such as name, status, and link speed (in MB/sec).
|
8
8
|
|
9
9
|
* On Linux platforms, `/sys/class/net/#{iface}` is used as source
|
10
10
|
* On the Windows platform, the `Get-NetAdapter` cmdlet is used as source
|
@@ -13,7 +13,7 @@ Use the `interface` InSpec audit resource to test basic network adapter properti
|
|
13
13
|
|
14
14
|
An `interface` resource block declares network interface properties to be tested:
|
15
15
|
|
16
|
-
describe interface do
|
16
|
+
describe interface('eth0') do
|
17
17
|
it { should be_up }
|
18
18
|
its('speed') { should eq 1000 }
|
19
19
|
its('name') { should eq eth0 }
|
data/inspec.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
|
27
27
|
spec.required_ruby_version = '>= 2.1'
|
28
28
|
|
29
|
-
spec.add_dependency 'train', '>=0.
|
29
|
+
spec.add_dependency 'train', '>=0.24.0', '<1.0'
|
30
30
|
spec.add_dependency 'thor', '~> 0.19'
|
31
31
|
spec.add_dependency 'json', '>= 1.8', '< 3.0'
|
32
32
|
spec.add_dependency 'rainbow', '~> 2'
|
@@ -10,8 +10,7 @@ module Compliance
|
|
10
10
|
class HTTP
|
11
11
|
# generic get requires
|
12
12
|
def self.get(url, headers = nil, insecure)
|
13
|
-
|
14
|
-
uri = URI.parse(url)
|
13
|
+
uri = _parse_url(url)
|
15
14
|
req = Net::HTTP::Get.new(uri.path)
|
16
15
|
if !headers.nil?
|
17
16
|
headers.each do |key, value|
|
@@ -24,7 +23,7 @@ module Compliance
|
|
24
23
|
# generic post request
|
25
24
|
def self.post(url, token, insecure, basic_auth = false)
|
26
25
|
# form request
|
27
|
-
uri =
|
26
|
+
uri = _parse_url(url)
|
28
27
|
req = Net::HTTP::Post.new(uri.path)
|
29
28
|
if basic_auth
|
30
29
|
req.basic_auth token, ''
|
@@ -38,7 +37,7 @@ module Compliance
|
|
38
37
|
|
39
38
|
# post a file
|
40
39
|
def self.post_file(url, headers, file_path, insecure)
|
41
|
-
uri =
|
40
|
+
uri = _parse_url(url)
|
42
41
|
raise "Unable to parse URL: #{url}" if uri.nil? || uri.host.nil?
|
43
42
|
http = Net::HTTP.new(uri.host, uri.port)
|
44
43
|
|
@@ -81,5 +80,10 @@ module Compliance
|
|
81
80
|
puts 'If the server uses a self-signed certificate, please re-run the login command with the --insecure option.'
|
82
81
|
exit 1
|
83
82
|
end
|
83
|
+
|
84
|
+
def self._parse_url(url)
|
85
|
+
url = "https://#{url}" if URI.parse(url).scheme.nil?
|
86
|
+
URI.parse(url)
|
87
|
+
end
|
84
88
|
end
|
85
89
|
end
|
@@ -87,6 +87,12 @@ EOF
|
|
87
87
|
else
|
88
88
|
%r{^#{@config['server']}/owners/(?<owner>[^/]+)/compliance/(?<id>[^/]+)/tar$}
|
89
89
|
end.match(@target)
|
90
|
+
|
91
|
+
raise 'Unable to determine compliance profile name. This can be caused by ' \
|
92
|
+
'an incorrect server in your configuration. Try to login to compliance ' \
|
93
|
+
'via the `inspec compliance login` or `inspec compliance login_automate` ' \
|
94
|
+
'commands.' if m.nil?
|
95
|
+
|
90
96
|
"#{m[:owner]}/#{m[:id]}"
|
91
97
|
end
|
92
98
|
end
|
@@ -332,6 +332,12 @@ do_install() {
|
|
332
332
|
<<-EOL
|
333
333
|
#!/bin/sh
|
334
334
|
|
335
|
+
# redirect stderr to stdout
|
336
|
+
# ultimately, we'd like to log this somewhere useful, but due to
|
337
|
+
# https://github.com/habitat-sh/habitat/issues/2395, we need to
|
338
|
+
# avoid doing that for now.
|
339
|
+
exec 2>&1
|
340
|
+
|
335
341
|
# InSpec will try to create a .cache directory in the user's home directory
|
336
342
|
# so this needs to be someplace writeable by the hab user
|
337
343
|
export HOME={{pkg.svc_var_path}}
|
@@ -339,23 +345,21 @@ export HOME={{pkg.svc_var_path}}
|
|
339
345
|
PROFILE_IDENT="{{pkg.origin}}/{{pkg.name}}"
|
340
346
|
RESULTS_DIR="{{pkg.svc_var_path}}/inspec_results"
|
341
347
|
RESULTS_FILE="${RESULTS_DIR}/{{pkg.name}}.json"
|
342
|
-
ERROR_FILE="{{pkg.svc_var_path}}/inspec.err"
|
343
348
|
|
344
349
|
# Create a directory for inspec formatter output
|
345
350
|
mkdir -p {{pkg.svc_var_path}}/inspec_results
|
346
351
|
|
347
352
|
while true; do
|
348
353
|
echo "Executing InSpec for ${PROFILE_IDENT}"
|
349
|
-
inspec exec {{pkg.path}}/dist --format=json > ${RESULTS_FILE}
|
354
|
+
inspec exec {{pkg.path}}/dist --format=json > ${RESULTS_FILE}
|
350
355
|
|
351
356
|
if [ $? -eq 0 ]; then
|
352
357
|
echo "InSpec run completed successfully."
|
353
|
-
elsif [ -s ${ERROR_FILE} ]
|
354
|
-
echo "InSpec run did NOT complete successfully. Error:"
|
355
|
-
cat ${ERROR_FILE}
|
356
358
|
else
|
357
|
-
echo "InSpec run
|
358
|
-
echo "Check the
|
359
|
+
echo "InSpec run did not complete successfully. If you do not see any errors above,"
|
360
|
+
echo "control failures were detected. Check the InSpec results here for details:"
|
361
|
+
echo ${RESULTS_FILE}
|
362
|
+
echo "Otherwise, troubleshoot any errors shown above."
|
359
363
|
fi
|
360
364
|
|
361
365
|
source {{pkg.svc_config_path}}/settings.sh
|
data/lib/inspec/cli.rb
CHANGED
@@ -155,13 +155,6 @@ class Inspec::InspecCLI < Inspec::BaseCLI # rubocop:disable Metrics/ClassLength
|
|
155
155
|
configure_logger(opts)
|
156
156
|
o = opts.dup
|
157
157
|
|
158
|
-
# print error if user passed --sudo but with no --target
|
159
|
-
if opts[:sudo] && opts[:target].nil?
|
160
|
-
Inspec::Log.error('--sudo is only valid when running against a remote host using --target')
|
161
|
-
Inspec::Log.error('To run InSpec locally with elevated privileges, run `sudo inspec exec ...`')
|
162
|
-
exit 1
|
163
|
-
end
|
164
|
-
|
165
158
|
# run tests
|
166
159
|
run_tests(targets, o)
|
167
160
|
rescue StandardError => e
|
data/lib/inspec/version.rb
CHANGED
data/lib/resources/gem.rb
CHANGED
@@ -39,16 +39,16 @@ module Inspec::Resources
|
|
39
39
|
return @info if defined?(@info)
|
40
40
|
|
41
41
|
cmd = inspec.command("#{@gem_binary} list --local -a -q \^#{@package_name}\$")
|
42
|
-
|
43
|
-
installed: cmd.exit_status.zero?,
|
44
|
-
type: 'gem',
|
45
|
-
}
|
46
|
-
return @info unless @info[:installed]
|
42
|
+
return {} unless cmd.exit_status.zero?
|
47
43
|
|
48
44
|
# extract package name and version
|
49
45
|
# parses data like winrm (1.3.4, 1.3.3)
|
50
46
|
params = /^\s*([^\(]*?)\s*\((.*?)\)\s*$/.match(cmd.stdout.chomp)
|
51
|
-
|
47
|
+
@info = {
|
48
|
+
installed: !params.nil?,
|
49
|
+
type: 'gem',
|
50
|
+
}
|
51
|
+
return @info unless @info[:installed]
|
52
52
|
|
53
53
|
versions = params[2].split(',')
|
54
54
|
@info[:name] = params[1]
|
data/lib/resources/http.rb
CHANGED
@@ -24,15 +24,16 @@ module Inspec::Resources
|
|
24
24
|
end
|
25
25
|
"
|
26
26
|
|
27
|
-
|
28
|
-
def initialize(url, method: 'GET', params: nil, auth: {}, headers: {}, data: nil, ssl_verify: true)
|
27
|
+
def initialize(url, opts = {})
|
29
28
|
@url = url
|
30
|
-
@method = method
|
31
|
-
@params = params
|
32
|
-
@auth = auth
|
33
|
-
@headers = headers
|
34
|
-
@data = data
|
35
|
-
@
|
29
|
+
@method = opts.fetch(:method, 'GET')
|
30
|
+
@params = opts.fetch(:params, nil)
|
31
|
+
@auth = opts.fetch(:auth, {})
|
32
|
+
@headers = opts.fetch(:headers, {})
|
33
|
+
@data = opts.fetch(:data, nil)
|
34
|
+
@open_timeout = opts.fetch(:open_timeout, 60)
|
35
|
+
@read_timeout = opts.fetch(:read_timeout, 60)
|
36
|
+
@ssl_verify = opts.fetch(:ssl_verify, true)
|
36
37
|
end
|
37
38
|
|
38
39
|
def status
|
@@ -60,8 +61,8 @@ module Inspec::Resources
|
|
60
61
|
conn.basic_auth @auth[:user], @auth[:pass] unless @auth.empty?
|
61
62
|
|
62
63
|
# set default timeout
|
63
|
-
conn.options.timeout =
|
64
|
-
conn.options.open_timeout =
|
64
|
+
conn.options.timeout = @read_timeout # open/read timeout in seconds
|
65
|
+
conn.options.open_timeout = @open_timeout # connection open timeout in seconds
|
65
66
|
|
66
67
|
@response = conn.send(@method.downcase) do |req|
|
67
68
|
req.body = @data
|
data/lib/resources/interface.rb
CHANGED
@@ -7,7 +7,7 @@ require 'utils/convert'
|
|
7
7
|
module Inspec::Resources
|
8
8
|
class NetworkInterface < Inspec.resource(1)
|
9
9
|
name 'interface'
|
10
|
-
desc 'Use the interface InSpec audit resource to test basic network adapter properties, such as name, status,
|
10
|
+
desc 'Use the interface InSpec audit resource to test basic network adapter properties, such as name, status, and link speed (in MB/sec).'
|
11
11
|
example "
|
12
12
|
describe interface('eth0') do
|
13
13
|
it { should exist }
|
@@ -71,6 +71,7 @@ module Inspec::Resources
|
|
71
71
|
|
72
72
|
to_read = [@conf_path]
|
73
73
|
until to_read.empty?
|
74
|
+
base_dir = File.dirname(to_read[0])
|
74
75
|
raw_conf = read_file(to_read[0])
|
75
76
|
@content += raw_conf
|
76
77
|
|
@@ -83,19 +84,23 @@ module Inspec::Resources
|
|
83
84
|
to_read = to_read.drop(1)
|
84
85
|
# see if there is more config files to include
|
85
86
|
|
86
|
-
to_read += include_files(params).find_all do |fp|
|
87
|
+
to_read += include_files(params, base_dir).find_all do |fp|
|
87
88
|
not @files_contents.key? fp
|
88
89
|
end
|
89
90
|
end
|
90
91
|
@content
|
91
92
|
end
|
92
93
|
|
93
|
-
def include_files(params)
|
94
|
-
include_files = params['include'] || []
|
95
|
-
include_files += params['include_if_exists'] || []
|
94
|
+
def include_files(params, base_dir)
|
95
|
+
include_files = Array(params['include']) || []
|
96
|
+
include_files += Array(params['include_if_exists']) || []
|
97
|
+
include_files.map! do |f|
|
98
|
+
Pathname.new(f).absolute? ? f : File.join(base_dir, f)
|
99
|
+
end
|
100
|
+
|
96
101
|
dirs = Array(params['include_dir']) || []
|
97
102
|
dirs.each do |dir|
|
98
|
-
dir = File.join(
|
103
|
+
dir = File.join(base_dir, dir) if dir[0] != '/'
|
99
104
|
include_files += find_files(dir, depth: 1, type: 'file')
|
100
105
|
end
|
101
106
|
include_files
|
data/lib/resources/powershell.rb
CHANGED
data/lib/resources/processes.rb
CHANGED
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: 1.
|
4
|
+
version: 1.26.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: 2017-05-
|
11
|
+
date: 2017-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: train
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.24.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '1.0'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.24.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '1.0'
|
@@ -305,7 +305,6 @@ files:
|
|
305
305
|
- docs/migration.md
|
306
306
|
- docs/plugin_kitchen_inspec.md
|
307
307
|
- docs/profiles.md
|
308
|
-
- docs/resources.md
|
309
308
|
- docs/resources/apache_conf.md.erb
|
310
309
|
- docs/resources/apt.md.erb
|
311
310
|
- docs/resources/audit_policy.md.erb
|
@@ -647,7 +646,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
647
646
|
version: '0'
|
648
647
|
requirements: []
|
649
648
|
rubyforge_project:
|
650
|
-
rubygems_version: 2.
|
649
|
+
rubygems_version: 2.5.2
|
651
650
|
signing_key:
|
652
651
|
specification_version: 4
|
653
652
|
summary: Infrastructure and compliance testing.
|