inspec 4.7.3 → 4.7.18

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.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/inspec.gemspec +1 -1
  3. data/lib/bundles/inspec-supermarket/api.rb +2 -1
  4. data/lib/bundles/inspec-supermarket/cli.rb +6 -6
  5. data/lib/bundles/inspec-supermarket/target.rb +1 -0
  6. data/lib/fetchers/git.rb +3 -1
  7. data/lib/fetchers/mock.rb +1 -0
  8. data/lib/fetchers/url.rb +6 -3
  9. data/lib/inspec/backend.rb +1 -0
  10. data/lib/inspec/base_cli.rb +4 -1
  11. data/lib/inspec/cli.rb +5 -4
  12. data/lib/inspec/config.rb +9 -1
  13. data/lib/inspec/control_eval_context.rb +1 -0
  14. data/lib/inspec/dependencies/cache.rb +1 -0
  15. data/lib/inspec/dependencies/dependency_set.rb +2 -0
  16. data/lib/inspec/dependencies/lockfile.rb +1 -0
  17. data/lib/inspec/dependencies/requirement.rb +8 -7
  18. data/lib/inspec/dependencies/resolver.rb +3 -3
  19. data/lib/inspec/describe.rb +1 -0
  20. data/lib/inspec/dsl.rb +1 -1
  21. data/lib/inspec/dsl_shared.rb +1 -1
  22. data/lib/inspec/env_printer.rb +4 -4
  23. data/lib/inspec/fetcher.rb +4 -2
  24. data/lib/inspec/file_provider.rb +18 -8
  25. data/lib/inspec/formatters/base.rb +5 -0
  26. data/lib/inspec/impact.rb +2 -0
  27. data/lib/inspec/input_registry.rb +14 -13
  28. data/lib/inspec/metadata.rb +6 -2
  29. data/lib/inspec/method_source.rb +1 -1
  30. data/lib/inspec/objects/control.rb +4 -1
  31. data/lib/inspec/objects/describe.rb +3 -1
  32. data/lib/inspec/objects/input.rb +6 -5
  33. data/lib/inspec/objects/list.rb +2 -0
  34. data/lib/inspec/objects/test.rb +3 -2
  35. data/lib/inspec/plugin/v1/plugin_types/resource.rb +7 -0
  36. data/lib/inspec/plugin/v1/plugins.rb +4 -3
  37. data/lib/inspec/plugin/v1/registry.rb +3 -2
  38. data/lib/inspec/plugin/v2.rb +1 -0
  39. data/lib/inspec/plugin/v2/activator.rb +2 -0
  40. data/lib/inspec/plugin/v2/config_file.rb +4 -1
  41. data/lib/inspec/plugin/v2/filter.rb +1 -0
  42. data/lib/inspec/plugin/v2/installer.rb +9 -7
  43. data/lib/inspec/plugin/v2/loader.rb +2 -0
  44. data/lib/inspec/plugin/v2/plugin_base.rb +1 -0
  45. data/lib/inspec/plugin/v2/plugin_types/cli.rb +2 -2
  46. data/lib/inspec/plugin/v2/registry.rb +3 -1
  47. data/lib/inspec/profile.rb +13 -6
  48. data/lib/inspec/profile_context.rb +4 -2
  49. data/lib/inspec/reporters/cli.rb +14 -10
  50. data/lib/inspec/reporters/json.rb +1 -0
  51. data/lib/inspec/reporters/json_automate.rb +3 -0
  52. data/lib/inspec/reporters/json_min.rb +2 -0
  53. data/lib/inspec/resource.rb +2 -0
  54. data/lib/inspec/resources/aide_conf.rb +4 -3
  55. data/lib/inspec/resources/apache_conf.rb +1 -1
  56. data/lib/inspec/resources/apt.rb +2 -0
  57. data/lib/inspec/resources/auditd.rb +19 -18
  58. data/lib/inspec/resources/bridge.rb +5 -2
  59. data/lib/inspec/resources/chocolatey_package.rb +2 -0
  60. data/lib/inspec/resources/command.rb +1 -1
  61. data/lib/inspec/resources/crontab.rb +9 -8
  62. data/lib/inspec/resources/csv.rb +1 -1
  63. data/lib/inspec/resources/dh_params.rb +6 -0
  64. data/lib/inspec/resources/docker.rb +37 -34
  65. data/lib/inspec/resources/docker_container.rb +1 -0
  66. data/lib/inspec/resources/docker_image.rb +1 -0
  67. data/lib/inspec/resources/docker_plugin.rb +1 -0
  68. data/lib/inspec/resources/docker_service.rb +1 -0
  69. data/lib/inspec/resources/elasticsearch.rb +24 -24
  70. data/lib/inspec/resources/etc_fstab.rb +8 -7
  71. data/lib/inspec/resources/etc_group.rb +4 -0
  72. data/lib/inspec/resources/etc_hosts.rb +4 -4
  73. data/lib/inspec/resources/etc_hosts_allow_deny.rb +5 -3
  74. data/lib/inspec/resources/file.rb +4 -1
  75. data/lib/inspec/resources/filesystem.rb +5 -3
  76. data/lib/inspec/resources/firewalld.rb +7 -4
  77. data/lib/inspec/resources/groups.rb +6 -4
  78. data/lib/inspec/resources/grub_conf.rb +3 -0
  79. data/lib/inspec/resources/host.rb +5 -3
  80. data/lib/inspec/resources/http.rb +6 -4
  81. data/lib/inspec/resources/iis_app.rb +1 -0
  82. data/lib/inspec/resources/iis_app_pool.rb +1 -1
  83. data/lib/inspec/resources/iis_site.rb +4 -3
  84. data/lib/inspec/resources/interface.rb +10 -7
  85. data/lib/inspec/resources/json.rb +1 -1
  86. data/lib/inspec/resources/kernel_module.rb +1 -1
  87. data/lib/inspec/resources/kernel_parameter.rb +2 -1
  88. data/lib/inspec/resources/key_rsa.rb +5 -0
  89. data/lib/inspec/resources/mount.rb +3 -1
  90. data/lib/inspec/resources/mysql_conf.rb +3 -1
  91. data/lib/inspec/resources/mysql_session.rb +2 -0
  92. data/lib/inspec/resources/nginx.rb +1 -0
  93. data/lib/inspec/resources/nginx_conf.rb +10 -6
  94. data/lib/inspec/resources/ntp_conf.rb +1 -0
  95. data/lib/inspec/resources/oneget.rb +1 -1
  96. data/lib/inspec/resources/oracledb_session.rb +4 -2
  97. data/lib/inspec/resources/os_env.rb +1 -0
  98. data/lib/inspec/resources/package.rb +10 -6
  99. data/lib/inspec/resources/packages.rb +7 -5
  100. data/lib/inspec/resources/passwd.rb +7 -7
  101. data/lib/inspec/resources/pip.rb +2 -0
  102. data/lib/inspec/resources/port.rb +22 -8
  103. data/lib/inspec/resources/postgres.rb +2 -1
  104. data/lib/inspec/resources/postgres_conf.rb +2 -0
  105. data/lib/inspec/resources/postgres_hba_conf.rb +6 -6
  106. data/lib/inspec/resources/postgres_ident_conf.rb +3 -3
  107. data/lib/inspec/resources/processes.rb +16 -15
  108. data/lib/inspec/resources/rabbitmq_config.rb +2 -0
  109. data/lib/inspec/resources/registry_key.rb +8 -3
  110. data/lib/inspec/resources/security_identifier.rb +3 -1
  111. data/lib/inspec/resources/security_policy.rb +2 -1
  112. data/lib/inspec/resources/service.rb +13 -1
  113. data/lib/inspec/resources/shadow.rb +1 -0
  114. data/lib/inspec/resources/ssh_config.rb +2 -0
  115. data/lib/inspec/resources/ssl.rb +12 -11
  116. data/lib/inspec/resources/users.rb +29 -19
  117. data/lib/inspec/resources/virtualization.rb +10 -0
  118. data/lib/inspec/resources/windows_feature.rb +1 -1
  119. data/lib/inspec/resources/windows_hotfix.rb +2 -0
  120. data/lib/inspec/resources/windows_task.rb +4 -0
  121. data/lib/inspec/resources/wmi.rb +2 -1
  122. data/lib/inspec/resources/x509_certificate.rb +8 -0
  123. data/lib/inspec/resources/xinetd_conf.rb +10 -9
  124. data/lib/inspec/resources/yum.rb +15 -11
  125. data/lib/inspec/resources/zfs_dataset.rb +4 -2
  126. data/lib/inspec/resources/zfs_pool.rb +2 -1
  127. data/lib/inspec/rule.rb +11 -1
  128. data/lib/inspec/runner.rb +9 -6
  129. data/lib/inspec/runner_rspec.rb +10 -8
  130. data/lib/inspec/schema.rb +1 -0
  131. data/lib/inspec/secrets.rb +1 -0
  132. data/lib/inspec/secrets/yaml.rb +1 -0
  133. data/lib/inspec/shell.rb +20 -19
  134. data/lib/inspec/shell_detector.rb +1 -1
  135. data/lib/inspec/source_reader.rb +2 -0
  136. data/lib/inspec/ui.rb +1 -0
  137. data/lib/inspec/utils/deprecation/config_file.rb +8 -4
  138. data/lib/inspec/utils/erlang_parser.rb +2 -0
  139. data/lib/inspec/utils/file_reader.rb +1 -1
  140. data/lib/inspec/utils/filter.rb +16 -3
  141. data/lib/inspec/utils/find_files.rb +2 -2
  142. data/lib/inspec/utils/object_traversal.rb +1 -0
  143. data/lib/inspec/utils/parser.rb +2 -0
  144. data/lib/inspec/utils/simpleconfig.rb +4 -1
  145. data/lib/inspec/utils/telemetry/global_methods.rb +1 -0
  146. data/lib/inspec/version.rb +1 -1
  147. data/lib/matchers/matchers.rb +4 -1
  148. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +12 -11
  149. data/lib/plugins/inspec-artifact/test/functional/inspec_artifact_test.rb +3 -3
  150. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +15 -11
  151. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +4 -2
  152. data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +13 -12
  153. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +3 -0
  154. data/lib/plugins/inspec-compliance/test/unit/api_test.rb +28 -28
  155. data/lib/plugins/inspec-compliance/test/unit/target_test.rb +1 -1
  156. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +1 -1
  157. data/lib/plugins/inspec-habitat/test/unit/profile_test.rb +7 -6
  158. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +2 -2
  159. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +1 -0
  160. data/lib/plugins/inspec-init/test/functional/inspec_init_plugin_test.rb +12 -10
  161. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +6 -5
  162. data/lib/plugins/inspec-plugin-manager-cli/test/functional/inspec-plugin_test.rb +1 -0
  163. data/lib/plugins/shared/core_plugin_test_helper.rb +1 -0
  164. data/lib/resource_support/aws/aws_resource_mixin.rb +3 -2
  165. data/lib/resources/aws/aws_billing_report.rb +1 -1
  166. data/lib/resources/aws/aws_billing_reports.rb +8 -7
  167. data/lib/resources/aws/aws_cloudtrail_trail.rb +1 -1
  168. data/lib/resources/aws/aws_cloudtrail_trails.rb +1 -0
  169. data/lib/resources/aws/aws_cloudwatch_alarm.rb +4 -3
  170. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +2 -1
  171. data/lib/resources/aws/aws_config_delivery_channel.rb +1 -1
  172. data/lib/resources/aws/aws_config_recorder.rb +2 -0
  173. data/lib/resources/aws/aws_ebs_volume.rb +1 -0
  174. data/lib/resources/aws/aws_ebs_volumes.rb +2 -0
  175. data/lib/resources/aws/aws_ec2_instance.rb +2 -0
  176. data/lib/resources/aws/aws_ec2_instances.rb +2 -0
  177. data/lib/resources/aws/aws_ecs_cluster.rb +2 -2
  178. data/lib/resources/aws/aws_eks_cluster.rb +3 -3
  179. data/lib/resources/aws/aws_elb.rb +2 -2
  180. data/lib/resources/aws/aws_elbs.rb +14 -12
  181. data/lib/resources/aws/aws_flow_log.rb +2 -2
  182. data/lib/resources/aws/aws_iam_access_key.rb +3 -1
  183. data/lib/resources/aws/aws_iam_access_keys.rb +18 -16
  184. data/lib/resources/aws/aws_iam_groups.rb +1 -0
  185. data/lib/resources/aws/aws_iam_password_policy.rb +9 -7
  186. data/lib/resources/aws/aws_iam_policies.rb +2 -1
  187. data/lib/resources/aws/aws_iam_policy.rb +10 -1
  188. data/lib/resources/aws/aws_iam_role.rb +1 -0
  189. data/lib/resources/aws/aws_iam_user.rb +5 -2
  190. data/lib/resources/aws/aws_iam_users.rb +12 -11
  191. data/lib/resources/aws/aws_kms_key.rb +2 -2
  192. data/lib/resources/aws/aws_kms_keys.rb +3 -1
  193. data/lib/resources/aws/aws_route_table.rb +2 -2
  194. data/lib/resources/aws/aws_route_tables.rb +2 -1
  195. data/lib/resources/aws/aws_s3_bucket.rb +5 -3
  196. data/lib/resources/aws/aws_s3_bucket_object.rb +3 -1
  197. data/lib/resources/aws/aws_s3_buckets.rb +1 -0
  198. data/lib/resources/aws/aws_security_group.rb +20 -9
  199. data/lib/resources/aws/aws_security_groups.rb +1 -0
  200. data/lib/resources/aws/aws_sns_subscription.rb +1 -1
  201. data/lib/resources/aws/aws_sns_topics.rb +2 -0
  202. data/lib/resources/aws/aws_subnet.rb +2 -2
  203. data/lib/resources/aws/aws_subnets.rb +4 -3
  204. data/lib/resources/aws/aws_vpc.rb +1 -1
  205. data/lib/resources/aws/aws_vpcs.rb +3 -2
  206. data/lib/resources/azure/azure_generic_resource.rb +4 -4
  207. data/lib/resources/azure/azure_resource_group.rb +1 -0
  208. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +13 -12
  209. data/lib/source_readers/flat.rb +1 -0
  210. data/lib/source_readers/inspec.rb +1 -0
  211. metadata +2 -2
