inspec-core 4.49.0 → 4.56.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +7 -11
- data/inspec-core.gemspec +2 -2
- data/lib/bundles/inspec-supermarket/README.md +21 -2
- data/lib/bundles/inspec-supermarket/cli.rb +20 -3
- data/lib/bundles/inspec-supermarket/target.rb +3 -2
- data/lib/inspec/base_cli.rb +8 -0
- data/lib/inspec/cli.rb +12 -3
- data/lib/inspec/config.rb +5 -1
- data/lib/inspec/dependencies/requirement.rb +2 -1
- data/lib/inspec/formatters/base.rb +8 -6
- data/lib/inspec/globals.rb +5 -0
- data/lib/inspec/library_eval_context.rb +2 -0
- data/lib/inspec/plugin/v1/registry.rb +1 -1
- data/lib/inspec/plugin/v2/plugin_types/streaming_reporter.rb +10 -0
- data/lib/inspec/profile.rb +2 -0
- data/lib/inspec/profile_context.rb +1 -6
- data/lib/inspec/reporters/automate.rb +1 -1
- data/lib/inspec/reporters/json.rb +1 -1
- data/lib/inspec/resources/auditd.rb +5 -4
- data/lib/inspec/resources/bash.rb +2 -0
- data/lib/inspec/resources/file.rb +38 -0
- data/lib/inspec/resources/firewalld.rb +83 -9
- data/lib/inspec/resources/grub_conf.rb +1 -1
- data/lib/inspec/resources/http.rb +135 -54
- data/lib/inspec/resources/ibmdb2_session.rb +2 -2
- data/lib/inspec/resources/iptables.rb +18 -2
- data/lib/inspec/resources/kernel_parameters.rb +58 -0
- data/lib/inspec/resources/mssql_session.rb +11 -3
- data/lib/inspec/resources/oracledb_session.rb +3 -1
- data/lib/inspec/resources/package.rb +74 -1
- data/lib/inspec/resources/packages.rb +21 -0
- data/lib/inspec/resources/registry_key.rb +30 -0
- data/lib/inspec/resources/selinux.rb +6 -1
- data/lib/inspec/resources/service.rb +58 -9
- data/lib/inspec/resources/ssl.rb +7 -0
- data/lib/inspec/resources/timezone.rb +65 -0
- data/lib/inspec/resources.rb +2 -0
- data/lib/inspec/runner_rspec.rb +30 -0
- data/lib/inspec/utils/filter.rb +46 -2
- data/lib/inspec/utils/run_data_filters.rb +1 -1
- data/lib/inspec/version.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +1 -1
- data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +4 -3
- metadata +8 -5
@@ -84,8 +84,13 @@ module Inspec::Resources
|
|
84
84
|
|
85
85
|
def initialize(selinux_path = "/etc/selinux/config")
|
86
86
|
@path = selinux_path
|
87
|
-
|
87
|
+
if inspec.os.redhat? && inspec.os.name == "amazon"
|
88
|
+
lcmd = "/usr/sbin/sestatus"
|
89
|
+
else
|
90
|
+
lcmd = "sestatus"
|
91
|
+
end
|
88
92
|
|
93
|
+
cmd = inspec.command(lcmd)
|
89
94
|
if cmd.exit_status != 0
|
90
95
|
# `sestatus` command not found error message comes in stdout so handling both here
|
91
96
|
out = cmd.stdout + "\n" + cmd.stderr
|
@@ -163,7 +163,12 @@ module Inspec::Resources
|
|
163
163
|
when "mac_os_x", "darwin"
|
164
164
|
LaunchCtl.new(inspec, service_ctl)
|
165
165
|
when "freebsd"
|
166
|
-
|
166
|
+
version = os[:release].to_f
|
167
|
+
if version < 10
|
168
|
+
BSDInit.new(inspec, service_ctl)
|
169
|
+
else
|
170
|
+
FreeBSD10Init.new(inspec, service_ctl)
|
171
|
+
end
|
167
172
|
when "arch"
|
168
173
|
Systemd.new(inspec, service_ctl)
|
169
174
|
when "coreos"
|
@@ -186,6 +191,8 @@ module Inspec::Resources
|
|
186
191
|
Svcs.new(inspec)
|
187
192
|
when "yocto"
|
188
193
|
Systemd.new(inspec, service_ctl)
|
194
|
+
when "alpine"
|
195
|
+
SysV.new(inspec, service_ctl)
|
189
196
|
end
|
190
197
|
end
|
191
198
|
|
@@ -478,6 +485,7 @@ module Inspec::Resources
|
|
478
485
|
|
479
486
|
# @see: https://www.freebsd.org/doc/en/articles/linux-users/startup.html
|
480
487
|
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc.conf&sektion=5
|
488
|
+
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc&apropos=0&sektion=8&manpath=FreeBSD+9.3-RELEASE&arch=default&format=html
|
481
489
|
class BSDInit < ServiceManager
|
482
490
|
def initialize(service_name, service_ctl = nil)
|
483
491
|
@service_ctl = service_ctl || "service"
|
@@ -485,17 +493,20 @@ module Inspec::Resources
|
|
485
493
|
end
|
486
494
|
|
487
495
|
def info(service_name)
|
488
|
-
#
|
489
|
-
#
|
490
|
-
#
|
491
|
-
#
|
492
|
-
#
|
493
|
-
#
|
496
|
+
# `service -e` lists all enabled services. Output format:
|
497
|
+
# % service -e
|
498
|
+
# /etc/rc.d/hostid
|
499
|
+
# /etc/rc.d/hostid_save
|
500
|
+
# /etc/rc.d/cleanvar
|
501
|
+
# /etc/rc.d/ip6addrctl
|
502
|
+
# /etc/rc.d/devd
|
503
|
+
|
494
504
|
cmd = inspec.command("#{service_ctl} -e")
|
495
505
|
return nil if cmd.exit_status != 0
|
496
506
|
|
497
507
|
# search for the service
|
498
|
-
|
508
|
+
|
509
|
+
srv = %r{^.*/(#{service_name}$)}.match(cmd.stdout)
|
499
510
|
return nil if srv.nil? || srv[0].nil?
|
500
511
|
|
501
512
|
enabled = true
|
@@ -516,6 +527,37 @@ module Inspec::Resources
|
|
516
527
|
end
|
517
528
|
end
|
518
529
|
|
530
|
+
# @see: https://www.freebsd.org/doc/en/articles/linux-users/startup.html
|
531
|
+
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc.conf&sektion=5
|
532
|
+
# @see: https://www.freebsd.org/cgi/man.cgi?query=rc&apropos=0&sektion=8&manpath=FreeBSD+10.0-RELEASE&arch=default&format=html
|
533
|
+
class FreeBSD10Init < ServiceManager
|
534
|
+
def initialize(service_name, service_ctl = nil)
|
535
|
+
@service_ctl = service_ctl || "service"
|
536
|
+
super
|
537
|
+
end
|
538
|
+
|
539
|
+
def info(service_name)
|
540
|
+
# check if service is enabled
|
541
|
+
cmd = inspec.command("#{service_ctl} #{service_name} enabled")
|
542
|
+
|
543
|
+
enabled = cmd.exit_status == 0
|
544
|
+
|
545
|
+
# check if the service is running
|
546
|
+
# if the service is not available or not running, we always get an error code
|
547
|
+
cmd = inspec.command("#{service_ctl} #{service_name} onestatus")
|
548
|
+
running = cmd.exit_status == 0
|
549
|
+
|
550
|
+
{
|
551
|
+
name: service_name,
|
552
|
+
description: nil,
|
553
|
+
installed: true,
|
554
|
+
running: running,
|
555
|
+
enabled: enabled,
|
556
|
+
type: "bsd-init",
|
557
|
+
}
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
519
561
|
class Runit < ServiceManager
|
520
562
|
def initialize(service_name, service_ctl = nil)
|
521
563
|
@service_ctl = service_ctl || "sv"
|
@@ -782,7 +824,14 @@ module Inspec::Resources
|
|
782
824
|
EXAMPLE
|
783
825
|
|
784
826
|
def select_service_mgmt
|
785
|
-
|
827
|
+
os = inspec.os
|
828
|
+
version = os[:release].to_f
|
829
|
+
|
830
|
+
if version >= 10
|
831
|
+
FreeBSD10Init.new(inspec, service_ctl)
|
832
|
+
else
|
833
|
+
BSDInit.new(inspec, service_ctl)
|
834
|
+
end
|
786
835
|
end
|
787
836
|
end
|
788
837
|
|
data/lib/inspec/resources/ssl.rb
CHANGED
@@ -38,6 +38,7 @@ module Inspec::Resources
|
|
38
38
|
"tls1.0",
|
39
39
|
"tls1.1",
|
40
40
|
"tls1.2",
|
41
|
+
"tls1.3",
|
41
42
|
].freeze
|
42
43
|
|
43
44
|
attr_reader :host, :port, :timeout, :retries
|
@@ -72,6 +73,11 @@ module Inspec::Resources
|
|
72
73
|
protocol: proto, ciphers: e.map(&:cipher),
|
73
74
|
timeout: x.resource.timeout, retries: x.resource.retries, servername: x.resource.host)]
|
74
75
|
end
|
76
|
+
|
77
|
+
if !res[0].empty? && res[0][1].key?("error") && res[0][1]["error"].include?("Connection error Errno::ECONNREFUSED")
|
78
|
+
raise "#{res[0][1]["error"]}"
|
79
|
+
end
|
80
|
+
|
75
81
|
Hash[res]
|
76
82
|
end
|
77
83
|
.install_filter_methods_on_resource(self, :scan_config)
|
@@ -89,6 +95,7 @@ module Inspec::Resources
|
|
89
95
|
{ "protocol" => "tls1.0", "ciphers" => SSLShake::TLS::TLS10_CIPHERS.keys },
|
90
96
|
{ "protocol" => "tls1.1", "ciphers" => SSLShake::TLS::TLS10_CIPHERS.keys },
|
91
97
|
{ "protocol" => "tls1.2", "ciphers" => SSLShake::TLS::TLS_CIPHERS.keys },
|
98
|
+
{ "protocol" => "tls1.3", "ciphers" => SSLShake::TLS::TLS13_CIPHERS.keys },
|
92
99
|
].map do |line|
|
93
100
|
line["ciphers"].map do |cipher|
|
94
101
|
{ "protocol" => line["protocol"], "cipher" => cipher }
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require "inspec/resources/command"
|
2
|
+
|
3
|
+
module Inspec::Resources
|
4
|
+
class TimeZone < Cmd
|
5
|
+
name "timezone"
|
6
|
+
supports platform: "unix"
|
7
|
+
supports platform: "windows"
|
8
|
+
|
9
|
+
desc "Check for timezone configurations"
|
10
|
+
example <<~EXAMPLE
|
11
|
+
describe timezone do
|
12
|
+
its('identifier') { should eq 'Asia/Kolkata' }
|
13
|
+
its('name') { should eq 'IST' }
|
14
|
+
its('time_offset') { should eq '+0530' }
|
15
|
+
end
|
16
|
+
EXAMPLE
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
@output = {}
|
20
|
+
os = inspec.os
|
21
|
+
cmd = if os.windows?
|
22
|
+
inspec.command("Get-TimeZone")
|
23
|
+
else
|
24
|
+
inspec.command("timedatectl status | grep -i 'Time zone'")
|
25
|
+
end
|
26
|
+
if cmd.exit_status != 0
|
27
|
+
raise Inspec::Exceptions::ResourceFailed, "Time Zone resource with error: #{cmd.stderr}"
|
28
|
+
else
|
29
|
+
if os.windows?
|
30
|
+
splitted_output = cmd.stdout.strip.gsub(/\r/, "").split("\n").select { |out| (out.include? "Id") || (out.include? "DisplayName") || (out.include? "BaseUtcOffset") }
|
31
|
+
@output["identifier"] = split_and_fetch_last(splitted_output[1])
|
32
|
+
@output["name"] = split_and_fetch_last(splitted_output[0])
|
33
|
+
@output["time_offset"] = split_and_fetch_last(splitted_output[2])
|
34
|
+
else
|
35
|
+
splitted_output = cmd.stdout.split(":")[-1]&.strip&.gsub(/[(),^]*/, "")&.split(" ") || []
|
36
|
+
@output["identifier"] = splitted_output[0]
|
37
|
+
@output["name"] = splitted_output[1]
|
38
|
+
@output["time_offset"] = splitted_output[2]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def identifier
|
44
|
+
@output["identifier"]
|
45
|
+
end
|
46
|
+
|
47
|
+
def name
|
48
|
+
@output["name"]
|
49
|
+
end
|
50
|
+
|
51
|
+
def time_offset
|
52
|
+
@output["time_offset"]
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_s
|
56
|
+
"Time Zone resource"
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def split_and_fetch_last(string_value)
|
62
|
+
string_value.split(" :")[-1].strip
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/inspec/resources.rb
CHANGED
@@ -41,6 +41,7 @@ require "inspec/resources/cassandradb_session"
|
|
41
41
|
require "inspec/resources/cassandradb_conf"
|
42
42
|
require "inspec/resources/cassandra"
|
43
43
|
require "inspec/resources/crontab"
|
44
|
+
require "inspec/resources/timezone"
|
44
45
|
require "inspec/resources/dh_params"
|
45
46
|
require "inspec/resources/directory"
|
46
47
|
require "inspec/resources/docker"
|
@@ -72,6 +73,7 @@ require "inspec/resources/ip6tables"
|
|
72
73
|
require "inspec/resources/iptables"
|
73
74
|
require "inspec/resources/kernel_module"
|
74
75
|
require "inspec/resources/kernel_parameter"
|
76
|
+
require "inspec/resources/kernel_parameters"
|
75
77
|
require "inspec/resources/key_rsa"
|
76
78
|
require "inspec/resources/ksh"
|
77
79
|
require "inspec/resources/limits_conf"
|
data/lib/inspec/runner_rspec.rb
CHANGED
@@ -123,6 +123,8 @@ module Inspec
|
|
123
123
|
def set_optional_formatters
|
124
124
|
return if @conf["reporter"].nil?
|
125
125
|
|
126
|
+
# This is a slightly modified version of the default RSpec JSON formatter
|
127
|
+
# No one in their right mind should be using this because we have a much better JSON reporter - named "json"
|
126
128
|
if @conf["reporter"].key?("json-rspec")
|
127
129
|
# We cannot pass in a nil output path. Rspec only accepts a valid string or a IO object.
|
128
130
|
if @conf["reporter"]["json-rspec"]&.[]("file").nil?
|
@@ -133,6 +135,7 @@ module Inspec
|
|
133
135
|
@conf["reporter"].delete("json-rspec")
|
134
136
|
end
|
135
137
|
|
138
|
+
# These are built-in to rspec
|
136
139
|
formats = @conf["reporter"].select { |k, _v| %w{documentation progress html}.include?(k) }
|
137
140
|
formats.each do |k, v|
|
138
141
|
# We cannot pass in a nil output path. Rspec only accepts a valid string or a IO object.
|
@@ -143,6 +146,33 @@ module Inspec
|
|
143
146
|
end
|
144
147
|
@conf["reporter"].delete(k)
|
145
148
|
end
|
149
|
+
|
150
|
+
# Here we need to look for reporter names in the reporter option that
|
151
|
+
# are names of streaming reporter plugins. We load them, then tell RSpec to add them as formatters.
|
152
|
+
# They will have already been detected at this point (see v2_loader.load_all in cli.rb)
|
153
|
+
# but they will not be activated activated at this point.
|
154
|
+
# then list all plugins by type by name
|
155
|
+
reg = Inspec::Plugin::V2::Registry.instance
|
156
|
+
streaming_reporters = reg\
|
157
|
+
.find_activators(plugin_type: :streaming_reporter)\
|
158
|
+
.map(&:activator_name).map(&:to_s)
|
159
|
+
|
160
|
+
@conf["reporter"].each do |streaming_reporter_name, file_target|
|
161
|
+
# It could be a non-streaming reporter
|
162
|
+
next unless streaming_reporters.include? streaming_reporter_name
|
163
|
+
|
164
|
+
# Activate the plugin so the formatter ID gets registered with RSpec, presumably
|
165
|
+
activator = reg.find_activator(plugin_type: :streaming_reporter, activator_name: streaming_reporter_name.to_sym)
|
166
|
+
activator.activate!
|
167
|
+
|
168
|
+
# We cannot pass in a nil output path. Rspec only accepts a valid string or a IO object.
|
169
|
+
if file_target&.[]("file").nil?
|
170
|
+
RSpec.configuration.add_formatter(activator.implementation_class)
|
171
|
+
else
|
172
|
+
RSpec.configuration.add_formatter(activator.implementation_class, file_target["file"])
|
173
|
+
end
|
174
|
+
@conf["reporter"].delete(streaming_reporter_name)
|
175
|
+
end
|
146
176
|
end
|
147
177
|
|
148
178
|
# Configure the output formatter and stream to be used with RSpec.
|
data/lib/inspec/utils/filter.rb
CHANGED
@@ -114,6 +114,7 @@ module FilterTable
|
|
114
114
|
raise(ArgumentError, "'#{decorate_symbols(raw_field_name)}' is not a recognized criterion - expected one of #{decorate_symbols(list_fields).join(", ")}'") unless field?(raw_field_name)
|
115
115
|
|
116
116
|
populate_lazy_field(raw_field_name, desired_value) if is_field_lazy?(raw_field_name)
|
117
|
+
populate_lazy_instance_field(raw_field_name, desired_value) if is_field_lazy_instance?(raw_field_name)
|
117
118
|
new_criteria_string += " #{raw_field_name} == #{desired_value.inspect}"
|
118
119
|
filtered_raw_data = filter_raw_data(filtered_raw_data, raw_field_name, desired_value)
|
119
120
|
end
|
@@ -188,6 +189,8 @@ module FilterTable
|
|
188
189
|
is_field ||= list_fields.include?(proposed_field.to_sym)
|
189
190
|
is_field ||= is_field_lazy?(proposed_field.to_s)
|
190
191
|
is_field ||= is_field_lazy?(proposed_field.to_sym)
|
192
|
+
is_field ||= is_field_lazy_instance?(proposed_field.to_s)
|
193
|
+
is_field ||= is_field_lazy_instance?(proposed_field.to_sym)
|
191
194
|
|
192
195
|
is_field
|
193
196
|
end
|
@@ -210,6 +213,23 @@ module FilterTable
|
|
210
213
|
mark_lazy_field_populated(field_name)
|
211
214
|
end
|
212
215
|
|
216
|
+
def populate_lazy_instance_field(field_name, criterion)
|
217
|
+
return unless is_field_lazy_instance?(field_name)
|
218
|
+
return if field_populated?(field_name)
|
219
|
+
|
220
|
+
raw_data.each do |row|
|
221
|
+
next if row.key?(field_name) # skip row if pre-existing data is present
|
222
|
+
|
223
|
+
lazy_caller = callback_for_lazy_instance_field(field_name)
|
224
|
+
if lazy_caller.is_a?(Proc)
|
225
|
+
lazy_caller.call(row, criterion, resource_instance)
|
226
|
+
elsif lazy_caller.is_a?(Symbol)
|
227
|
+
resource_instance.send(lazy_caller, row, criterion, self)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
mark_lazy_field_populated(field_name)
|
231
|
+
end
|
232
|
+
|
213
233
|
def is_field_lazy?(sought_field_name)
|
214
234
|
custom_properties_schema.values.any? do |property_struct|
|
215
235
|
sought_field_name == property_struct.field_name && \
|
@@ -217,6 +237,13 @@ module FilterTable
|
|
217
237
|
end
|
218
238
|
end
|
219
239
|
|
240
|
+
def is_field_lazy_instance?(sought_field_name)
|
241
|
+
custom_properties_schema.values.any? do |property_struct|
|
242
|
+
sought_field_name == property_struct.field_name && \
|
243
|
+
property_struct.opts[:lazy_instance]
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
220
247
|
def callback_for_lazy_field(field_name)
|
221
248
|
return unless is_field_lazy?(field_name)
|
222
249
|
|
@@ -225,6 +252,14 @@ module FilterTable
|
|
225
252
|
end.opts[:lazy]
|
226
253
|
end
|
227
254
|
|
255
|
+
def callback_for_lazy_instance_field(field_name)
|
256
|
+
return unless is_field_lazy_instance?(field_name)
|
257
|
+
|
258
|
+
custom_properties_schema.values.find do |property_struct|
|
259
|
+
property_struct.field_name == field_name
|
260
|
+
end.opts[:lazy_instance]
|
261
|
+
end
|
262
|
+
|
228
263
|
def field_populated?(field_name)
|
229
264
|
@populated_lazy_columns[field_name]
|
230
265
|
end
|
@@ -349,12 +384,18 @@ module FilterTable
|
|
349
384
|
# args of the row struct; also the Struct class will already have provided
|
350
385
|
# a setter for each field.
|
351
386
|
@custom_properties.values.each do |property_info|
|
352
|
-
next unless property_info.opts[:lazy]
|
387
|
+
next unless property_info.opts[:lazy] || property_info.opts[:lazy_instance]
|
353
388
|
|
354
389
|
field_name = property_info.field_name.to_sym
|
355
390
|
row_eval_context_type.send(:define_method, field_name) do
|
356
391
|
unless filter_table.field_populated?(field_name)
|
357
|
-
|
392
|
+
if property_info.opts[:lazy]
|
393
|
+
filter_table.populate_lazy_field(field_name, NoCriteriaProvided)
|
394
|
+
end # No access to criteria here
|
395
|
+
if property_info.opts[:lazy_instance]
|
396
|
+
filter_table.populate_lazy_instance_field(field_name,
|
397
|
+
NoCriteriaProvided)
|
398
|
+
end
|
358
399
|
# OK, the underlying raw data has the value in the first row
|
359
400
|
# (because we would trigger population only on the first row)
|
360
401
|
# We could just return the value, but we need to set it on this Struct in case it is referenced multiple times
|
@@ -449,7 +490,10 @@ module FilterTable
|
|
449
490
|
result = where(nil)
|
450
491
|
if custom_property_struct.opts[:lazy]
|
451
492
|
result.populate_lazy_field(custom_property_struct.field_name, filter_criteria_value)
|
493
|
+
elsif custom_property_struct.opts[:lazy_instance]
|
494
|
+
result.populate_lazy_instance_field(custom_property_struct.field_name, filter_criteria_value)
|
452
495
|
end
|
496
|
+
|
453
497
|
result = where(nil).get_column_values(custom_property_struct.field_name) # TODO: the where(nil). is likely unneeded
|
454
498
|
result = result.flatten.uniq.compact if custom_property_struct.opts[:style] == :simple
|
455
499
|
result
|
@@ -65,7 +65,7 @@ module Inspec
|
|
65
65
|
c[:results]&.each do |r|
|
66
66
|
next unless r[:message] # :message only set on failure
|
67
67
|
|
68
|
-
pos = r[:message].index(
|
68
|
+
pos = r[:message].index(/\n{1,2}Diff.*:/)
|
69
69
|
next unless pos # Only textual tests get Diffs
|
70
70
|
|
71
71
|
r[:message] = r[:message].slice(0, pos)
|
data/lib/inspec/version.rb
CHANGED
@@ -84,7 +84,7 @@ module InspecPlugins
|
|
84
84
|
return {} if data.nil? || data.empty?
|
85
85
|
|
86
86
|
parsed = JSON.parse(data)
|
87
|
-
return {} unless parsed.key?("
|
87
|
+
return {} unless parsed.key?("build_timestamp") && !parsed["build_timestamp"].empty?
|
88
88
|
|
89
89
|
parsed
|
90
90
|
end
|
@@ -219,9 +219,10 @@ module InspecPlugins
|
|
219
219
|
def version
|
220
220
|
config = InspecPlugins::Compliance::Configuration.new
|
221
221
|
info = InspecPlugins::Compliance::API.version(config)
|
222
|
-
if !info.nil? && info["
|
223
|
-
|
224
|
-
puts "
|
222
|
+
if !info.nil? && info["build_timestamp"]
|
223
|
+
# key info["api"] is not longer available in latest version api response
|
224
|
+
puts "Name: automate"
|
225
|
+
puts "Version: #{info["build_timestamp"]}"
|
225
226
|
else
|
226
227
|
puts "Could not determine server version."
|
227
228
|
exit 1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inspec-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.56.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chef InSpec Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chef-telemetry
|
@@ -117,7 +117,7 @@ dependencies:
|
|
117
117
|
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '3.9'
|
120
|
-
- - "
|
120
|
+
- - "<="
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: '3.11'
|
123
123
|
type: :runtime
|
@@ -127,7 +127,7 @@ dependencies:
|
|
127
127
|
- - ">="
|
128
128
|
- !ruby/object:Gem::Version
|
129
129
|
version: '3.9'
|
130
|
-
- - "
|
130
|
+
- - "<="
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '3.11'
|
133
133
|
- !ruby/object:Gem::Dependency
|
@@ -479,6 +479,7 @@ files:
|
|
479
479
|
- lib/inspec/plugin/v2/plugin_types/input.rb
|
480
480
|
- lib/inspec/plugin/v2/plugin_types/mock.rb
|
481
481
|
- lib/inspec/plugin/v2/plugin_types/reporter.rb
|
482
|
+
- lib/inspec/plugin/v2/plugin_types/streaming_reporter.rb
|
482
483
|
- lib/inspec/plugin/v2/registry.rb
|
483
484
|
- lib/inspec/plugin/v2/status.rb
|
484
485
|
- lib/inspec/profile.rb
|
@@ -554,6 +555,7 @@ files:
|
|
554
555
|
- lib/inspec/resources/json.rb
|
555
556
|
- lib/inspec/resources/kernel_module.rb
|
556
557
|
- lib/inspec/resources/kernel_parameter.rb
|
558
|
+
- lib/inspec/resources/kernel_parameters.rb
|
557
559
|
- lib/inspec/resources/key_rsa.rb
|
558
560
|
- lib/inspec/resources/ksh.rb
|
559
561
|
- lib/inspec/resources/launchd_service.rb
|
@@ -619,6 +621,7 @@ files:
|
|
619
621
|
- lib/inspec/resources/sys_info.rb
|
620
622
|
- lib/inspec/resources/systemd_service.rb
|
621
623
|
- lib/inspec/resources/sysv_service.rb
|
624
|
+
- lib/inspec/resources/timezone.rb
|
622
625
|
- lib/inspec/resources/toml.rb
|
623
626
|
- lib/inspec/resources/upstart_service.rb
|
624
627
|
- lib/inspec/resources/user.rb
|
@@ -788,7 +791,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
788
791
|
requirements:
|
789
792
|
- - ">="
|
790
793
|
- !ruby/object:Gem::Version
|
791
|
-
version: '2.
|
794
|
+
version: '2.6'
|
792
795
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
793
796
|
requirements:
|
794
797
|
- - ">="
|