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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +7 -11
  3. data/inspec-core.gemspec +2 -2
  4. data/lib/bundles/inspec-supermarket/README.md +21 -2
  5. data/lib/bundles/inspec-supermarket/cli.rb +20 -3
  6. data/lib/bundles/inspec-supermarket/target.rb +3 -2
  7. data/lib/inspec/base_cli.rb +8 -0
  8. data/lib/inspec/cli.rb +12 -3
  9. data/lib/inspec/config.rb +5 -1
  10. data/lib/inspec/dependencies/requirement.rb +2 -1
  11. data/lib/inspec/formatters/base.rb +8 -6
  12. data/lib/inspec/globals.rb +5 -0
  13. data/lib/inspec/library_eval_context.rb +2 -0
  14. data/lib/inspec/plugin/v1/registry.rb +1 -1
  15. data/lib/inspec/plugin/v2/plugin_types/streaming_reporter.rb +10 -0
  16. data/lib/inspec/profile.rb +2 -0
  17. data/lib/inspec/profile_context.rb +1 -6
  18. data/lib/inspec/reporters/automate.rb +1 -1
  19. data/lib/inspec/reporters/json.rb +1 -1
  20. data/lib/inspec/resources/auditd.rb +5 -4
  21. data/lib/inspec/resources/bash.rb +2 -0
  22. data/lib/inspec/resources/file.rb +38 -0
  23. data/lib/inspec/resources/firewalld.rb +83 -9
  24. data/lib/inspec/resources/grub_conf.rb +1 -1
  25. data/lib/inspec/resources/http.rb +135 -54
  26. data/lib/inspec/resources/ibmdb2_session.rb +2 -2
  27. data/lib/inspec/resources/iptables.rb +18 -2
  28. data/lib/inspec/resources/kernel_parameters.rb +58 -0
  29. data/lib/inspec/resources/mssql_session.rb +11 -3
  30. data/lib/inspec/resources/oracledb_session.rb +3 -1
  31. data/lib/inspec/resources/package.rb +74 -1
  32. data/lib/inspec/resources/packages.rb +21 -0
  33. data/lib/inspec/resources/registry_key.rb +30 -0
  34. data/lib/inspec/resources/selinux.rb +6 -1
  35. data/lib/inspec/resources/service.rb +58 -9
  36. data/lib/inspec/resources/ssl.rb +7 -0
  37. data/lib/inspec/resources/timezone.rb +65 -0
  38. data/lib/inspec/resources.rb +2 -0
  39. data/lib/inspec/runner_rspec.rb +30 -0
  40. data/lib/inspec/utils/filter.rb +46 -2
  41. data/lib/inspec/utils/run_data_filters.rb +1 -1
  42. data/lib/inspec/version.rb +1 -1
  43. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +1 -1
  44. data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +4 -3
  45. 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
- cmd = inspec.command("sestatus")
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
- BSDInit.new(inspec, service_ctl)
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
- # check if service is enabled
489
- # services are enabled in /etc/rc.conf and /etc/defaults/rc.conf
490
- # via #{service_name}_enable="YES"
491
- # service SERVICE status returns the following result if not activated:
492
- # Cannot 'status' sshd. Set sshd_enable to YES in /etc/rc.conf or use 'onestatus' instead of 'status'.
493
- # gather all enabled services
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
- srv = /(^.*#{service_name}$)/.match(cmd.stdout)
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
- BSDInit.new(inspec, service_ctl)
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
 
@@ -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
@@ -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"
@@ -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.
@@ -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
- filter_table.populate_lazy_field(field_name, NoCriteriaProvided) # No access to criteria here
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("\n\nDiff:")
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)
@@ -1,3 +1,3 @@
1
1
  module Inspec
2
- VERSION = "4.49.0".freeze
2
+ VERSION = "4.56.17".freeze
3
3
  end
@@ -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?("version") && !parsed["version"].empty?
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["version"]
223
- puts "Name: #{info["api"]}"
224
- puts "Version: #{info["version"]}"
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.49.0
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: 2021-10-25 00:00:00.000000000 Z
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.5'
794
+ version: '2.6'
792
795
  required_rubygems_version: !ruby/object:Gem::Requirement
793
796
  requirements:
794
797
  - - ">="