inspec 4.3.2 → 4.6.3

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 (368) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +36 -38
  3. data/README.md +37 -21
  4. data/etc/deprecations.json +10 -0
  5. data/etc/plugin_filters.json +8 -0
  6. data/inspec.gemspec +38 -39
  7. data/lib/bundles/inspec-compliance/api.rb +1 -1
  8. data/lib/bundles/inspec-compliance/configuration.rb +1 -1
  9. data/lib/bundles/inspec-compliance/http.rb +1 -1
  10. data/lib/bundles/inspec-compliance/support.rb +1 -1
  11. data/lib/bundles/inspec-compliance/target.rb +1 -1
  12. data/lib/bundles/inspec-supermarket.rb +3 -7
  13. data/lib/bundles/inspec-supermarket/api.rb +10 -13
  14. data/lib/bundles/inspec-supermarket/cli.rb +12 -15
  15. data/lib/bundles/inspec-supermarket/target.rb +7 -11
  16. data/lib/fetchers/git.rb +14 -15
  17. data/lib/fetchers/local.rb +6 -10
  18. data/lib/fetchers/mock.rb +3 -5
  19. data/lib/fetchers/url.rb +42 -44
  20. data/lib/inspec.rb +23 -24
  21. data/lib/inspec/archive/tar.rb +2 -6
  22. data/lib/inspec/archive/zip.rb +3 -7
  23. data/lib/inspec/backend.rb +8 -9
  24. data/lib/inspec/base_cli.rb +64 -65
  25. data/lib/inspec/cached_fetcher.rb +2 -3
  26. data/lib/inspec/cli.rb +136 -97
  27. data/lib/inspec/config.rb +71 -61
  28. data/lib/inspec/control_eval_context.rb +22 -18
  29. data/lib/inspec/dependencies/cache.rb +2 -3
  30. data/lib/inspec/dependencies/dependency_set.rb +2 -3
  31. data/lib/inspec/dependencies/lockfile.rb +8 -9
  32. data/lib/inspec/dependencies/requirement.rb +7 -8
  33. data/lib/inspec/dependencies/resolver.rb +5 -7
  34. data/lib/inspec/describe.rb +2 -6
  35. data/lib/inspec/dist.rb +20 -0
  36. data/lib/inspec/dsl.rb +4 -7
  37. data/lib/inspec/dsl_shared.rb +1 -2
  38. data/lib/inspec/env_printer.rb +11 -12
  39. data/lib/inspec/errors.rb +0 -4
  40. data/lib/inspec/exceptions.rb +0 -1
  41. data/lib/inspec/expect.rb +5 -8
  42. data/lib/inspec/fetcher.rb +7 -10
  43. data/lib/inspec/file_provider.rb +24 -24
  44. data/lib/inspec/formatters.rb +3 -3
  45. data/lib/inspec/formatters/base.rb +8 -8
  46. data/lib/inspec/globals.rb +2 -2
  47. data/lib/inspec/impact.rb +5 -7
  48. data/lib/inspec/input_registry.rb +84 -33
  49. data/lib/inspec/library_eval_context.rb +3 -6
  50. data/lib/inspec/log.rb +1 -5
  51. data/lib/inspec/metadata.rb +17 -16
  52. data/lib/inspec/method_source.rb +5 -9
  53. data/lib/inspec/objects.rb +10 -12
  54. data/lib/inspec/objects/control.rb +7 -9
  55. data/lib/inspec/objects/describe.rb +9 -11
  56. data/lib/inspec/objects/each_loop.rb +1 -3
  57. data/lib/inspec/objects/input.rb +24 -26
  58. data/lib/inspec/objects/list.rb +4 -6
  59. data/lib/inspec/objects/or_test.rb +2 -4
  60. data/lib/inspec/objects/ruby_helper.rb +3 -5
  61. data/lib/inspec/objects/tag.rb +0 -2
  62. data/lib/inspec/objects/test.rb +9 -11
  63. data/lib/inspec/objects/value.rb +3 -5
  64. data/lib/inspec/plugin/v1.rb +2 -2
  65. data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
  66. data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
  67. data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
  68. data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
  69. data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
  70. data/lib/inspec/plugin/v1/plugins.rb +15 -19
  71. data/lib/inspec/plugin/v1/registry.rb +0 -4
  72. data/lib/inspec/plugin/v2.rb +8 -8
  73. data/lib/inspec/plugin/v2/activator.rb +1 -1
  74. data/lib/inspec/plugin/v2/config_file.rb +6 -6
  75. data/lib/inspec/plugin/v2/filter.rb +13 -13
  76. data/lib/inspec/plugin/v2/installer.rb +36 -24
  77. data/lib/inspec/plugin/v2/loader.rb +28 -28
  78. data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
  79. data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
  80. data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
  81. data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
  82. data/lib/inspec/plugin/v2/registry.rb +7 -7
  83. data/lib/inspec/polyfill.rb +0 -3
  84. data/lib/inspec/profile.rb +55 -63
  85. data/lib/inspec/profile_context.rb +27 -30
  86. data/lib/inspec/profile_vendor.rb +6 -9
  87. data/lib/inspec/reporters.rb +24 -24
  88. data/lib/inspec/reporters/automate.rb +17 -19
  89. data/lib/inspec/reporters/base.rb +1 -1
  90. data/lib/inspec/reporters/cli.rb +88 -91
  91. data/lib/inspec/reporters/json.rb +2 -4
  92. data/lib/inspec/reporters/json_automate.rb +1 -3
  93. data/lib/inspec/reporters/json_min.rb +1 -3
  94. data/lib/inspec/reporters/junit.rb +26 -28
  95. data/lib/inspec/reporters/yaml.rb +1 -3
  96. data/lib/inspec/require_loader.rb +0 -4
  97. data/lib/inspec/resource.rb +4 -125
  98. data/lib/inspec/resources.rb +121 -0
  99. data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
  100. data/lib/{resources → inspec/resources}/apache.rb +13 -14
  101. data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
  102. data/lib/{resources → inspec/resources}/apt.rb +17 -17
  103. data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
  104. data/lib/{resources → inspec/resources}/auditd.rb +62 -64
  105. data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
  106. data/lib/{resources → inspec/resources}/bash.rb +6 -8
  107. data/lib/{resources → inspec/resources}/bond.rb +15 -14
  108. data/lib/{resources → inspec/resources}/bridge.rb +8 -8
  109. data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
  110. data/lib/{resources → inspec/resources}/command.rb +11 -10
  111. data/lib/{resources → inspec/resources}/cpan.rb +12 -12
  112. data/lib/{resources → inspec/resources}/cran.rb +9 -9
  113. data/lib/{resources → inspec/resources}/crontab.rb +47 -48
  114. data/lib/{resources → inspec/resources}/csv.rb +5 -5
  115. data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
  116. data/lib/{resources → inspec/resources}/directory.rb +5 -7
  117. data/lib/{resources → inspec/resources}/docker.rb +63 -63
  118. data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
  119. data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
  120. data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
  121. data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
  122. data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
  123. data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
  124. data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
  125. data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
  126. data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
  127. data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
  128. data/lib/{resources → inspec/resources}/file.rb +80 -79
  129. data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
  130. data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
  131. data/lib/{resources → inspec/resources}/gem.rb +12 -12
  132. data/lib/{resources → inspec/resources}/groups.rb +28 -27
  133. data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
  134. data/lib/{resources → inspec/resources}/host.rb +31 -29
  135. data/lib/{resources → inspec/resources}/http.rb +24 -24
  136. data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
  137. data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
  138. data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
  139. data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
  140. data/lib/{resources → inspec/resources}/ini.rb +7 -8
  141. data/lib/{resources → inspec/resources}/interface.rb +30 -30
  142. data/lib/{resources → inspec/resources}/iptables.rb +8 -8
  143. data/lib/{resources → inspec/resources}/json.rb +8 -10
  144. data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
  145. data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
  146. data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
  147. data/lib/{resources → inspec/resources}/ksh.rb +6 -8
  148. data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
  149. data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
  150. data/lib/{resources → inspec/resources}/mount.rb +6 -8
  151. data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
  152. data/lib/inspec/resources/mysql.rb +81 -0
  153. data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
  154. data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
  155. data/lib/{resources → inspec/resources}/nginx.rb +16 -17
  156. data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
  157. data/lib/{resources → inspec/resources}/npm.rb +9 -10
  158. data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
  159. data/lib/{resources → inspec/resources}/oneget.rb +8 -8
  160. data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
  161. data/lib/{resources → inspec/resources}/os.rb +6 -8
  162. data/lib/{resources → inspec/resources}/os_env.rb +11 -12
  163. data/lib/{resources → inspec/resources}/package.rb +66 -65
  164. data/lib/{resources → inspec/resources}/packages.rb +13 -13
  165. data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
  166. data/lib/{resources → inspec/resources}/passwd.rb +18 -19
  167. data/lib/{resources → inspec/resources}/pip.rb +19 -19
  168. data/lib/{resources → inspec/resources}/platform.rb +9 -11
  169. data/lib/{resources → inspec/resources}/port.rb +134 -136
  170. data/lib/{resources → inspec/resources}/postgres.rb +40 -32
  171. data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
  172. data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
  173. data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
  174. data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
  175. data/lib/{resources → inspec/resources}/powershell.rb +17 -13
  176. data/lib/{resources → inspec/resources}/processes.rb +29 -29
  177. data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
  178. data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
  179. data/lib/inspec/resources/script.rb +1 -0
  180. data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
  181. data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
  182. data/lib/{resources → inspec/resources}/service.rb +74 -75
  183. data/lib/{resources → inspec/resources}/shadow.rb +44 -45
  184. data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
  185. data/lib/{resources → inspec/resources}/ssl.rb +28 -29
  186. data/lib/inspec/resources/sys_info.rb +30 -0
  187. data/lib/{resources → inspec/resources}/toml.rb +5 -7
  188. data/lib/{resources → inspec/resources}/users.rb +65 -65
  189. data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
  190. data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
  191. data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
  192. data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
  193. data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
  194. data/lib/{resources → inspec/resources}/wmi.rb +7 -8
  195. data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
  196. data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
  197. data/lib/{resources → inspec/resources}/xml.rb +7 -7
  198. data/lib/{resources → inspec/resources}/yaml.rb +5 -6
  199. data/lib/{resources → inspec/resources}/yum.rb +10 -10
  200. data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
  201. data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
  202. data/lib/inspec/rspec_extensions.rb +24 -8
  203. data/lib/inspec/rule.rb +14 -15
  204. data/lib/inspec/runner.rb +28 -28
  205. data/lib/inspec/runner_mock.rb +1 -5
  206. data/lib/inspec/runner_rspec.rb +18 -20
  207. data/lib/inspec/runtime_profile.rb +2 -5
  208. data/lib/inspec/schema.rb +142 -143
  209. data/lib/inspec/secrets.rb +3 -7
  210. data/lib/inspec/secrets/yaml.rb +3 -5
  211. data/lib/inspec/shell.rb +11 -15
  212. data/lib/inspec/shell_detector.rb +6 -7
  213. data/lib/inspec/source_reader.rb +4 -8
  214. data/lib/inspec/ui.rb +33 -39
  215. data/lib/inspec/ui_table_helper.rb +12 -0
  216. data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
  217. data/lib/{utils → inspec/utils}/convert.rb +0 -4
  218. data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
  219. data/lib/inspec/utils/deprecation.rb +6 -0
  220. data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
  221. data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
  222. data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
  223. data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
  224. data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
  225. data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
  226. data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
  227. data/lib/{utils → inspec/utils}/filter.rb +30 -33
  228. data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
  229. data/lib/{utils → inspec/utils}/find_files.rb +9 -12
  230. data/lib/{utils → inspec/utils}/hash.rb +1 -5
  231. data/lib/inspec/utils/json_log.rb +15 -0
  232. data/lib/inspec/utils/latest_version.rb +13 -0
  233. data/lib/{utils → inspec/utils}/modulator.rb +0 -3
  234. data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
  235. data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
  236. data/lib/{utils → inspec/utils}/parser.rb +45 -45
  237. data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
  238. data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
  239. data/lib/{utils → inspec/utils}/spdx.rb +1 -4
  240. data/lib/{utils → inspec/utils}/spdx.txt +0 -0
  241. data/lib/inspec/utils/telemetry.rb +3 -3
  242. data/lib/inspec/utils/telemetry/collector.rb +30 -9
  243. data/lib/inspec/utils/telemetry/data_series.rb +3 -1
  244. data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
  245. data/lib/inspec/version.rb +1 -1
  246. data/lib/matchers/matchers.rb +22 -25
  247. data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
  248. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
  249. data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
  250. data/lib/plugins/inspec-artifact/test/functional/inspec_artifact_test.rb +12 -11
  251. data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
  252. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
  253. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
  254. data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
  255. data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
  256. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
  257. data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
  258. data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
  259. data/lib/plugins/inspec-compliance/test/functional/inspec_compliance_test.rb +12 -14
  260. data/lib/plugins/inspec-compliance/test/integration/default/cli.rb +39 -41
  261. data/lib/plugins/inspec-compliance/test/unit/api/login_test.rb +64 -64
  262. data/lib/plugins/inspec-compliance/test/unit/api_test.rb +157 -156
  263. data/lib/plugins/inspec-compliance/test/unit/target_test.rb +85 -85
  264. data/lib/plugins/inspec-habitat/Berksfile +2 -2
  265. data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
  266. data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
  267. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
  268. data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
  269. data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
  270. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/Berksfile +1 -1
  271. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/metadata.rb +8 -8
  272. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/recipes/default.rb +17 -17
  273. data/lib/plugins/inspec-habitat/test/functional/inspec_habitat_test.rb +9 -8
  274. data/lib/plugins/inspec-habitat/test/integration/default/inspec_habitat/controls/inspec_habitat.rb +14 -14
  275. data/lib/plugins/inspec-habitat/test/support/example_profile/controls/example.rb +4 -4
  276. data/lib/plugins/inspec-habitat/test/unit/profile_test.rb +42 -41
  277. data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
  278. data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
  279. data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
  280. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
  281. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
  282. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
  283. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
  284. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
  285. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
  286. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
  287. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
  288. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/functional/inspec_plugin_template_test.rb +5 -5
  289. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/helper.rb +1 -3
  290. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/cli_args_test.rb +2 -2
  291. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/plugin_def_test.rb +2 -2
  292. data/lib/plugins/inspec-init/templates/profiles/aws/controls/example.rb +10 -11
  293. data/lib/plugins/inspec-init/templates/profiles/azure/controls/example.rb +4 -5
  294. data/lib/plugins/inspec-init/templates/profiles/gcp/controls/example.rb +10 -11
  295. data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
  296. data/lib/plugins/inspec-init/test/functional/inspec_init_plugin_test.rb +51 -50
  297. data/lib/plugins/inspec-init/test/functional/inspec_init_profile_test.rb +35 -33
  298. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
  299. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
  300. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
  301. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/wrong-name/lib/wrong-name.rb +1 -1
  302. data/lib/plugins/inspec-plugin-manager-cli/test/functional/inspec-plugin_test.rb +281 -271
  303. data/lib/plugins/inspec-plugin-manager-cli/test/unit/cli_args_test.rb +41 -41
  304. data/lib/plugins/inspec-plugin-manager-cli/test/unit/plugin_def_test.rb +25 -6
  305. data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
  306. data/lib/resource_support/aws.rb +67 -67
  307. data/lib/resource_support/aws/aws_plural_resource_mixin.rb +4 -1
  308. data/lib/resource_support/aws/aws_resource_mixin.rb +4 -3
  309. data/lib/resource_support/aws/aws_singular_resource_mixin.rb +4 -1
  310. data/lib/resources/aws/aws_billing_report.rb +15 -8
  311. data/lib/resources/aws/aws_billing_reports.rb +10 -7
  312. data/lib/resources/aws/aws_cloudtrail_trail.rb +9 -5
  313. data/lib/resources/aws/aws_cloudtrail_trails.rb +9 -5
  314. data/lib/resources/aws/aws_cloudwatch_alarm.rb +9 -5
  315. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +12 -8
  316. data/lib/resources/aws/aws_config_delivery_channel.rb +13 -9
  317. data/lib/resources/aws/aws_config_recorder.rb +10 -6
  318. data/lib/resources/aws/aws_ebs_volume.rb +12 -8
  319. data/lib/resources/aws/aws_ebs_volumes.rb +9 -5
  320. data/lib/resources/aws/aws_ec2_instance.rb +14 -11
  321. data/lib/resources/aws/aws_ec2_instances.rb +9 -5
  322. data/lib/resources/aws/aws_ecs_cluster.rb +11 -7
  323. data/lib/resources/aws/aws_eks_cluster.rb +13 -9
  324. data/lib/resources/aws/aws_elb.rb +9 -5
  325. data/lib/resources/aws/aws_elbs.rb +9 -5
  326. data/lib/resources/aws/aws_flow_log.rb +17 -13
  327. data/lib/resources/aws/aws_iam_access_key.rb +15 -11
  328. data/lib/resources/aws/aws_iam_access_keys.rb +19 -15
  329. data/lib/resources/aws/aws_iam_group.rb +9 -5
  330. data/lib/resources/aws/aws_iam_groups.rb +9 -5
  331. data/lib/resources/aws/aws_iam_password_policy.rb +13 -10
  332. data/lib/resources/aws/aws_iam_policies.rb +9 -5
  333. data/lib/resources/aws/aws_iam_policy.rb +16 -12
  334. data/lib/resources/aws/aws_iam_role.rb +9 -5
  335. data/lib/resources/aws/aws_iam_root_user.rb +12 -8
  336. data/lib/resources/aws/aws_iam_user.rb +12 -12
  337. data/lib/resources/aws/aws_iam_users.rb +10 -10
  338. data/lib/resources/aws/aws_kms_key.rb +12 -8
  339. data/lib/resources/aws/aws_kms_keys.rb +9 -5
  340. data/lib/resources/aws/aws_rds_instance.rb +11 -8
  341. data/lib/resources/aws/aws_route_table.rb +11 -7
  342. data/lib/resources/aws/aws_route_tables.rb +10 -6
  343. data/lib/resources/aws/aws_s3_bucket.rb +14 -11
  344. data/lib/resources/aws/aws_s3_bucket_object.rb +12 -9
  345. data/lib/resources/aws/aws_s3_buckets.rb +9 -7
  346. data/lib/resources/aws/aws_security_group.rb +16 -12
  347. data/lib/resources/aws/aws_security_groups.rb +12 -8
  348. data/lib/resources/aws/aws_sns_subscription.rb +15 -11
  349. data/lib/resources/aws/aws_sns_topic.rb +10 -6
  350. data/lib/resources/aws/aws_sns_topics.rb +9 -5
  351. data/lib/resources/aws/aws_sqs_queue.rb +18 -14
  352. data/lib/resources/aws/aws_subnet.rb +11 -7
  353. data/lib/resources/aws/aws_subnets.rb +9 -5
  354. data/lib/resources/aws/aws_vpc.rb +10 -6
  355. data/lib/resources/aws/aws_vpcs.rb +9 -5
  356. data/lib/resources/azure/azure_backend.rb +20 -18
  357. data/lib/resources/azure/azure_generic_resource.rb +13 -15
  358. data/lib/resources/azure/azure_resource_group.rb +17 -19
  359. data/lib/resources/azure/azure_virtual_machine.rb +6 -8
  360. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +6 -8
  361. data/lib/source_readers/flat.rb +6 -10
  362. data/lib/source_readers/inspec.rb +8 -12
  363. metadata +141 -142
  364. data/lib/resources/mysql.rb +0 -82
  365. data/lib/resources/sys_info.rb +0 -28
  366. data/lib/utils/deprecation.rb +0 -6
  367. data/lib/utils/json_log.rb +0 -18
  368. data/lib/utils/latest_version.rb +0 -22
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- require_relative 'base'
1
+ require_relative "base"
2
+ require "inspec/dist"
3
3
 
