inspec 1.23.0 → 1.24.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 +27 -2429
- data/Rakefile +1 -14
- data/docs/migration.md +1 -1
- data/docs/profiles.md +14 -12
- data/docs/resources/mssql_session.md.erb +79 -0
- data/docs/resources/oracledb_session.md.erb +71 -0
- data/docs/resources/postgres_session.md.erb +17 -10
- data/docs/resources/processes.md.erb +11 -1
- data/docs/resources/service.md.erb +1 -1
- data/examples/inheritance/inspec.lock +11 -0
- data/examples/meta-profile/README.md +2 -2
- data/examples/meta-profile/controls/example.rb +1 -1
- data/examples/meta-profile/inspec.lock +18 -0
- data/examples/meta-profile/inspec.yml +1 -1
- data/examples/meta-profile/vendor/4d5c9187409941b96f00fb25d0888c301ede999fd63149f35ad4594d698d6535.tar.gz +0 -0
- data/examples/meta-profile/vendor/79e6b9846ab539669bbfcf5adcd246f1be484d4b55acb7c1c3dbd852203e4fae.tar.gz +0 -0
- data/examples/meta-profile/vendor/dbb5602f09f58d86f8743dfb44327207e9a23a49ef34f65614f1c1d8cc145f6b.tar.gz +0 -0
- data/lib/bundles/inspec-habitat/profile.rb +1 -1
- data/lib/inspec.rb +1 -0
- data/lib/inspec/base_cli.rb +1 -1
- data/lib/inspec/dsl.rb +1 -3
- data/lib/inspec/exceptions.rb +8 -0
- data/lib/inspec/metadata.rb +12 -9
- data/lib/inspec/profile.rb +22 -0
- data/lib/inspec/resource.rb +1 -0
- data/lib/inspec/rspec_json_formatter.rb +9 -0
- data/lib/inspec/runner.rb +14 -9
- data/lib/inspec/schema.rb +11 -0
- data/lib/inspec/secrets/yaml.rb +5 -0
- data/lib/inspec/version.rb +1 -1
- data/lib/resources/mssql_session.rb +30 -9
- data/lib/resources/mysql_session.rb +5 -3
- data/lib/resources/oracledb_session.rb +42 -0
- data/lib/resources/postgres_session.rb +12 -9
- metadata +12 -2
data/lib/inspec/metadata.rb
CHANGED
@@ -11,10 +11,11 @@ module Inspec
|
|
11
11
|
# Extract metadata.rb information
|
12
12
|
class Metadata # rubocop:disable Metrics/ClassLength
|
13
13
|
attr_reader :ref
|
14
|
-
attr_accessor :params
|
14
|
+
attr_accessor :params, :content
|
15
15
|
def initialize(ref, logger = nil)
|
16
16
|
@ref = ref
|
17
17
|
@logger = logger || Logger.new(nil)
|
18
|
+
@content = ''
|
18
19
|
@params = {}
|
19
20
|
@missing_methods = []
|
20
21
|
end
|
@@ -206,26 +207,28 @@ module Inspec
|
|
206
207
|
metadata
|
207
208
|
end
|
208
209
|
|
209
|
-
def self.from_yaml(ref,
|
210
|
+
def self.from_yaml(ref, content, profile_id, logger = nil)
|
210
211
|
res = Metadata.new(ref, logger)
|
211
|
-
res.params = YAML.load(
|
212
|
+
res.params = YAML.load(content)
|
213
|
+
res.content = content
|
212
214
|
finalize(res, profile_id, {}, logger)
|
213
215
|
end
|
214
216
|
|
215
|
-
def self.from_ruby(ref,
|
217
|
+
def self.from_ruby(ref, content, profile_id, logger = nil)
|
216
218
|
res = Metadata.new(ref, logger)
|
217
|
-
res.instance_eval(
|
219
|
+
res.instance_eval(content, ref, 1)
|
220
|
+
res.content = content
|
218
221
|
finalize(res, profile_id, {}, logger)
|
219
222
|
end
|
220
223
|
|
221
|
-
def self.from_ref(ref,
|
224
|
+
def self.from_ref(ref, content, profile_id, logger = nil)
|
222
225
|
# NOTE there doesn't have to exist an actual file, it may come from an
|
223
|
-
# archive (i.e.,
|
226
|
+
# archive (i.e., content)
|
224
227
|
case File.basename(ref)
|
225
228
|
when 'inspec.yml'
|
226
|
-
from_yaml(ref,
|
229
|
+
from_yaml(ref, content, profile_id, logger)
|
227
230
|
when 'metadata.rb'
|
228
|
-
from_ruby(ref,
|
231
|
+
from_ruby(ref, content, profile_id, logger)
|
229
232
|
else
|
230
233
|
logger ||= Logger.new(nil)
|
231
234
|
logger.error "Don't know how to handle metadata in #{ref}"
|
data/lib/inspec/profile.rb
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
# author: Christoph Hartmann
|
5
5
|
|
6
6
|
require 'forwardable'
|
7
|
+
require 'digest'
|
7
8
|
require 'inspec/polyfill'
|
8
9
|
require 'inspec/cached_fetcher'
|
9
10
|
require 'inspec/file_provider'
|
@@ -208,6 +209,7 @@ module Inspec
|
|
208
209
|
|
209
210
|
# add information about the required attributes
|
210
211
|
res[:attributes] = res[:attributes].map(&:to_hash) unless res[:attributes].nil? || res[:attributes].empty?
|
212
|
+
res[:sha256] = sha256
|
211
213
|
res
|
212
214
|
end
|
213
215
|
|
@@ -395,6 +397,26 @@ module Inspec
|
|
395
397
|
Inspec::DependencySet.from_lockfile(lockfile, cwd, @cache, @backend, { attributes: @attr_values })
|
396
398
|
end
|
397
399
|
|
400
|
+
# Calculate this profile's SHA256 checksum. Includes metadata, dependencies,
|
401
|
+
# libraries, data files, and controls.
|
402
|
+
#
|
403
|
+
# @return [Type] description of returned object
|
404
|
+
def sha256
|
405
|
+
# get all dependency checksums
|
406
|
+
deps = Hash[locked_dependencies.list.map { |k, v| [k, v.profile.sha256] }]
|
407
|
+
|
408
|
+
res = Digest::SHA256.new
|
409
|
+
files = source_reader.tests.to_a + source_reader.libraries.to_a +
|
410
|
+
source_reader.data_files.to_a +
|
411
|
+
[['inspec.yml', source_reader.metadata.content]] +
|
412
|
+
[['inspec.lock.deps', YAML.dump(deps)]]
|
413
|
+
|
414
|
+
files.sort { |a, b| a[0] <=> b[0] }
|
415
|
+
.map { |f| res << f[0] << "\0" << f[1] << "\0" }
|
416
|
+
|
417
|
+
res.hexdigest
|
418
|
+
end
|
419
|
+
|
398
420
|
private
|
399
421
|
|
400
422
|
# Create an archive name for this profile and an additional options
|
data/lib/inspec/resource.rb
CHANGED
@@ -114,6 +114,7 @@ require 'resources/mysql_session'
|
|
114
114
|
require 'resources/npm'
|
115
115
|
require 'resources/ntp_conf'
|
116
116
|
require 'resources/oneget'
|
117
|
+
require 'resources/oracledb_session'
|
117
118
|
require 'resources/os'
|
118
119
|
require 'resources/os_env'
|
119
120
|
require 'resources/package'
|
@@ -114,6 +114,10 @@ class InspecRspecJson < InspecRspecMiniJson # rubocop:disable Metrics/ClassLengt
|
|
114
114
|
|
115
115
|
@output_hash[:other_checks] = examples_without_controls
|
116
116
|
@output_hash[:profiles] = profiles_info
|
117
|
+
@output_hash[:platform] = {
|
118
|
+
name: os(:name),
|
119
|
+
release: os(:release),
|
120
|
+
}
|
117
121
|
|
118
122
|
examples_with_controls.each do |example|
|
119
123
|
control = example2control(example)
|
@@ -123,6 +127,11 @@ class InspecRspecJson < InspecRspecMiniJson # rubocop:disable Metrics/ClassLengt
|
|
123
127
|
|
124
128
|
private
|
125
129
|
|
130
|
+
def os(field)
|
131
|
+
return nil if @backend.nil?
|
132
|
+
@backend.os.params[field]
|
133
|
+
end
|
134
|
+
|
126
135
|
def all_unique_controls
|
127
136
|
Array(@all_controls).uniq
|
128
137
|
end
|
data/lib/inspec/runner.rb
CHANGED
@@ -119,18 +119,23 @@ module Inspec
|
|
119
119
|
|
120
120
|
# determine all attributes before the execution, fetch data from secrets backend
|
121
121
|
def load_attributes(options)
|
122
|
-
attributes
|
123
|
-
|
122
|
+
options[:attributes] ||= {}
|
123
|
+
|
124
124
|
secrets_targets = options[:attrs]
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
125
|
+
return options[:attributes] if secrets_targets.nil?
|
126
|
+
|
127
|
+
secrets_targets.each do |target|
|
128
|
+
secrets = Inspec::SecretsBackend.resolve(target)
|
129
|
+
if secrets.nil?
|
130
|
+
raise Inspec::Exceptions::SecretsBackendNotFound,
|
131
|
+
"Unable to find a parser for attributes file #{target}. " \
|
132
|
+
'Check to make sure the file exists and has the appropriate extension.'
|
130
133
|
end
|
134
|
+
|
135
|
+
next if secrets.attributes.nil?
|
136
|
+
options[:attributes].merge!(secrets.attributes)
|
131
137
|
end
|
132
|
-
|
133
|
-
options[:attributes] = options[:attributes].merge(attributes)
|
138
|
+
|
134
139
|
options[:attributes]
|
135
140
|
end
|
136
141
|
|
data/lib/inspec/schema.rb
CHANGED
@@ -11,6 +11,15 @@ module Inspec
|
|
11
11
|
},
|
12
12
|
}.freeze
|
13
13
|
|
14
|
+
PLATFORM = {
|
15
|
+
'type' => 'object',
|
16
|
+
'additionalProperties' => false,
|
17
|
+
'properties' => {
|
18
|
+
'name' => { 'type' => 'string' },
|
19
|
+
'release' => { 'type' => 'string' },
|
20
|
+
},
|
21
|
+
}.freeze
|
22
|
+
|
14
23
|
# Tags are open right, with simple key-value associations and not restrictions
|
15
24
|
TAGS = { 'type' => 'object' }.freeze
|
16
25
|
|
@@ -85,6 +94,7 @@ module Inspec
|
|
85
94
|
'properties' => {
|
86
95
|
'name' => { 'type' => 'string' },
|
87
96
|
'version' => { 'type' => 'string', 'optional' => true },
|
97
|
+
'sha256' => { 'type' => 'string', 'optional' => false },
|
88
98
|
|
89
99
|
'title' => { 'type' => 'string', 'optional' => true },
|
90
100
|
'maintainer' => { 'type' => 'string', 'optional' => true },
|
@@ -117,6 +127,7 @@ module Inspec
|
|
117
127
|
'type' => 'object',
|
118
128
|
'additionalProperties' => false,
|
119
129
|
'properties' => {
|
130
|
+
'platform' => PLATFORM,
|
120
131
|
'profiles' => {
|
121
132
|
'type' => 'array',
|
122
133
|
'items' => PROFILE,
|
data/lib/inspec/secrets/yaml.rb
CHANGED
@@ -18,6 +18,11 @@ module Secrets
|
|
18
18
|
# array of yaml file paths
|
19
19
|
def initialize(target)
|
20
20
|
@attributes = ::YAML.load_file(target)
|
21
|
+
|
22
|
+
if @attributes == false || !@attributes.is_a?(Hash)
|
23
|
+
Inspec::Log.warn("#{self.class} unable to parse #{target}: invalid YAML or contents is not a Hash")
|
24
|
+
@attributes = nil
|
25
|
+
end
|
21
26
|
rescue => e
|
22
27
|
raise "Error reading Inspec attributes: #{e}"
|
23
28
|
end
|
data/lib/inspec/version.rb
CHANGED
@@ -7,27 +7,48 @@ module Inspec::Resources
|
|
7
7
|
name 'mssql_session'
|
8
8
|
desc 'Use the mssql_session InSpec audit resource to test SQL commands run against a MS Sql Server database.'
|
9
9
|
example "
|
10
|
-
|
10
|
+
# Using SQL authentication
|
11
|
+
sql = mssql_session(user: 'myuser', pass: 'mypassword')
|
11
12
|
describe sql.query('select * from sys.databases where name like \'*test*\') do
|
12
|
-
its('stdout') {should_not match(/test/) }
|
13
|
+
its('stdout') { should_not match(/test/) }
|
14
|
+
end
|
15
|
+
|
16
|
+
# Passing no credentials to mssql_session forces it to use Windows authentication
|
17
|
+
sql_windows_auth = mssql_session
|
18
|
+
describe sql_window_auth.query('select * from sys.databases where name like \'*test*\') do
|
19
|
+
its('stdout') { should_not match(/test/) }
|
13
20
|
end
|
14
21
|
"
|
15
22
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
attr_reader :user, :pass, :host
|
24
|
+
|
25
|
+
def initialize(opts = {})
|
26
|
+
@user = opts[:user]
|
27
|
+
@pass = opts[:pass]
|
28
|
+
@host = opts[:host] || 'localhost'
|
29
|
+
@instance = opts[:instance]
|
20
30
|
end
|
21
31
|
|
22
32
|
def query(q)
|
23
33
|
escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"').gsub(/\$/, '\\$').gsub(/\@/, '`@')
|
24
|
-
|
25
|
-
|
34
|
+
cmd_string = "sqlcmd -Q \"#{escaped_query}\""
|
35
|
+
cmd_string += " -U #{@user} -P #{@pass}" unless @user.nil? or @pass.nil?
|
36
|
+
if @instance.nil?
|
37
|
+
cmd_string += " -S #{@host}"
|
38
|
+
else
|
39
|
+
cmd_string += " -S #{@host}\\#{@instance}"
|
40
|
+
end
|
41
|
+
puts cmd_string
|
42
|
+
cmd = inspec.command(cmd_string)
|
43
|
+
out = cmd.stdout + "\n" + cmd.stderr
|
44
|
+
if out =~ /Sqlcmd: Error/
|
45
|
+
skip_resource("Can't connect to the MS SQL Server.")
|
46
|
+
end
|
26
47
|
cmd
|
27
48
|
end
|
28
49
|
|
29
50
|
def to_s
|
30
|
-
'MSSQL'
|
51
|
+
'MSSQL session'
|
31
52
|
end
|
32
53
|
end
|
33
54
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# copyright: 2015, Vulcano Security GmbH
|
3
3
|
# author: Dominik Richter
|
4
4
|
# author: Christoph Hartmann
|
5
|
+
# author: Aaron Lippold
|
5
6
|
# license: All rights reserved
|
6
7
|
|
7
8
|
module Inspec::Resources
|
@@ -9,15 +10,16 @@ module Inspec::Resources
|
|
9
10
|
name 'mysql_session'
|
10
11
|
desc 'Use the mysql_session InSpec audit resource to test SQL commands run against a MySQL database.'
|
11
12
|
example "
|
12
|
-
sql = mysql_session('my_user','password')
|
13
|
+
sql = mysql_session('my_user','password','host')
|
13
14
|
describe sql.query('show databases like \'test\';') do
|
14
15
|
its('stdout') { should_not match(/test/) }
|
15
16
|
end
|
16
17
|
"
|
17
18
|
|
18
|
-
def initialize(user = nil, pass = nil)
|
19
|
+
def initialize(user = nil, pass = nil, host = 'localhost')
|
19
20
|
@user = user
|
20
21
|
@pass = pass
|
22
|
+
@host = host
|
21
23
|
init_fallback if user.nil? or pass.nil?
|
22
24
|
skip_resource("Can't run MySQL SQL checks without authentication") if @user.nil? or @pass.nil?
|
23
25
|
end
|
@@ -28,7 +30,7 @@ module Inspec::Resources
|
|
28
30
|
escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"').gsub(/\$/, '\\$')
|
29
31
|
|
30
32
|
# run the query
|
31
|
-
cmd = inspec.command("mysql -u#{@user} -p#{@pass} #{db} -s -e \"#{escaped_query}\"")
|
33
|
+
cmd = inspec.command("mysql -u#{@user} -p#{@pass} -h #{@host} #{db} -s -e \"#{escaped_query}\"")
|
32
34
|
out = cmd.stdout + "\n" + cmd.stderr
|
33
35
|
if out =~ /Can't connect to .* MySQL server/ or
|
34
36
|
out.downcase =~ /^error/
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# author: Nolan Davidson
|
3
|
+
# license: All rights reserved
|
4
|
+
|
5
|
+
module Inspec::Resources
|
6
|
+
class OracledbSession < Inspec.resource(1)
|
7
|
+
name 'oracledb_session'
|
8
|
+
desc 'Use the oracledb_session InSpec resource to test commands against an Oracle database'
|
9
|
+
example "
|
10
|
+
sql = oracledb_session(user: 'my_user', pass: 'password')
|
11
|
+
describe sql.query('SELECT NAME FROM v$database;') do
|
12
|
+
its('stdout') { should_not match(/test/) }
|
13
|
+
end
|
14
|
+
"
|
15
|
+
|
16
|
+
attr_reader :user, :pass, :host, :sid, :sqlplus_bin
|
17
|
+
|
18
|
+
def initialize(opts = {})
|
19
|
+
@user = opts[:user]
|
20
|
+
@pass = opts[:pass]
|
21
|
+
@host = opts[:host] || 'localhost'
|
22
|
+
@sid = opts[:sid]
|
23
|
+
@sqlplus_bin = opts[:sqlplus_bin] || 'sqlplus'
|
24
|
+
return skip_resource("Can't run Oracle checks without authentication") if @user.nil? or @pass.nil?
|
25
|
+
end
|
26
|
+
|
27
|
+
def query(q)
|
28
|
+
escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"')
|
29
|
+
cmd = inspec.command("echo \"#{escaped_query}\" | #{@sqlplus_bin} -s #{@user}/#{@pass}@#{@host}/#{@sid}")
|
30
|
+
out = cmd.stdout + "\n" + cmd.stderr
|
31
|
+
if out.downcase =~ /^error/
|
32
|
+
skip_resource("Can't connect to Oracle instance for SQL checks.")
|
33
|
+
end
|
34
|
+
|
35
|
+
cmd
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
'Oracle Session'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# copyright: 2015, Vulcano Security GmbH
|
3
3
|
# author: Dominik Richter
|
4
4
|
# author: Christoph Hartmann
|
5
|
+
# author: Aaron Lippold
|
5
6
|
# license: All rights reserved
|
6
7
|
|
7
8
|
module Inspec::Resources
|
@@ -26,16 +27,23 @@ module Inspec::Resources
|
|
26
27
|
name 'postgres_session'
|
27
28
|
desc 'Use the postgres_session InSpec audit resource to test SQL commands run against a PostgreSQL database.'
|
28
29
|
example "
|
29
|
-
sql = postgres_session('username', 'password')
|
30
|
+
sql = postgres_session('username', 'password', 'host')
|
31
|
+
query('sql_query', ['database_name'])` contains the query and (optional) database to execute
|
32
|
+
|
33
|
+
# default values:
|
34
|
+
# username: 'postgres'
|
35
|
+
# host: 'localhost'
|
36
|
+
# db: databse == db_user running the sql query
|
30
37
|
|
31
38
|
describe sql.query('SELECT * FROM pg_shadow WHERE passwd IS NULL;') do
|
32
39
|
its('output') { should eq('') }
|
33
40
|
end
|
34
41
|
"
|
35
42
|
|
36
|
-
def initialize(user, pass)
|
43
|
+
def initialize(user, pass, host = nil)
|
37
44
|
@user = user || 'postgres'
|
38
45
|
@pass = pass
|
46
|
+
@host = host || 'localhost'
|
39
47
|
end
|
40
48
|
|
41
49
|
def query(query, db = [])
|
@@ -44,7 +52,7 @@ module Inspec::Resources
|
|
44
52
|
# that does this securely
|
45
53
|
escaped_query = query.gsub(/\\/, '\\\\').gsub(/"/, '\\"').gsub(/\$/, '\\$')
|
46
54
|
# run the query
|
47
|
-
cmd = inspec.command("PGPASSWORD='#{@pass}' psql -U #{@user} #{dbs} -h
|
55
|
+
cmd = inspec.command("PGPASSWORD='#{@pass}' psql -U #{@user} #{dbs} -h #{@host} -A -t -c \"#{escaped_query}\"")
|
48
56
|
out = cmd.stdout + "\n" + cmd.stderr
|
49
57
|
if cmd.exit_status != 0 or
|
50
58
|
out =~ /could not connect to .*/ or
|
@@ -52,12 +60,7 @@ module Inspec::Resources
|
|
52
60
|
# skip this test if the server can't run the query
|
53
61
|
skip_resource "Can't read run query #{query.inspect} on postgres_session: #{out}"
|
54
62
|
else
|
55
|
-
|
56
|
-
# remove the tail
|
57
|
-
lines = cmd.stdout
|
58
|
-
.sub(/(.*\n)+([-]+[+])*[-]+\n/, '')
|
59
|
-
.sub(/\n[^\n]*\n\n$/, '')
|
60
|
-
Lines.new(lines.strip, "PostgreSQL query: #{query}")
|
63
|
+
Lines.new(cmd.stdout.strip, "PostgreSQL query: #{query}")
|
61
64
|
end
|
62
65
|
end
|
63
66
|
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: 1.
|
4
|
+
version: 1.24.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-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: train
|
@@ -291,6 +291,7 @@ files:
|
|
291
291
|
- docs/migration.md
|
292
292
|
- docs/plugin_kitchen_inspec.html.md
|
293
293
|
- docs/profiles.md
|
294
|
+
- docs/resources.md
|
294
295
|
- docs/resources/apache_conf.md.erb
|
295
296
|
- docs/resources/apt.md.erb
|
296
297
|
- docs/resources/audit_policy.md.erb
|
@@ -330,11 +331,13 @@ files:
|
|
330
331
|
- docs/resources/limits_conf.md.erb
|
331
332
|
- docs/resources/login_def.md.erb
|
332
333
|
- docs/resources/mount.md.erb
|
334
|
+
- docs/resources/mssql_session.md.erb
|
333
335
|
- docs/resources/mysql_conf.md.erb
|
334
336
|
- docs/resources/mysql_session.md.erb
|
335
337
|
- docs/resources/npm.md.erb
|
336
338
|
- docs/resources/ntp_conf.md.erb
|
337
339
|
- docs/resources/oneget.md.erb
|
340
|
+
- docs/resources/oracledb_session.md.erb
|
338
341
|
- docs/resources/os.md.erb
|
339
342
|
- docs/resources/os_env.md.erb
|
340
343
|
- docs/resources/package.md.erb
|
@@ -380,6 +383,7 @@ files:
|
|
380
383
|
- examples/README.md
|
381
384
|
- examples/inheritance/README.md
|
382
385
|
- examples/inheritance/controls/example.rb
|
386
|
+
- examples/inheritance/inspec.lock
|
383
387
|
- examples/inheritance/inspec.yml
|
384
388
|
- examples/kitchen-ansible/.kitchen.yml
|
385
389
|
- examples/kitchen-ansible/Gemfile
|
@@ -405,7 +409,11 @@ files:
|
|
405
409
|
- examples/kitchen-puppet/test/integration/default/web_spec.rb
|
406
410
|
- examples/meta-profile/README.md
|
407
411
|
- examples/meta-profile/controls/example.rb
|
412
|
+
- examples/meta-profile/inspec.lock
|
408
413
|
- examples/meta-profile/inspec.yml
|
414
|
+
- examples/meta-profile/vendor/4d5c9187409941b96f00fb25d0888c301ede999fd63149f35ad4594d698d6535.tar.gz
|
415
|
+
- examples/meta-profile/vendor/79e6b9846ab539669bbfcf5adcd246f1be484d4b55acb7c1c3dbd852203e4fae.tar.gz
|
416
|
+
- examples/meta-profile/vendor/dbb5602f09f58d86f8743dfb44327207e9a23a49ef34f65614f1c1d8cc145f6b.tar.gz
|
409
417
|
- examples/profile-attribute.yml
|
410
418
|
- examples/profile-attribute/README.md
|
411
419
|
- examples/profile-attribute/controls/example.rb
|
@@ -474,6 +482,7 @@ files:
|
|
474
482
|
- lib/inspec/dsl_shared.rb
|
475
483
|
- lib/inspec/env_printer.rb
|
476
484
|
- lib/inspec/errors.rb
|
485
|
+
- lib/inspec/exceptions.rb
|
477
486
|
- lib/inspec/expect.rb
|
478
487
|
- lib/inspec/fetcher.rb
|
479
488
|
- lib/inspec/file_provider.rb
|
@@ -559,6 +568,7 @@ files:
|
|
559
568
|
- lib/resources/npm.rb
|
560
569
|
- lib/resources/ntp_conf.rb
|
561
570
|
- lib/resources/oneget.rb
|
571
|
+
- lib/resources/oracledb_session.rb
|
562
572
|
- lib/resources/os.rb
|
563
573
|
- lib/resources/os_env.rb
|
564
574
|
- lib/resources/package.rb
|