@@ -88,6 +88,7 @@ module Inspec::Resources
88
88
  # @return [Hash] of windows_paths
89
89
  def windows_paths
90
90
  return @__windows_paths if @__windows_paths
91
+
91
92
  cmd = inspec.command(
92
93
  'New-Object -Type PSObject |
93
94
  Add-Member -MemberType NoteProperty -Name Pip -Value (Invoke-Command -ScriptBlock {where.exe pip}) -PassThru |
@@ -115,6 +116,7 @@ module Inspec::Resources
115
116
  # calculate path on windows
116
117
  if defined?(windows_paths["Python"]) && pipcmd.nil?
117
118
  return nil if windows_paths["Pip"].nil?
119
+
118
120
  pipdir = windows_paths["Python"].split('\\')
119
121
  # remove python.exe
120
122
  pipdir.pop
@@ -37,12 +37,12 @@ module Inspec::Resources
37
37
  end
38
38
 
39
39
  filter = FilterTable.create
40
- filter.register_column(:ports, field: "port", style: :simple)
41
- .register_column(:addresses, field: "address", style: :simple)
42
- .register_column(:protocols, field: "protocol", style: :simple)
43
- .register_column(:processes, field: "process", style: :simple)
44
- .register_column(:pids, field: "pid", style: :simple)
45
- .register_custom_matcher(:listening?) { |x| !x.entries.empty? }
40
+ filter.register_column(:ports, field: "port", style: :simple)
41
+ .register_column(:addresses, field: "address", style: :simple)
42
+ .register_column(:protocols, field: "protocol", style: :simple)
43
+ .register_column(:processes, field: "process", style: :simple)
44
+ .register_column(:pids, field: "pid", style: :simple)
45
+ .register_custom_matcher(:listening?) { |x| !x.entries.empty? }
46
46
  filter.install_filter_methods_on_resource(self, :info)
47
47
 
48
48
  def to_s
@@ -76,9 +76,10 @@ module Inspec::Resources
76
76
  end
77
77
 
78
78
  def info
79
- return @cache if !@cache.nil?
79
+ return @cache unless @cache.nil?
80
80
  # abort if os detection has not worked
81
81
  return @cache = [] if @port_manager.nil?
82
+
82
83
  # query ports
83
84
  cache = @port_manager.info || []
84
85
  cache.select! { |x| x["port"] == @port } unless @port.nil?
@@ -141,6 +142,7 @@ module Inspec::Resources
141
142
  # also UDP ports have nothing in the State column
142
143
  cmd = inspec.command('netstat -anbo | Select-String -CaseSensitive -pattern "^\s+UDP|\s+LISTENING\s+\d+$" -context 0,1')
143
144
  return nil if cmd.exit_status != 0
145
+
144
146
  lines = cmd.stdout.scan(/^>\s*(tcp\S*|udp\S*)\s+(\S+):(\d+)\s+(\S+)\s+(\S*)\s+(\d+)\s+(.+)/i)
145
147
  lines.map do |line|
146
148
  pid = line[5].to_i
@@ -170,7 +172,7 @@ module Inspec::Resources
170
172
  ports = []
171
173
 
172
174
  # check that lsof is available, otherwise fail
173
- raise "Please ensure `lsof` is available on the machine." if !inspec.command(@lsof.to_s).exist?
175
+ raise "Please ensure `lsof` is available on the machine." unless inspec.command(@lsof.to_s).exist?
174
176
 
175
177
  # -F p=pid, c=command, P=protocol name, t=type, n=internet addresses
176
178
  # see 'OUTPUT FOR OTHER PROGRAMS' in LSOF(8)
@@ -270,6 +272,7 @@ module Inspec::Resources
270
272
 
271
273
  def ports_via_lsof
272
274
  return nil unless inspec.command("lsof").exist?
275
+
273
276
  LsofPorts.new(inspec).info
274
277
  end
275
278
 
@@ -286,6 +289,7 @@ module Inspec::Resources
286
289
 
287
290
  # only push protocols we are interested in
288
291
  next unless %w{tcp tcp6 udp udp6}.include?(port_info["protocol"])
292
+
289
293
  ports.push(port_info)
290
294
  end
291
295
 
@@ -313,6 +317,7 @@ module Inspec::Resources
313
317
  cmd = inspec.command("rmsock #{parsed[1]} tcpcb")
314
318
  parsed_pid = /^The socket (\S+) is being held by proccess (\d+) \((\S+)\)/.match(cmd.stdout)
315
319
  return {} if parsed_pid.nil?
320
+
316
321
  process = parsed_pid[3]
317
322
  pid = parsed_pid[2]
318
323
  pid = pid.to_i if pid =~ /^\d+$/
@@ -415,6 +420,7 @@ module Inspec::Resources
415
420
 
416
421
  # only push protocols we are interested in
417
422
  next unless %w{tcp tcp6 udp udp6}.include?(port_info["protocol"])
423
+
418
424
  ports.push(port_info)
419
425
  end
420
426
  ports
@@ -554,6 +560,7 @@ module Inspec::Resources
554
560
  # fe80::a00:27ff:fe32:ed09%enp0s3:9200
555
561
  parsed_net_address = parsed[:local_addr].match(/(\S+):(\*|\d+)$/)
556
562
  return nil if parsed_net_address.nil?
563
+
557
564
  host = parsed_net_address[1]
558
565
  port = parsed_net_address[2]
559
566
  return nil if host.nil? && port.nil?
@@ -631,6 +638,7 @@ module Inspec::Resources
631
638
 
632
639
  # push data, if not headerfile
633
640
  next unless %w{tcp tcp6 udp udp6}.include?(port_info["protocol"])
641
+
634
642
  ports.push(port_info)
635
643
  end
636
644
  ports
@@ -646,6 +654,7 @@ module Inspec::Resources
646
654
  port = ip_addr.port
647
655
  when "tcp6", "udp6"
648
656
  return [] if net_addr == "*:*" # abort for now
657
+
649
658
  # replace * with 0:0:0:0:0:0:0:0
650
659
  net_addr = net_addr.gsub(/^\*:/, "0:0:0:0:0:0:0:0:") if net_addr =~ /^*:(\d+)$/
651
660
  # extract port
@@ -738,14 +747,17 @@ module Inspec::Resources
738
747
  ## Can't use 'netstat -an -f inet -f inet6' as the latter -f option overrides the former one and return only inet ports
739
748
  cmd1 = inspec.command("netstat -an -f inet")
740
749
  return nil if cmd1.exit_status.to_i != 0
750
+
741
751
  cmd2 = inspec.command("netstat -an -f inet6")
742
752
  return nil if cmd2.exit_status.to_i != 0
753
+
743
754
  cmd = cmd1.stdout + cmd2.stdout
744
755
  ports = []
745
756
  # parse all lines
746
757
  cmd.each_line do |line|
747
758
  port_info = parse_netstat_line(line)
748
759
  next unless %w{tcp tcp6 udp udp6}.include?(port_info["protocol"])
760
+
749
761
  ports.push(port_info)
750
762
  end
751
763
  # select all ports, where we `listen`
@@ -758,6 +770,7 @@ module Inspec::Resources
758
770
  parsed = /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)?/.match(line)