4
4
  #
5
5
  # Notes:
@@ -73,39 +73,41 @@ require_relative 'base'
73
73
  module InspecPlugins
74
74
  module Artifact
75
75
  class CLI < Inspec.plugin(2, :cli_command)
76
- subcommand_desc 'artifact SUBCOMMAND', 'Manage InSpec Artifacts'
76
+ include Inspec::Dist
77
77
 
78
- desc 'generate', 'Generate a RSA key pair for signing and verification'
78
+ subcommand_desc "artifact SUBCOMMAND", "Manage #{PRODUCT_NAME} Artifacts"
79
+
80
+ desc "generate", "Generate a RSA key pair for signing and verification"
79
81
  option :keyname, type: :string, required: true,
80
- desc: 'Desriptive name of key'
81
- option :keydir, type: :string, default: './',
82
- desc: 'Directory to search for keys'
82
+ desc: "Desriptive name of key"
83
+ option :keydir, type: :string, default: "./",
84
+ desc: "Directory to search for keys"
83
85
  def generate_keys
84
- puts 'Generating keys'
86
+ puts "Generating keys"
85
87
  InspecPlugins::Artifact::Base.keygen(options)
86
88
  end
87
89
 
88
- desc 'sign-profile', 'Create a signed .iaf artifact'
90
+ desc "sign-profile", "Create a signed .iaf artifact"
89
91
  option :profile, type: :string, required: true,
90
- desc: 'Path to profile directory'
92
+ desc: "Path to profile directory"
91
93
  option :keyname, type: :string, required: true,
92
- desc: 'Desriptive name of key'
94
+ desc: "Desriptive name of key"
93
95
  def sign_profile
94
96
  InspecPlugins::Artifact::Base.profile_sign(options)
95
97
  end
96
98
 
97
- desc 'verify-profile', 'Verify a signed .iaf artifact'
99
+ desc "verify-profile", "Verify a signed .iaf artifact"
98
100
  option :infile, type: :string, required: true,
99
- desc: '.iaf file to verify'
101
+ desc: ".iaf file to verify"
100
102
  def verify_profile
101
103
  InspecPlugins::Artifact::Base.profile_verify(options)
102
104
  end
103
105
 
104
- desc 'install-profile', 'Verify and install a signed .iaf artifact'
106
+ desc "install-profile", "Verify and install a signed .iaf artifact"
105
107
  option :infile, type: :string, required: true,
106
- desc: '.iaf file to install'
108
+ desc: ".iaf file to install"
107
109
  option :destdir, type: :string, required: true,
108
- desc: 'Installation directory'
110
+ desc: "Installation directory"
109
111
  def install_profile
110
112
  InspecPlugins::Artifact::Base.profile_install(options)