759
771
 
760
772
  return {} if parsed.nil? || line.match(/^proto/i) || line.match(/^active/i)
773
+
761
774
  protocol = parsed[1].downcase
762
775
  state = parsed[6].nil? ? " " : parsed[6].downcase
763
776
  local_addr = parsed[4]
@@ -765,6 +778,7 @@ module Inspec::Resources
765
778
  # extract host and port information
766
779
  host, port = parse_net_address(local_addr, protocol)
767
780
  return {} if host.nil?
781
+
768
782
  # map data
769
783
  {
770
784
  "port" => port,
@@ -38,7 +38,7 @@ module Inspec::Resources
38
38
  # installed as well as multiple "clusters" to be configured.
39
39
  #
40
40
  @version = version_from_psql || version_from_dir("/etc/postgresql")
41
- if !@version.to_s.empty?
41
+ unless @version.to_s.empty?
42
42
  @cluster = cluster_from_dir("/etc/postgresql/#{@version}")
43
43
  @conf_dir = "/etc/postgresql/#{@version}/#{@cluster}"
44
44
  @data_dir = "/var/lib/postgresql/#{@version}/#{@cluster}"
@@ -83,6 +83,7 @@ module Inspec::Resources
83
83
 
84
84
  def version_from_psql
85
85
  return unless inspec.command("psql").exist?
86
+
86
87
  inspec.command("psql --version | awk '{ print $NF }' | awk -F. '{ print $1\".\"$2 }'").stdout.strip
87
88
  end
88
89
 
@@ -27,6 +27,7 @@ module Inspec::Resources
27
27
  if @conf_path.nil?
28
28
  return skip_resource "PostgreSQL conf path is not set"
29
29
  end
30
+
30
31
  @conf_dir = File.expand_path(File.dirname(@conf_path))
31
32
  @files_contents = {}
32
33
  @content = nil
@@ -57,6 +58,7 @@ module Inspec::Resources
57
58
  return nil if param.nil?
58
59
  # extract first value if we have only one value in array
59
60
  return param[0] if param.length == 1
61
+
60
62
  param
61
63
  end
62
64
 
@@ -26,12 +26,12 @@ module Inspec::Resources
26
26
  end
27
27
 
28
28
  filter = FilterTable.create
29
- filter.register_column(:type, field: "type")
30
- .register_column(:database, field: "database")
31
- .register_column(:user, field: "user")
32
- .register_column(:address, field: "address")
33
- .register_column(:auth_method, field: "auth_method")
34
- .register_column(:auth_params, field: "auth_params")
29
+ filter.register_column(:type, field: "type")
30
+ .register_column(:database, field: "database")
31
+ .register_column(:user, field: "user")
32
+ .register_column(:address, field: "address")
33
+ .register_column(:auth_method, field: "auth_method")
34
+ .register_column(:auth_params, field: "auth_params")
35
35
 
36
36
  filter.install_filter_methods_on_resource(self, :params)
37
37
 
@@ -25,9 +25,9 @@ module Inspec::Resources
25
25
  end
26
26
 
27
27
  filter = FilterTable.create
28
- filter.register_column(:map_name, field: "map_name")
29
- .register_column(:system_username, field: "system_username")
30
- .register_column(:pg_username, field: "pg_username")
28
+ filter.register_column(:map_name, field: "map_name")
29
+ .register_column(:system_username, field: "system_username")
30
+ .register_column(:pg_username, field: "pg_username")
31
31
 
32
32
  filter.install_filter_methods_on_resource(self, :params)
33
33
 
@@ -61,19 +61,19 @@ module Inspec::Resources
61
61
  end
62
62
 
63
63
  filter = FilterTable.create
64
- filter.register_column(:labels, field: "label")
65
- .register_column(:pids, field: "pid")
66
- .register_column(:cpus, field: "cpu")
67
- .register_column(:mem, field: "mem")
68
- .register_column(:vsz, field: "vsz")
69
- .register_column(:rss, field: "rss")
70
- .register_column(:tty, field: "tty")
71
- .register_column(:states, field: "stat")
72
- .register_column(:start, field: "start")
73
- .register_column(:time, field: "time")
74
- .register_column(:users, field: "user")
75
- .register_column(:commands, field: "command")
76
- .install_filter_methods_on_resource(self, :filtered_processes)
64
+ filter.register_column(:labels, field: "label")
65
+ .register_column(:pids, field: "pid")
66
+ .register_column(:cpus, field: "cpu")
67
+ .register_column(:mem, field: "mem")
68
+ .register_column(:vsz, field: "vsz")
69
+ .register_column(:rss, field: "rss")
70
+ .register_column(:tty, field: "tty")
71
+ .register_column(:states, field: "stat")
72
+ .register_column(:start, field: "start")
73
+ .register_column(:time, field: "time")
74
+ .register_column(:users, field: "user")
75
+ .register_column(:commands, field: "command")
76
+ .install_filter_methods_on_resource(self, :filtered_processes)
77
77
 
78
78
  private
79
79
 
@@ -193,7 +193,7 @@ module Inspec::Resources
193
193
 
194
194
  # build a hash of process data that we'll turn into a struct for FilterTable
195
195
  process_data = {}
196
- [:label, :pid, :cpu, :mem, :vsz, :rss, :tty, :stat, :start, :time, :user, :command].each do |param|
196
+ %i{label pid cpu mem vsz rss tty stat start time user command}.each do |param|
197
197
  # not all operating systems support all fields, so skip the field if we don't have it
198
198
  process_data[param] = line[field_map[param]] if field_map.key?(param)
199
199
  end
@@ -202,8 +202,9 @@ module Inspec::Resources
202
202
  process_data[:pid] = process_data[:pid].to_i if process_data.key?(:pid)
203
203
 
204
204
  # some ps variants (*cough* busybox) display vsz and rss as human readable MB or GB
205
- [:vsz, :rss].each do |param|
205
+ %i{vsz rss}.each do |param|
206
206
  next unless process_data.key?(param)
207
+
207
208
  process_data[param] = convert_to_kilobytes(process_data[param])
208
209
  end
209
210
 
@@ -36,12 +36,14 @@ module Inspec::Resources
36
36
 
37
37
  def read_content
38
38
  return @content if defined?(@content)
39
+
39
40
  @content = read_file_content(@conf_path, allow_empty: true)
40
41
  end
41
42
 
42
43
  def read_params
43
44
  return @params if defined?(@params)
44
45
  return @params = {} if read_content.nil?
46
+
45
47
  @params = ErlangConfigFile.parse(read_content)
46
48
  rescue Parslet::ParseFailed
47
49
  raise "Cannot parse RabbitMQ config: \"#{read_content}\""
@@ -71,7 +71,7 @@ module Inspec::Resources
71
71
  @options[:path] = reg_key
72
72
  end
73
73
 
74
- return skip_resource "The `registry_key` resource is not supported on your OS yet." if !inspec.os.windows?
74
+ return skip_resource "The `registry_key` resource is not supported on your OS yet." unless inspec.os.windows?
75
75
  end
76
76
 
77
77
  def exists?
@@ -133,24 +133,28 @@ module Inspec::Resources
133
133
 
134
134
  def registry_property_exists(regkey, property)
135
135
  return false if regkey.nil? || property.nil?
136
+
136
137
  # always ensure the key is lower case
137
138
  !regkey[prep_prop(property)].nil?
138
139
  end
139
140
 
140
141
  def registry_property_value(regkey, property)
141
- return nil if !registry_property_exists(regkey, property)
142
+ return nil unless registry_property_exists(regkey, property)
143
+
142
144
  # always ensure the key is lower case
143
145
  regkey[prep_prop(property)]["value"]
144
146
  end
145
147
 
146
148
  def registry_property_type(regkey, property)
147
- return nil if !registry_property_exists(regkey, property)
149
+ return nil unless registry_property_exists(regkey, property)
150
+
148
151
  # always ensure the key is lower case
149
152
  regkey[prep_prop(property)]["type"]
150
153
  end
151
154
 
152
155
  def registry_key(path)
153
156
  return @registry_cache if defined?(@registry_cache)
157
+
154
158
  # load registry key and all properties
155
159
  script = <<-EOH
156
160
  Function InSpec-GetRegistryKey($path) {
@@ -199,6 +203,7 @@ module Inspec::Resources
199
203
 
200
204
  def children_keys(path, filter = "")
201
205
  return @children_cache if defined?(@children_cache)
206
+
202
207
  filter = filter.source if filter.is_a? ::Regexp
203
208
  script = <<-EOH
204
209
  Function InSpec-FindChildsRegistryKeys($path, $filter) {
@@ -15,10 +15,11 @@ module Inspec::Resources
15
15
  EXAMPLE
16
16
 
17
17
  def initialize(opts = {})
18
- supported_opt_keys = [:user, :group, :unspecified]
18
+ supported_opt_keys = %i{user group unspecified}
19
19
  raise ArgumentError, "Invalid security_identifier param '#{opts}'. Please pass a hash with these supported keys: #{supported_opt_keys}" unless opts.respond_to?(:keys)
20
20
  raise ArgumentError, "Unsupported security_identifier options '#{opts.keys - supported_opt_keys}'. Supported keys: #[supported_opt_keys]" unless (opts.keys - supported_opt_keys).empty?
21
21
  raise ArgumentError, "Specifying more than one of :user :group or :unspecified for security_identifier is not supported" unless opts.keys && (opts.keys & supported_opt_keys).length == 1
22
+
22
23
  if opts[:user]
23
24
  @type = :user
24
25
  @name = opts[:user]
@@ -32,6 +33,7 @@ module Inspec::Resources
32
33
  @name = opts[:unspecified]
33
34
  end
34
35
  raise ArgumentError, "Specify one of :user :group or :unspecified for security_identifier" unless @name
36
+
35
37
  @sids = nil
36
38
  end
37
39
 
@@ -104,6 +104,7 @@ module Inspec::Resources
104
104
 
105
105
  # return an empty array if configuration does not include rights configuration
106
106
  return [] if res.nil? && MS_PRIVILEGES_RIGHTS.include?(name.to_s)
107
+
107
108
  res
108
109
  end
109
110
 
@@ -153,7 +154,7 @@ module Inspec::Resources
153
154
  elsif val =~ /[,]{0,1}\*\S/
154
155
  if @translate_sid
155
156
  val.split(",").map do |v|
156
- object_name = inspec.command("(New-Object System.Security.Principal.SecurityIdentifier(\"#{v.sub('*S', 'S')}\")).Translate( [System.Security.Principal.NTAccount]).Value").stdout.to_s.strip
157
+ object_name = inspec.command("(New-Object System.Security.Principal.SecurityIdentifier(\"#{v.sub("*S", "S")}\")).Translate( [System.Security.Principal.NTAccount]).Value").stdout.to_s.strip
157
158
  object_name.empty? || object_name.nil? ? v.sub("*S", "S") : object_name
158
159
  end
159
160
  else
@@ -52,7 +52,7 @@ module Inspec::Resources
52
52
  end
53
53
 
54
54
  def to_s
55
- "#{owner} runlevels #{keys.join(', ')}"
55
+ "#{owner} runlevels #{keys.join(", ")}"
56
56
  end
57
57
  end
58
58
 
@@ -177,59 +177,69 @@ module Inspec::Resources
177
177
 
178
178
  def info
179
179
  return nil if @service_mgmt.nil?
180
+
180
181
  @cache ||= @service_mgmt.info(@service_name)
181
182
  end
182
183
 
183
184
  # verifies if the service is enabled
184
185
  def enabled?(_level = nil)
185
186
  return false if info.nil?
187
+
186
188
  info[:enabled]
187
189
  end
188
190
 
189
191
  def params
190
192
  return {} if info.nil?
193
+
191
194
  Hashie::Mash.new(info[:params] || {})
192
195
  end
193
196
 
194
197
  # verifies the service is registered
195
198
  def installed?(_name = nil, _version = nil)
196
199
  return false if info.nil?
200
+
197
201
  info[:installed]
198
202
  end
199
203
 
200
204
  # verifies the service is currently running
201
205
  def running?(_under = nil)
202
206
  return false if info.nil?
207
+
203
208
  info[:running]
204
209
  end
205
210
 
206
211
  # get all runlevels that are available and their configuration
207
212
  def runlevels(*args)
208
213
  return Runlevels.new(self) if info.nil? || info[:runlevels].nil?
214
+
209
215
  Runlevels.from_hash(self, info[:runlevels], args)
210
216
  end
211
217
 
212
218
  # returns the service type from info
213
219
  def type
214
220
  return nil if info.nil?
221
+
215
222
  info[:type]
216
223
  end
217
224
 
218
225
  # returns the service name from info
219
226
  def name
220
227
  return @service_name if info.nil?
228
+
221
229
  info[:name]
222
230
  end
223
231
 
224
232
  # returns the service description from info
225
233
  def description
226
234
  return nil if info.nil?
235
+
227
236
  info[:description]
228
237
  end
229
238
 
230
239
  # returns the service start up mode from info
231
240
  def startmode
232
241
  return nil if info.nil?
242
+
233
243
  info[:startmode]
234
244
  end
235
245
 
@@ -324,6 +334,7 @@ module Inspec::Resources
324
334
  def status?
325
335
  status_cmd = inspec.command("lssrc -s #{@name}")
326
336
  return nil if status_cmd.exit_status.to_i != 0
337
+
327
338
  status_cmd.stdout.split(/\n/).last.chomp =~ /active$/ ? true : false
328
339
  end
329
340
 
@@ -463,6 +474,7 @@ module Inspec::Resources
463
474
  # search for the service
464
475
  srv = /(^.*#{service_name}$)/.match(cmd.stdout)
465
476
  return nil if srv.nil? || srv[0].nil?
477
+
466
478
  enabled = true
467
479
 
468
480
  # check if the service is running