111
113
  end
@@ -1,12 +1,14 @@
1
- # encoding: utf-8
1
+ require_relative "../../../shared/core_plugin_test_helper.rb"
2
+ require "fileutils"
3
+ require "securerandom"
2
4
 
3
- require_relative '../../../shared/core_plugin_test_helper.rb'
4
- require 'fileutils'
5
- require 'securerandom'
6
-
7
- class ArtifactCli < MiniTest::Test
5
+ class ArtifactCli < Minitest::Test
8
6
  include CorePluginFunctionalHelper
9
7
 
8
+ before do
9
+ skip_windows!
10
+ end
11
+
10
12
  def test_generating_archive_keys
11
13
  Dir.mktmpdir do |dir|
12
14
  unique_key_name = SecureRandom.uuid()
@@ -14,8 +16,8 @@ class ArtifactCli < MiniTest::Test
14
16
  assert_equal 0, out.exit_status
15
17
 
16
18
  stdout = out.stdout.force_encoding(Encoding::UTF_8)
17
- assert_includes stdout, 'Generating private key'
18
- assert_includes stdout, 'Generating public key'
19
+ assert_includes stdout, "Generating private key"
20
+ assert_includes stdout, "Generating public key"
19
21
  end
20
22
  end
21
23
 
@@ -23,11 +25,10 @@ class ArtifactCli < MiniTest::Test
23
25
  Dir.mktmpdir do |dir|
24
26
  unique_key_name = SecureRandom.uuid()
25
27
  install_dir = File.join(dir, SecureRandom.uuid())
26
- profile = File.join(dir, 'profile')
27
28
  FileUtils.mkdir(install_dir)
28
29
 
29
30
  # create profile
30
- profile = File.join(dir, 'artifact-profile')
31
+ profile = File.join(dir, "artifact-profile")
31
32
  run_inspec_process("init profile artifact-profile", prefix: "cd #{dir} &&")
32
33
 
33
34
  out = run_inspec_process("artifact generate --keyname #{unique_key_name}", prefix: "cd #{dir} &&")
@@ -40,7 +41,7 @@ class ArtifactCli < MiniTest::Test
40
41
  assert_equal 0, out.exit_status
41
42
 
42
43
  assert_includes out.stdout.force_encoding(Encoding::UTF_8), "Installing to #{install_dir}"
43
- assert_includes Dir.entries(install_dir).join, 'inspec.yml'
44
+ assert_includes Dir.entries(install_dir).join, "inspec.yml"
44
45
  end
45
46
  end
46
47
  end
@@ -4,7 +4,7 @@ module InspecPlugins
4
4
  plugin_name :'inspec-compliance'
5
5
 
6
6
  cli_command :compliance do
7
- require_relative 'inspec-compliance/cli'
7
+ require_relative "inspec-compliance/cli"
8
8
  InspecPlugins::Compliance::CLI
9
9
  end
10
10
  end
@@ -1,14 +1,13 @@
1
- # encoding: utf-8
1
+ require "net/http"
2
+ require "uri"
3
+ require "json"
4
+ require "inspec/dist"
2
5
 
3
- require 'net/http'
4
- require 'uri'
5
- require 'json'
6
-
7
- require_relative 'api/login'
8
- require_relative 'configuration'
9
- require_relative 'http'
10
- require_relative 'target'
11
- require_relative 'support'
6
+ require_relative "api/login"
7
+ require_relative "configuration"
8
+ require_relative "http"
9
+ require_relative "target"
10
+ require_relative "support"
12
11
 
13
12
  module InspecPlugins
14
13
  module Compliance
@@ -17,13 +16,14 @@ module InspecPlugins
17
16
  # API Implementation does not hold any state by itself,
18
17
  # everything will be stored in local Configuration store
19
18
  class API
19
+ include Inspec::Dist
20
20
  extend InspecPlugins::Compliance::API::Login
21
21
 
22
22
  # return all compliance profiles available for the user
23
23
  # the user is either specified in the options hash or by default
24
24
  # the username of the account is used that is logged in
25
25
  def self.profiles(config, profile_filter = nil) # rubocop:disable PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/MethodLength
26
- owner = config['owner'] || config['user']
26
+ owner = config["owner"] || config["user"]
27
27
 
28
28
  # Chef Compliance
29
29
  if is_compliance_server?(config)
@@ -47,43 +47,43 @@ module InspecPlugins
47
47
 
48
48
  if is_automate2_server?(config)
49
49
  body = { owner: owner, name: id }.to_json
50
- response = InspecPlugins::Compliance::HTTP.post_with_headers(url, headers, body, config['insecure'])
50
+ response = InspecPlugins::Compliance::HTTP.post_with_headers(url, headers, body, config["insecure"])
51
51
  else
52
- response = InspecPlugins::Compliance::HTTP.get(url, headers, config['insecure'])
52
+ response = InspecPlugins::Compliance::HTTP.get(url, headers, config["insecure"])
53
53
  end
54
54
  data = response.body
55
55
  response_code = response.code
56
56
  case response_code
57
- when '200'
58
- msg = 'success'
57
+ when "200"
58
+ msg = "success"
59
59
  profiles = JSON.parse(data)
60
60
  # iterate over profiles
61
61
  if is_compliance_server?(config)
62
62
  mapped_profiles = []
63
- profiles.values.each { |org|
63
+ profiles.values.each do |org|
64
64
  mapped_profiles += org.values
65
- }
65
+ end
66
66
  # Chef Automate pre 0.8.0
67
67
  elsif is_automate_server_pre_080?(config)
68
68
  mapped_profiles = profiles.values.flatten
69
69
  elsif is_automate2_server?(config)
70
70
  mapped_profiles = []
71
- profiles['profiles'].each { |p|
71
+ profiles["profiles"].each do |p|
72
72
  mapped_profiles << p
73
- }
73
+ end
74
74
  else
75
- mapped_profiles = profiles.map { |e|
76
- e['owner_id'] = owner
75
+ mapped_profiles = profiles.map do |e|
76
+ e["owner_id"] = owner
77
77
  e
78
- }
78
+ end
79
79
  end
80
80
  # filter by name and version if they were specified in profile_filter
81
81
  mapped_profiles.select! do |p|
82
- (!ver || p['version'] == ver) && (!id || p['name'] == id)
82
+ (!ver || p["version"] == ver) && (!id || p["name"] == id)
83
83
  end
84
84
  return msg, mapped_profiles
85
- when '401'
86
- msg = '401 Unauthorized. Please check your token.'
85
+ when "401"
86
+ msg = "401 Unauthorized. Please check your token."
87
87
  return msg, []
88
88
  else
89
89
  msg = "An unexpected error occurred (HTTP #{response_code}): #{response.message}"
@@ -95,20 +95,20 @@ module InspecPlugins
95
95
  # NB this method does not use Compliance::Configuration to allow for using
96
96
  # it before we know the version (e.g. oidc or not)
97
97
  def self.version(config)
98
- url = config['server']
99
- insecure = config['insecure']
98
+ url = config["server"]
99
+ insecure = config["insecure"]
100
100
 
101
101
  raise ServerConfigurationMissing if url.nil?
102
102
 
103
103
  headers = get_headers(config)
104
- response = InspecPlugins::Compliance::HTTP.get(url+'/version', headers, insecure)
105
- return {} if response.code == '404'
104
+ response = InspecPlugins::Compliance::HTTP.get(url + "/version", headers, insecure)
105
+ return {} if response.code == "404"
106
106
 
107
107
  data = response.body
108
108
  return {} if data.nil? || data.empty?
109
109
 
110
110
  parsed = JSON.parse(data)
111
- return {} unless parsed.key?('version') && !parsed['version'].empty?
111
+ return {} unless parsed.key?("version") && !parsed["version"].empty?
112
112
 
113
113
  parsed
114
114
  end
@@ -135,9 +135,9 @@ module InspecPlugins
135
135
 
136
136
  headers = get_headers(config)
137
137
  if is_automate2_server?(config)
138
- res = InspecPlugins::Compliance::HTTP.post_multipart_file(url, headers, archive_path, config['insecure'])
138
+ res = InspecPlugins::Compliance::HTTP.post_multipart_file(url, headers, archive_path, config["insecure"])
139
139
  else
140
- res = InspecPlugins::Compliance::HTTP.post_file(url, headers, archive_path, config['insecure'])
140
+ res = InspecPlugins::Compliance::HTTP.post_file(url, headers, archive_path, config["insecure"])
141
141
  end
142
142
 
143
143
  [res.is_a?(Net::HTTPSuccess), res.body]
@@ -151,11 +151,11 @@ module InspecPlugins
151
151
  access_token = nil
152
152
  response = InspecPlugins::Compliance::HTTP.send_request(uri, req, insecure)
153
153
  data = response.body
154
- if response.code == '200'
154
+ if response.code == "200"
155
155
  begin
156
156
  tokendata = JSON.parse(data)
157
- access_token = tokendata['access_token']
158
- msg = 'Successfully fetched API access token'
157
+ access_token = tokendata["access_token"]
158
+ msg = "Successfully fetched API access token"
159
159
  success = true
160
160
  rescue JSON::ParserError => e
161
161
  success = false
@@ -178,9 +178,9 @@ module InspecPlugins
178
178
  access_token = nil
179
179
  response = InspecPlugins::Compliance::HTTP.send_request(uri, req, insecure)
180
180
  data = response.body
181
- if response.code == '200'
181
+ if response.code == "200"
182
182
  access_token = data
183
- msg = 'Successfully fetched an API access token valid for 12 hours'
183
+ msg = "Successfully fetched an API access token valid for 12 hours"
184
184
  success = true
185
185
  else
186
186
  success = false
@@ -194,22 +194,22 @@ module InspecPlugins
194
194
  def self.get_headers(config)
195
195
  token = get_token(config)
196
196
  if is_automate_server?(config) || is_automate2_server?(config)
197
- headers = { 'chef-delivery-enterprise' => config['automate']['ent'] }
198
- if config['automate']['token_type'] == 'dctoken'
199
- headers['x-data-collector-token'] = token
197
+ headers = { "chef-delivery-enterprise" => config["automate"]["ent"] }
198
+ if config["automate"]["token_type"] == "dctoken"
199
+ headers["x-data-collector-token"] = token
200
200
  else
201
- headers['chef-delivery-user'] = config['user']
202
- headers['chef-delivery-token'] = token
201
+ headers["chef-delivery-user"] = config["user"]
202
+ headers["chef-delivery-token"] = token
203
203
  end
204
204
  else
205
- headers = { 'Authorization' => "Bearer #{token}" }
205
+ headers = { "Authorization" => "Bearer #{token}" }
206
206
  end
207
207
  headers
208
208
  end
209
209
 
210
210
  def self.get_token(config)
211
- return config['token'] unless config['refresh_token']
212
- _success, _msg, token = get_token_via_refresh_token(config['server'], config['refresh_token'], config['insecure'])
211
+ return config["token"] unless config["refresh_token"]
212
+ _success, _msg, token = get_token_via_refresh_token(config["server"], config["refresh_token"], config["insecure"])
213
213
  token
214
214
  end
215
215
 
@@ -227,52 +227,52 @@ module InspecPlugins
227
227
  end
228
228
 
229
229
  def self.profile_split(profile)
230
- owner, id = profile.split('/')
231
- id, version = id.split('#')
230
+ owner, id = profile.split("/")
231
+ id, version = id.split("#")
232
232
  [owner, id, version]
233
233
  end
234
234
 
235
235
  # returns a parsed url for `admin/profile` or `compliance://admin/profile`
236
236
  def self.sanitize_profile_name(profile)
237
- if URI(profile).scheme == 'compliance'
237
+ if URI(profile).scheme == "compliance"
238
238
  uri = URI(profile)
239
239
  else
240
240
  uri = URI("compliance://#{profile}")
241
241
  end
242
- uri.to_s.sub(%r{^compliance:\/\/}, '')
242
+ uri.to_s.sub(%r{^compliance:\/\/}, "")
243
243
  end
244
244
 
245
245
  def self.is_compliance_server?(config)
246
- config['server_type'] == 'compliance'
246
+ config["server_type"] == "compliance"
247
247
  end
248
248
 
249
249
  def self.is_automate_server_pre_080?(config)
250
250
  # Automate versions before 0.8.x do not have a valid version in the config
251
- return false unless config['server_type'] == 'automate'
251
+ return false unless config["server_type"] == "automate"
252
252
  server_version_from_config(config).nil?
253
253
  end
254
254
 
255
255
  def self.is_automate_server_080_and_later?(config)
256
256
  # Automate versions 0.8.x and later will have a "version" key in the config
257
257
  # that is properly parsed out via server_version_from_config below
258
- return false unless config['server_type'] == 'automate'
258
+ return false unless config["server_type"] == "automate"
259
259
  !server_version_from_config(config).nil?
260
260
  end
261
261
 
262
262
  def self.is_automate2_server?(config)
263
- config['server_type'] == 'automate2'
263
+ config["server_type"] == "automate2"
264
264
  end
265
265
 
266
266
  def self.is_automate_server?(config)
267
- config['server_type'] == 'automate'
267
+ config["server_type"] == "automate"
268
268
  end
269
269
 
270
270
  def self.server_version_from_config(config)
271
271
  # Automate versions 0.8.x and later will have a "version" key in the config
272
272
  # that looks like: "version":{"api":"compliance","version":"0.8.24"}
273
- return nil unless config.key?('version')
274
- return nil unless config['version'].is_a?(Hash)
275
- config['version']['version']
273
+ return nil unless config.key?("version")
274
+ return nil unless config["version"].is_a?(Hash)
275
+ config["version"]["version"]
276
276
  end
277
277
 
278
278
  def self.determine_server_type(url, insecure)
@@ -283,18 +283,18 @@ module InspecPlugins
283
283
  elsif target_is_compliance_server?(url, insecure)
284
284
  :compliance
285
285
  else
286
- Inspec::Log.debug('Could not determine server type using known endpoints')
286
+ Inspec::Log.debug("Could not determine server type using known endpoints")
287
287
  nil
288
288
  end
289
289
  end
290
290
 
291
291
  def self.target_is_automate2_server?(url, insecure)
292
- automate_endpoint = '/dex/auth'
292
+ automate_endpoint = "/dex/auth"
293
293
  response = InspecPlugins::Compliance::HTTP.get(url + automate_endpoint, nil, insecure)
294
- if response.code == '400'
294
+ if response.code == "400"
295
295
  Inspec::Log.debug(
296
296
  "Received 400 from #{url}#{automate_endpoint} - " \
297
- 'assuming target is a Chef Automate2 instance',
297
+ "assuming target is a #{AUTOMATE_PRODUCT_NAME}2 instance"
298
298
  )
299
299
  true
300
300
  else
@@ -303,30 +303,30 @@ module InspecPlugins
303
303
  end
304
304
 
305
305
  def self.target_is_automate_server?(url, insecure)
306
- automate_endpoint = '/compliance/version'
306
+ automate_endpoint = "/compliance/version"
307
307
  response = InspecPlugins::Compliance::HTTP.get(url + automate_endpoint, nil, insecure)
308
308
  case response.code
309
- when '401'
309
+ when "401"
310
310
  Inspec::Log.debug(
311
311
  "Received 401 from #{url}#{automate_endpoint} - " \
312
- 'assuming target is a Chef Automate instance',
312
+ "assuming target is a #{AUTOMATE_PRODUCT_NAME} instance"
313
313
  )
314
314
  true
315
- when '200'
315
+ when "200"
316
316
  # Chef Automate currently returns 401 for `/compliance/version` but some
317
317
  # versions of OpsWorks Chef Automate return 200 and a Chef Manage page
318
318
  # when unauthenticated requests are received.
319
- if response.body.include?('Are You Looking For the Chef Server?')
319
+ if response.body.include?("Are You Looking For the #{SERVER_PRODUCT_NAME}?")
320
320
  Inspec::Log.debug(
321
321
  "Received 200 from #{url}#{automate_endpoint} - " \
322
- 'assuming target is an OpsWorks Chef Automate instance',
322
+ "assuming target is an #{AUTOMATE_PRODUCT_NAME} instance"
323
323
  )
324
324
  true
325
325
  else
326
326
  Inspec::Log.debug(
327
327
  "Received 200 from #{url}#{automate_endpoint} " \
328
- 'but did not receive the Chef Manage page - ' \
329
- 'assuming target is not a Chef Automate instance',
328
+ "but did not receive the Chef Manage page - " \
329
+ "assuming target is not a #{AUTOMATE_PRODUCT_NAME} instance"
330
330
  )
331
331
  false
332
332
  end
@@ -334,7 +334,7 @@ module InspecPlugins
334
334
  Inspec::Log.debug(
335
335
  "Received unexpected status code #{response.code} " \
336
336
  "from #{url}#{automate_endpoint} - " \
337
- 'assuming target is not a Chef Automate instance',
337
+ "assuming target is not a #{AUTOMATE_PRODUCT_NAME} instance"
338
338
  )
339
339
  false
340
340
  end
@@ -342,14 +342,14 @@ module InspecPlugins
342
342
 
343
343
  def self.target_is_compliance_server?(url, insecure)
344
344
  # All versions of Chef Compliance return 200 for `/api/version`
345
- compliance_endpoint = '/api/version'
345
+ compliance_endpoint = "/api/version"
346
346
 
347
347
  response = InspecPlugins::Compliance::HTTP.get(url + compliance_endpoint, nil, insecure)
348
- return false unless response.code == '200'
348
+ return false unless response.code == "200"
349
349
 
350
350
  Inspec::Log.debug(
351
351
  "Received 200 from #{url}#{compliance_endpoint} - " \
352
- 'assuming target is a Compliance server',
352
+ "assuming target is a #{COMPLIANCE_PRODUCT_NAME} server"
353
353
  )
354
354
  true
355
355
  end