inspec 2.0.16 → 2.0.17

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 (480) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +101 -101
  3. data/CHANGELOG.md +2949 -2944
  4. data/Gemfile +55 -55
  5. data/LICENSE +14 -14
  6. data/MAINTAINERS.md +31 -31
  7. data/MAINTAINERS.toml +47 -47
  8. data/README.md +438 -438
  9. data/Rakefile +284 -284
  10. data/bin/inspec +12 -12
  11. data/docs/.gitignore +2 -2
  12. data/docs/README.md +40 -40
  13. data/docs/dsl_inspec.md +258 -258
  14. data/docs/dsl_resource.md +93 -93
  15. data/docs/glossary.md +99 -99
  16. data/docs/habitat.md +191 -191
  17. data/docs/inspec_and_friends.md +107 -107
  18. data/docs/matchers.md +165 -165
  19. data/docs/migration.md +293 -293
  20. data/docs/platforms.md +118 -118
  21. data/docs/plugin_kitchen_inspec.md +49 -49
  22. data/docs/profiles.md +370 -370
  23. data/docs/reporters.md +105 -105
  24. data/docs/resources/aide_conf.md.erb +75 -75
  25. data/docs/resources/apache.md.erb +67 -67
  26. data/docs/resources/apache_conf.md.erb +68 -68
  27. data/docs/resources/apt.md.erb +71 -71
  28. data/docs/resources/audit_policy.md.erb +47 -47
  29. data/docs/resources/auditd.md.erb +79 -79
  30. data/docs/resources/auditd_conf.md.erb +68 -68
  31. data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
  32. data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
  33. data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
  34. data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
  35. data/docs/resources/aws_ec2_instance.md.erb +106 -106
  36. data/docs/resources/aws_iam_access_key.md.erb +123 -123
  37. data/docs/resources/aws_iam_access_keys.md.erb +198 -198
  38. data/docs/resources/aws_iam_group.md.erb +46 -46
  39. data/docs/resources/aws_iam_groups.md.erb +43 -43
  40. data/docs/resources/aws_iam_password_policy.md.erb +76 -76
  41. data/docs/resources/aws_iam_policies.md.erb +82 -82
  42. data/docs/resources/aws_iam_policy.md.erb +146 -146
  43. data/docs/resources/aws_iam_role.md.erb +65 -65
  44. data/docs/resources/aws_iam_root_user.md.erb +58 -58
  45. data/docs/resources/aws_iam_user.md.erb +64 -64
  46. data/docs/resources/aws_iam_users.md.erb +89 -89
  47. data/docs/resources/aws_kms_keys.md.erb +84 -84
  48. data/docs/resources/aws_route_table.md.erb +47 -47
  49. data/docs/resources/aws_s3_bucket.md.erb +134 -134
  50. data/docs/resources/aws_security_group.md.erb +152 -152
  51. data/docs/resources/aws_security_groups.md.erb +92 -92
  52. data/docs/resources/aws_sns_topic.md.erb +62 -62
  53. data/docs/resources/aws_subnet.md.erb +133 -133
  54. data/docs/resources/aws_subnets.md.erb +126 -126
  55. data/docs/resources/aws_vpc.md.erb +120 -120
  56. data/docs/resources/aws_vpcs.md.erb +48 -48
  57. data/docs/resources/azure_generic_resource.md.erb +170 -139
  58. data/docs/resources/azure_resource_group.md.erb +284 -284
  59. data/docs/resources/azure_virtual_machine.md.erb +347 -314
  60. data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -182
  61. data/docs/resources/bash.md.erb +75 -75
  62. data/docs/resources/bond.md.erb +90 -90
  63. data/docs/resources/bridge.md.erb +57 -57
  64. data/docs/resources/bsd_service.md.erb +67 -67
  65. data/docs/resources/command.md.erb +138 -138
  66. data/docs/resources/cpan.md.erb +79 -79
  67. data/docs/resources/cran.md.erb +64 -64
  68. data/docs/resources/crontab.md.erb +88 -88
  69. data/docs/resources/csv.md.erb +54 -54
  70. data/docs/resources/dh_params.md.erb +217 -217
  71. data/docs/resources/directory.md.erb +30 -30
  72. data/docs/resources/docker.md.erb +164 -164
  73. data/docs/resources/docker_container.md.erb +104 -104
  74. data/docs/resources/docker_image.md.erb +94 -94
  75. data/docs/resources/docker_service.md.erb +114 -114
  76. data/docs/resources/elasticsearch.md.erb +242 -242
  77. data/docs/resources/etc_fstab.md.erb +125 -125
  78. data/docs/resources/etc_group.md.erb +75 -75
  79. data/docs/resources/etc_hosts.md.erb +78 -78
  80. data/docs/resources/etc_hosts_allow.md.erb +74 -74
  81. data/docs/resources/etc_hosts_deny.md.erb +74 -74
  82. data/docs/resources/file.md.erb +515 -515
  83. data/docs/resources/filesystem.md.erb +41 -41
  84. data/docs/resources/firewalld.md.erb +107 -107
  85. data/docs/resources/gem.md.erb +79 -79
  86. data/docs/resources/group.md.erb +61 -61
  87. data/docs/resources/grub_conf.md.erb +101 -101
  88. data/docs/resources/host.md.erb +78 -78
  89. data/docs/resources/http.md.erb +101 -101
  90. data/docs/resources/iis_app.md.erb +122 -122
  91. data/docs/resources/iis_site.md.erb +135 -135
  92. data/docs/resources/inetd_conf.md.erb +94 -94
  93. data/docs/resources/ini.md.erb +76 -76
  94. data/docs/resources/interface.md.erb +58 -58
  95. data/docs/resources/iptables.md.erb +64 -64
  96. data/docs/resources/json.md.erb +62 -62
  97. data/docs/resources/kernel_module.md.erb +107 -107
  98. data/docs/resources/kernel_parameter.md.erb +53 -53
  99. data/docs/resources/key_rsa.md.erb +85 -85
  100. data/docs/resources/launchd_service.md.erb +57 -57
  101. data/docs/resources/limits_conf.md.erb +75 -75
  102. data/docs/resources/login_def.md.erb +71 -71
  103. data/docs/resources/mount.md.erb +69 -69
  104. data/docs/resources/mssql_session.md.erb +60 -60
  105. data/docs/resources/mysql_conf.md.erb +99 -99
  106. data/docs/resources/mysql_session.md.erb +74 -74
  107. data/docs/resources/nginx.md.erb +79 -79
  108. data/docs/resources/nginx_conf.md.erb +128 -128
  109. data/docs/resources/npm.md.erb +60 -60
  110. data/docs/resources/ntp_conf.md.erb +60 -60
  111. data/docs/resources/oneget.md.erb +53 -53
  112. data/docs/resources/oracledb_session.md.erb +52 -52
  113. data/docs/resources/os.md.erb +141 -141
  114. data/docs/resources/os_env.md.erb +78 -78
  115. data/docs/resources/package.md.erb +120 -120
  116. data/docs/resources/packages.md.erb +67 -67
  117. data/docs/resources/parse_config.md.erb +103 -103
  118. data/docs/resources/parse_config_file.md.erb +138 -138
  119. data/docs/resources/passwd.md.erb +141 -141
  120. data/docs/resources/pip.md.erb +67 -67
  121. data/docs/resources/port.md.erb +137 -137
  122. data/docs/resources/postgres_conf.md.erb +79 -79
  123. data/docs/resources/postgres_hba_conf.md.erb +93 -93
  124. data/docs/resources/postgres_ident_conf.md.erb +76 -76
  125. data/docs/resources/postgres_session.md.erb +69 -69
  126. data/docs/resources/powershell.md.erb +102 -102
  127. data/docs/resources/processes.md.erb +109 -109
  128. data/docs/resources/rabbitmq_config.md.erb +41 -41
  129. data/docs/resources/registry_key.md.erb +158 -158
  130. data/docs/resources/runit_service.md.erb +57 -57
  131. data/docs/resources/security_policy.md.erb +47 -47
  132. data/docs/resources/service.md.erb +121 -121
  133. data/docs/resources/shadow.md.erb +144 -144
  134. data/docs/resources/ssh_config.md.erb +80 -80
  135. data/docs/resources/sshd_config.md.erb +83 -83
  136. data/docs/resources/ssl.md.erb +119 -119
  137. data/docs/resources/sys_info.md.erb +42 -42
  138. data/docs/resources/systemd_service.md.erb +57 -57
  139. data/docs/resources/sysv_service.md.erb +57 -57
  140. data/docs/resources/upstart_service.md.erb +57 -57
  141. data/docs/resources/user.md.erb +140 -140
  142. data/docs/resources/users.md.erb +127 -127
  143. data/docs/resources/vbscript.md.erb +55 -55
  144. data/docs/resources/virtualization.md.erb +57 -57
  145. data/docs/resources/windows_feature.md.erb +47 -47
  146. data/docs/resources/windows_hotfix.md.erb +53 -53
  147. data/docs/resources/windows_task.md.erb +95 -95
  148. data/docs/resources/wmi.md.erb +81 -81
  149. data/docs/resources/x509_certificate.md.erb +151 -151
  150. data/docs/resources/xinetd_conf.md.erb +156 -156
  151. data/docs/resources/xml.md.erb +85 -85
  152. data/docs/resources/yaml.md.erb +69 -69
  153. data/docs/resources/yum.md.erb +98 -98
  154. data/docs/resources/zfs_dataset.md.erb +53 -53
  155. data/docs/resources/zfs_pool.md.erb +47 -47
  156. data/docs/ruby_usage.md +203 -203
  157. data/docs/shared/matcher_be.md.erb +1 -1
  158. data/docs/shared/matcher_cmp.md.erb +43 -43
  159. data/docs/shared/matcher_eq.md.erb +3 -3
  160. data/docs/shared/matcher_include.md.erb +1 -1
  161. data/docs/shared/matcher_match.md.erb +1 -1
  162. data/docs/shell.md +172 -172
  163. data/examples/README.md +8 -8
  164. data/examples/inheritance/README.md +65 -65
  165. data/examples/inheritance/controls/example.rb +14 -14
  166. data/examples/inheritance/inspec.yml +15 -15
  167. data/examples/kitchen-ansible/.kitchen.yml +25 -25
  168. data/examples/kitchen-ansible/Gemfile +19 -19
  169. data/examples/kitchen-ansible/README.md +53 -53
  170. data/examples/kitchen-ansible/files/nginx.repo +6 -6
  171. data/examples/kitchen-ansible/tasks/main.yml +16 -16
  172. data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
  173. data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
  174. data/examples/kitchen-chef/.kitchen.yml +20 -20
  175. data/examples/kitchen-chef/Berksfile +3 -3
  176. data/examples/kitchen-chef/Gemfile +19 -19
  177. data/examples/kitchen-chef/README.md +27 -27
  178. data/examples/kitchen-chef/metadata.rb +7 -7
  179. data/examples/kitchen-chef/recipes/default.rb +6 -6
  180. data/examples/kitchen-chef/recipes/nginx.rb +30 -30
  181. data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
  182. data/examples/kitchen-puppet/.kitchen.yml +22 -22
  183. data/examples/kitchen-puppet/Gemfile +20 -20
  184. data/examples/kitchen-puppet/Puppetfile +25 -25
  185. data/examples/kitchen-puppet/README.md +53 -53
  186. data/examples/kitchen-puppet/manifests/site.pp +33 -33
  187. data/examples/kitchen-puppet/metadata.json +11 -11
  188. data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
  189. data/examples/meta-profile/README.md +37 -37
  190. data/examples/meta-profile/controls/example.rb +13 -13
  191. data/examples/meta-profile/inspec.yml +13 -13
  192. data/examples/profile-attribute.yml +2 -2
  193. data/examples/profile-attribute/README.md +14 -14
  194. data/examples/profile-attribute/controls/example.rb +11 -11
  195. data/examples/profile-attribute/inspec.yml +8 -8
  196. data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
  197. data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
  198. data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
  199. data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
  200. data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
  201. data/examples/profile-aws/inspec.yml +11 -11
  202. data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
  203. data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
  204. data/examples/profile-azure/inspec.yml +11 -11
  205. data/examples/profile-sensitive/README.md +29 -29
  206. data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
  207. data/examples/profile-sensitive/controls/sensitive.rb +9 -9
  208. data/examples/profile-sensitive/inspec.yml +8 -8
  209. data/examples/profile/README.md +48 -48
  210. data/examples/profile/controls/example.rb +23 -23
  211. data/examples/profile/controls/gordon.rb +36 -36
  212. data/examples/profile/controls/meta.rb +34 -34
  213. data/examples/profile/inspec.yml +10 -10
  214. data/examples/profile/libraries/gordon_config.rb +53 -53
  215. data/inspec.gemspec +47 -47
  216. data/lib/bundles/README.md +3 -3
  217. data/lib/bundles/inspec-artifact.rb +7 -7
  218. data/lib/bundles/inspec-artifact/README.md +1 -1
  219. data/lib/bundles/inspec-artifact/cli.rb +277 -277
  220. data/lib/bundles/inspec-compliance.rb +16 -16
  221. data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
  222. data/lib/bundles/inspec-compliance/README.md +185 -185
  223. data/lib/bundles/inspec-compliance/api.rb +316 -316
  224. data/lib/bundles/inspec-compliance/api/login.rb +152 -152
  225. data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
  226. data/lib/bundles/inspec-compliance/cli.rb +254 -254
  227. data/lib/bundles/inspec-compliance/configuration.rb +103 -103
  228. data/lib/bundles/inspec-compliance/http.rb +86 -86
  229. data/lib/bundles/inspec-compliance/support.rb +36 -36
  230. data/lib/bundles/inspec-compliance/target.rb +98 -98
  231. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
  232. data/lib/bundles/inspec-habitat.rb +12 -12
  233. data/lib/bundles/inspec-habitat/cli.rb +36 -36
  234. data/lib/bundles/inspec-habitat/log.rb +10 -10
  235. data/lib/bundles/inspec-habitat/profile.rb +390 -390
  236. data/lib/bundles/inspec-init.rb +8 -8
  237. data/lib/bundles/inspec-init/README.md +31 -31
  238. data/lib/bundles/inspec-init/cli.rb +97 -97
  239. data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
  240. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
  241. data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
  242. data/lib/bundles/inspec-supermarket.rb +13 -13
  243. data/lib/bundles/inspec-supermarket/README.md +45 -45
  244. data/lib/bundles/inspec-supermarket/api.rb +84 -84
  245. data/lib/bundles/inspec-supermarket/cli.rb +73 -73
  246. data/lib/bundles/inspec-supermarket/target.rb +34 -34
  247. data/lib/fetchers/git.rb +163 -163
  248. data/lib/fetchers/local.rb +74 -74
  249. data/lib/fetchers/mock.rb +35 -35
  250. data/lib/fetchers/url.rb +204 -204
  251. data/lib/inspec.rb +24 -24
  252. data/lib/inspec/archive/tar.rb +29 -29
  253. data/lib/inspec/archive/zip.rb +19 -19
  254. data/lib/inspec/backend.rb +92 -92
  255. data/lib/inspec/base_cli.rb +350 -333
  256. data/lib/inspec/cached_fetcher.rb +66 -66
  257. data/lib/inspec/cli.rb +292 -302
  258. data/lib/inspec/completions/bash.sh.erb +45 -45
  259. data/lib/inspec/completions/fish.sh.erb +34 -34
  260. data/lib/inspec/completions/zsh.sh.erb +61 -61
  261. data/lib/inspec/control_eval_context.rb +179 -179
  262. data/lib/inspec/dependencies/cache.rb +72 -72
  263. data/lib/inspec/dependencies/dependency_set.rb +92 -92
  264. data/lib/inspec/dependencies/lockfile.rb +115 -115
  265. data/lib/inspec/dependencies/requirement.rb +123 -123
  266. data/lib/inspec/dependencies/resolver.rb +86 -86
  267. data/lib/inspec/describe.rb +27 -27
  268. data/lib/inspec/dsl.rb +66 -66
  269. data/lib/inspec/dsl_shared.rb +33 -33
  270. data/lib/inspec/env_printer.rb +157 -157
  271. data/lib/inspec/errors.rb +13 -13
  272. data/lib/inspec/exceptions.rb +12 -12
  273. data/lib/inspec/expect.rb +45 -45
  274. data/lib/inspec/fetcher.rb +45 -45
  275. data/lib/inspec/file_provider.rb +275 -275
  276. data/lib/inspec/formatters.rb +3 -3
  277. data/lib/inspec/formatters/base.rb +250 -250
  278. data/lib/inspec/formatters/json_rspec.rb +20 -20
  279. data/lib/inspec/formatters/show_progress.rb +12 -12
  280. data/lib/inspec/library_eval_context.rb +58 -58
  281. data/lib/inspec/log.rb +11 -11
  282. data/lib/inspec/metadata.rb +247 -247
  283. data/lib/inspec/method_source.rb +24 -24
  284. data/lib/inspec/objects.rb +14 -14
  285. data/lib/inspec/objects/attribute.rb +65 -65
  286. data/lib/inspec/objects/control.rb +61 -61
  287. data/lib/inspec/objects/describe.rb +92 -92
  288. data/lib/inspec/objects/each_loop.rb +36 -36
  289. data/lib/inspec/objects/list.rb +15 -15
  290. data/lib/inspec/objects/or_test.rb +40 -40
  291. data/lib/inspec/objects/ruby_helper.rb +15 -15
  292. data/lib/inspec/objects/tag.rb +27 -27
  293. data/lib/inspec/objects/test.rb +87 -87
  294. data/lib/inspec/objects/value.rb +27 -27
  295. data/lib/inspec/plugins.rb +60 -60
  296. data/lib/inspec/plugins/cli.rb +24 -24
  297. data/lib/inspec/plugins/fetcher.rb +86 -86
  298. data/lib/inspec/plugins/resource.rb +133 -133
  299. data/lib/inspec/plugins/secret.rb +15 -15
  300. data/lib/inspec/plugins/source_reader.rb +40 -40
  301. data/lib/inspec/polyfill.rb +12 -12
  302. data/lib/inspec/profile.rb +510 -510
  303. data/lib/inspec/profile_context.rb +207 -207
  304. data/lib/inspec/profile_vendor.rb +66 -66
  305. data/lib/inspec/reporters.rb +50 -50
  306. data/lib/inspec/reporters/base.rb +24 -24
  307. data/lib/inspec/reporters/cli.rb +356 -356
  308. data/lib/inspec/reporters/json.rb +116 -116
  309. data/lib/inspec/reporters/json_min.rb +48 -48
  310. data/lib/inspec/reporters/junit.rb +77 -77
  311. data/lib/inspec/require_loader.rb +33 -33
  312. data/lib/inspec/resource.rb +186 -186
  313. data/lib/inspec/rule.rb +266 -266
  314. data/lib/inspec/runner.rb +344 -344
  315. data/lib/inspec/runner_mock.rb +41 -41
  316. data/lib/inspec/runner_rspec.rb +174 -174
  317. data/lib/inspec/runtime_profile.rb +26 -26
  318. data/lib/inspec/schema.rb +213 -213
  319. data/lib/inspec/secrets.rb +19 -19
  320. data/lib/inspec/secrets/yaml.rb +30 -30
  321. data/lib/inspec/shell.rb +220 -223
  322. data/lib/inspec/shell_detector.rb +90 -90
  323. data/lib/inspec/source_reader.rb +29 -29
  324. data/lib/inspec/version.rb +8 -8
  325. data/lib/matchers/matchers.rb +339 -339
  326. data/lib/resource_support/aws.rb +40 -40
  327. data/lib/resource_support/aws/aws_backend_base.rb +12 -12
  328. data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
  329. data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
  330. data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
  331. data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
  332. data/lib/resources/aide_conf.rb +160 -160
  333. data/lib/resources/apache.rb +48 -48
  334. data/lib/resources/apache_conf.rb +156 -156
  335. data/lib/resources/apt.rb +149 -149
  336. data/lib/resources/audit_policy.rb +63 -63
  337. data/lib/resources/auditd.rb +231 -231
  338. data/lib/resources/auditd_conf.rb +55 -55
  339. data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
  340. data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
  341. data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
  342. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
  343. data/lib/resources/aws/aws_ec2_instance.rb +157 -157
  344. data/lib/resources/aws/aws_iam_access_key.rb +106 -106
  345. data/lib/resources/aws/aws_iam_access_keys.rb +144 -144
  346. data/lib/resources/aws/aws_iam_group.rb +56 -56
  347. data/lib/resources/aws/aws_iam_groups.rb +45 -45
  348. data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
  349. data/lib/resources/aws/aws_iam_policies.rb +46 -46
  350. data/lib/resources/aws/aws_iam_policy.rb +119 -119
  351. data/lib/resources/aws/aws_iam_role.rb +51 -51
  352. data/lib/resources/aws/aws_iam_root_user.rb +60 -60
  353. data/lib/resources/aws/aws_iam_user.rb +111 -111
  354. data/lib/resources/aws/aws_iam_users.rb +96 -96
  355. data/lib/resources/aws/aws_kms_keys.rb +46 -46
  356. data/lib/resources/aws/aws_route_table.rb +61 -61
  357. data/lib/resources/aws/aws_s3_bucket.rb +115 -115
  358. data/lib/resources/aws/aws_security_group.rb +93 -93
  359. data/lib/resources/aws/aws_security_groups.rb +68 -68
  360. data/lib/resources/aws/aws_sns_topic.rb +53 -53
  361. data/lib/resources/aws/aws_subnet.rb +88 -88
  362. data/lib/resources/aws/aws_subnets.rb +53 -53
  363. data/lib/resources/aws/aws_vpc.rb +69 -69
  364. data/lib/resources/aws/aws_vpcs.rb +45 -45
  365. data/lib/resources/azure/azure_backend.rb +377 -377
  366. data/lib/resources/azure/azure_generic_resource.rb +59 -59
  367. data/lib/resources/azure/azure_resource_group.rb +152 -152
  368. data/lib/resources/azure/azure_virtual_machine.rb +264 -264
  369. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +136 -136
  370. data/lib/resources/bash.rb +35 -35
  371. data/lib/resources/bond.rb +68 -68
  372. data/lib/resources/bridge.rb +122 -122
  373. data/lib/resources/command.rb +69 -69
  374. data/lib/resources/cpan.rb +58 -58
  375. data/lib/resources/cran.rb +64 -64
  376. data/lib/resources/crontab.rb +170 -170
  377. data/lib/resources/csv.rb +60 -60
  378. data/lib/resources/dh_params.rb +82 -82
  379. data/lib/resources/directory.rb +25 -25
  380. data/lib/resources/docker.rb +236 -236
  381. data/lib/resources/docker_container.rb +89 -89
  382. data/lib/resources/docker_image.rb +83 -83
  383. data/lib/resources/docker_object.rb +57 -57
  384. data/lib/resources/docker_service.rb +90 -90
  385. data/lib/resources/elasticsearch.rb +169 -169
  386. data/lib/resources/etc_fstab.rb +102 -102
  387. data/lib/resources/etc_group.rb +156 -156
  388. data/lib/resources/etc_hosts.rb +81 -81
  389. data/lib/resources/etc_hosts_allow_deny.rb +123 -123
  390. data/lib/resources/file.rb +298 -298
  391. data/lib/resources/filesystem.rb +31 -31
  392. data/lib/resources/firewalld.rb +144 -144
  393. data/lib/resources/gem.rb +70 -70
  394. data/lib/resources/groups.rb +215 -215
  395. data/lib/resources/grub_conf.rb +237 -237
  396. data/lib/resources/host.rb +300 -300
  397. data/lib/resources/http.rb +250 -250
  398. data/lib/resources/iis_app.rb +104 -104
  399. data/lib/resources/iis_site.rb +148 -148
  400. data/lib/resources/inetd_conf.rb +62 -62
  401. data/lib/resources/ini.rb +29 -29
  402. data/lib/resources/interface.rb +129 -129
  403. data/lib/resources/iptables.rb +69 -69
  404. data/lib/resources/json.rb +117 -117
  405. data/lib/resources/kernel_module.rb +107 -107
  406. data/lib/resources/kernel_parameter.rb +58 -58
  407. data/lib/resources/key_rsa.rb +67 -67
  408. data/lib/resources/limits_conf.rb +55 -55
  409. data/lib/resources/login_def.rb +66 -66
  410. data/lib/resources/mount.rb +88 -88
  411. data/lib/resources/mssql_session.rb +101 -101
  412. data/lib/resources/mysql.rb +81 -81
  413. data/lib/resources/mysql_conf.rb +134 -134
  414. data/lib/resources/mysql_session.rb +71 -71
  415. data/lib/resources/nginx.rb +96 -96
  416. data/lib/resources/nginx_conf.rb +227 -227
  417. data/lib/resources/npm.rb +48 -48
  418. data/lib/resources/ntp_conf.rb +58 -58
  419. data/lib/resources/oneget.rb +71 -71
  420. data/lib/resources/oracledb_session.rb +139 -139
  421. data/lib/resources/os.rb +36 -36
  422. data/lib/resources/os_env.rb +76 -76
  423. data/lib/resources/package.rb +363 -363
  424. data/lib/resources/packages.rb +111 -111
  425. data/lib/resources/parse_config.rb +116 -116
  426. data/lib/resources/passwd.rb +74 -74
  427. data/lib/resources/pip.rb +89 -89
  428. data/lib/resources/platform.rb +109 -109
  429. data/lib/resources/port.rb +771 -771
  430. data/lib/resources/postgres.rb +130 -130
  431. data/lib/resources/postgres_conf.rb +121 -121
  432. data/lib/resources/postgres_hba_conf.rb +100 -100
  433. data/lib/resources/postgres_ident_conf.rb +78 -78
  434. data/lib/resources/postgres_session.rb +71 -71
  435. data/lib/resources/powershell.rb +57 -57
  436. data/lib/resources/processes.rb +204 -204
  437. data/lib/resources/rabbitmq_conf.rb +52 -52
  438. data/lib/resources/registry_key.rb +296 -296
  439. data/lib/resources/security_policy.rb +180 -180
  440. data/lib/resources/service.rb +789 -789
  441. data/lib/resources/shadow.rb +140 -140
  442. data/lib/resources/ssh_conf.rb +102 -102
  443. data/lib/resources/ssl.rb +99 -99
  444. data/lib/resources/sys_info.rb +28 -28
  445. data/lib/resources/toml.rb +32 -32
  446. data/lib/resources/users.rb +654 -654
  447. data/lib/resources/vbscript.rb +69 -69
  448. data/lib/resources/virtualization.rb +251 -251
  449. data/lib/resources/windows_feature.rb +84 -84
  450. data/lib/resources/windows_hotfix.rb +35 -35
  451. data/lib/resources/windows_task.rb +105 -105
  452. data/lib/resources/wmi.rb +113 -113
  453. data/lib/resources/x509_certificate.rb +143 -143
  454. data/lib/resources/xinetd.rb +111 -111
  455. data/lib/resources/xml.rb +46 -46
  456. data/lib/resources/yaml.rb +47 -47
  457. data/lib/resources/yum.rb +180 -180
  458. data/lib/resources/zfs_dataset.rb +60 -60
  459. data/lib/resources/zfs_pool.rb +49 -49
  460. data/lib/source_readers/flat.rb +39 -39
  461. data/lib/source_readers/inspec.rb +75 -75
  462. data/lib/utils/command_wrapper.rb +27 -27
  463. data/lib/utils/convert.rb +12 -12
  464. data/lib/utils/database_helpers.rb +77 -77
  465. data/lib/utils/erlang_parser.rb +192 -192
  466. data/lib/utils/filter.rb +272 -272
  467. data/lib/utils/filter_array.rb +27 -27
  468. data/lib/utils/find_files.rb +44 -44
  469. data/lib/utils/hash.rb +41 -41
  470. data/lib/utils/json_log.rb +18 -18
  471. data/lib/utils/latest_version.rb +22 -22
  472. data/lib/utils/modulator.rb +12 -12
  473. data/lib/utils/nginx_parser.rb +85 -85
  474. data/lib/utils/object_traversal.rb +49 -49
  475. data/lib/utils/parser.rb +274 -274
  476. data/lib/utils/plugin_registry.rb +93 -93
  477. data/lib/utils/simpleconfig.rb +120 -120
  478. data/lib/utils/spdx.rb +13 -13
  479. data/lib/utils/spdx.txt +343 -343
  480. metadata +1 -1
@@ -1,250 +1,250 @@
1
- # encoding: utf-8
2
- # copyright: 2017, Criteo
3
- # copyright: 2017, Chef Software Inc
4
- # license: Apache v2
5
-
6
- require 'faraday'
7
- require 'hashie'
8
-
9
- module Inspec::Resources
10
- class Http < Inspec.resource(1)
11
- name 'http'
12
- supports platform: 'unix'
13
- desc 'Use the http InSpec audit resource to test http call.'
14
- example "
15
- describe http('http://localhost:8080/ping', auth: {user: 'user', pass: 'test'}, params: {format: 'html'}) do
16
- its('status') { should cmp 200 }
17
- its('body') { should cmp 'pong' }
18
- its('headers.Content-Type') { should cmp 'text/html' }
19
- end
20
-
21
- describe http('http://example.com/ping').headers do
22
- its('Content-Length') { should cmp 258 }
23
- its('Content-Type') { should cmp 'text/html; charset=UTF-8' }
24
- end
25
- "
26
-
27
- def initialize(url, opts = {})
28
- @url = url
29
- @opts = opts
30
-
31
- # Prior to InSpec 2.0 the HTTP test had to be instructed to run on the
32
- # remote target machine. This warning will be removed after a few months
33
- # to give users an opportunity to remove the unused option from their
34
- # profiles.
35
- if opts.key?(:enable_remote_worker) && !inspec.local_transport?
36
- warn 'Ignoring `enable_remote_worker` option, the `http` resource ',
37
- 'remote worker is enabled by default for remote targets and ',
38
- 'cannot be disabled'
39
- end
40
-
41
- # Run locally if InSpec is ran locally and remotely if ran remotely
42
- if inspec.local_transport?
43
- @worker = Worker::Local.new(http_method, url, opts)
44
- else
45
- @worker = Worker::Remote.new(inspec, http_method, url, opts)
46
- end
47
- end
48
-
49
- def status
50
- @worker.status
51
- end
52
-
53
- def headers
54
- @headers ||= Inspec::Resources::Http::Headers.create(@worker.response_headers)
55
- end
56
-
57
- def body
58
- @worker.body
59
- end
60
-
61
- def http_method
62
- @opts.fetch(:method, 'GET')
63
- end
64
-
65
- def to_s
66
- "http #{http_method} on #{@url}"
67
- end
68
-
69
- class Worker
70
- class Base
71
- attr_reader :http_method, :opts, :url
72
-
73
- def initialize(http_method, url, opts)
74
- @http_method = http_method
75
- @url = url
76
- @opts = opts
77
- end
78
-
79
- private
80
-
81
- def params
82
- opts.fetch(:params, nil)
83
- end
84
-
85
- def username
86
- opts.fetch(:auth, {})[:user]
87
- end
88
-
89
- def password
90
- opts.fetch(:auth, {})[:pass]
91
- end
92
-
93
- def request_headers
94
- opts.fetch(:headers, {})
95
- end
96
-
97
- def request_body
98
- opts[:data]
99
- end
100
-
101
- def open_timeout
102
- opts.fetch(:open_timeout, 60)
103
- end
104
-
105
- def read_timeout
106
- opts.fetch(:read_timeout, 60)
107
- end
108
-
109
- def ssl_verify?
110
- opts.fetch(:ssl_verify, true)
111
- end
112
- end
113
-
114
- class Local < Base
115
- def status
116
- response.status
117
- end
118
-
119
- def body
120
- response.body
121
- end
122
-
123
- def response_headers
124
- response.headers.to_h
125
- end
126
-
127
- private
128
-
129
- def response
130
- return @response if @response
131
- conn = Faraday.new url: url, headers: request_headers, params: params, ssl: { verify: ssl_verify? }
132
-
133
- # set basic authentication
134
- conn.basic_auth username, password unless username.nil? || password.nil?
135
-
136
- # set default timeout
137
- conn.options.timeout = read_timeout # open/read timeout in seconds
138
- conn.options.open_timeout = open_timeout # connection open timeout in seconds
139
-
140
- @response = conn.send(http_method.downcase) do |req|
141
- req.body = request_body
142
- end
143
- end
144
- end
145
-
146
- class Remote < Base
147
- attr_reader :inspec
148
-
149
- def initialize(inspec, http_method, url, opts)
150
- unless inspec.command('curl').exist?
151
- raise Inspec::Exceptions::ResourceSkipped,
152
- 'curl is not available on the target machine'
153
- end
154
-
155
- @inspec = inspec
156
- super(http_method, url, opts)
157
- end
158
-
159
- def status
160
- run_curl
161
- @status
162
- end
163
-
164
- def body
165
- run_curl
166
- @body&.strip
167
- end
168
-
169
- def response_headers
170
- run_curl
171
- @response_headers
172
- end
173
-
174
- private
175
-
176
- def run_curl
177
- return if @ran_curl
178
-
179
- response = inspec.command(curl_command).stdout
180
- @ran_curl = true
181
- return if response.nil?
182
-
183
- # strip any carriage returns to normalize output
184
- response.delete!("\r")
185
-
186
- # split the prelude (status line and headers) and the body
187
- prelude, @body = response.split("\n\n", 2)
188
- prelude = prelude.lines
189
-
190
- # grab the status off of the first line of the prelude
191
- status_line = prelude.shift
192
- @status = status_line.split(' ', 3)[1].to_i
193
-
194
- # parse the rest of the prelude which will be all the HTTP headers
195
- @response_headers = {}
196
- prelude.each do |line|
197
- line.strip!
198
- key, value = line.split(':', 2)
199
- @response_headers[key] = value.strip
200
- end
201
- end
202
-
203
- def curl_command # rubocop:disable Metrics/AbcSize
204
- cmd = ['curl -i']
205
-
206
- # Use curl's --head option when the method requested is HEAD. Otherwise,
207
- # the user may experience a timeout when curl does not properly close
208
- # the connection after the response is received.
209
- if http_method.casecmp('HEAD') == 0
210
- cmd << '--head'
211
- else
212
- cmd << "-X #{http_method}"
213
- end
214
-
215
- cmd << "--connect-timeout #{open_timeout}"
216
- cmd << "--max-time #{open_timeout+read_timeout}"
217
- cmd << "--user \'#{username}:#{password}\'" unless username.nil? || password.nil?
218
- cmd << '--insecure' unless ssl_verify?
219
- cmd << "--data #{Shellwords.shellescape(request_body)}" unless request_body.nil?
220
-
221
- request_headers.each do |k, v|
222
- cmd << "-H '#{k}: #{v}'"
223
- end
224
-
225
- if params.nil?
226
- cmd << "'#{url}'"
227
- else
228
- cmd << "'#{url}?#{params.map { |e| e.join('=') }.join('&')}'"
229
- end
230
-
231
- cmd.join(' ')
232
- end
233
- end
234
- end
235
-
236
- class Headers < Hash
237
- def self.create(header_data)
238
- header_data.each_with_object(new) { |(k, v), memo| memo[k.to_s.downcase] = v }
239
- end
240
-
241
- def [](requested_key)
242
- fetch(requested_key.downcase, nil)
243
- end
244
-
245
- def method_missing(requested_key)
246
- fetch(requested_key.to_s.downcase, nil)
247
- end
248
- end
249
- end
250
- end
1
+ # encoding: utf-8
2
+ # copyright: 2017, Criteo
3
+ # copyright: 2017, Chef Software Inc
4
+ # license: Apache v2
5
+
6
+ require 'faraday'
7
+ require 'hashie'
8
+
9
+ module Inspec::Resources
10
+ class Http < Inspec.resource(1)
11
+ name 'http'
12
+ supports platform: 'unix'
13
+ desc 'Use the http InSpec audit resource to test http call.'
14
+ example "
15
+ describe http('http://localhost:8080/ping', auth: {user: 'user', pass: 'test'}, params: {format: 'html'}) do
16
+ its('status') { should cmp 200 }
17
+ its('body') { should cmp 'pong' }
18
+ its('headers.Content-Type') { should cmp 'text/html' }
19
+ end
20
+
21
+ describe http('http://example.com/ping').headers do
22
+ its('Content-Length') { should cmp 258 }
23
+ its('Content-Type') { should cmp 'text/html; charset=UTF-8' }
24
+ end
25
+ "
26
+
27
+ def initialize(url, opts = {})
28
+ @url = url
29
+ @opts = opts
30
+
31
+ # Prior to InSpec 2.0 the HTTP test had to be instructed to run on the
32
+ # remote target machine. This warning will be removed after a few months
33
+ # to give users an opportunity to remove the unused option from their
34
+ # profiles.
35
+ if opts.key?(:enable_remote_worker) && !inspec.local_transport?
36
+ warn 'Ignoring `enable_remote_worker` option, the `http` resource ',
37
+ 'remote worker is enabled by default for remote targets and ',
38
+ 'cannot be disabled'
39
+ end
40
+
41
+ # Run locally if InSpec is ran locally and remotely if ran remotely
42
+ if inspec.local_transport?
43
+ @worker = Worker::Local.new(http_method, url, opts)
44
+ else
45
+ @worker = Worker::Remote.new(inspec, http_method, url, opts)
46
+ end
47
+ end
48
+
49
+ def status
50
+ @worker.status
51
+ end
52
+
53
+ def headers
54
+ @headers ||= Inspec::Resources::Http::Headers.create(@worker.response_headers)
55
+ end
56
+
57
+ def body
58
+ @worker.body
59
+ end
60
+
61
+ def http_method
62
+ @opts.fetch(:method, 'GET')
63
+ end
64
+
65
+ def to_s
66
+ "http #{http_method} on #{@url}"
67
+ end
68
+
69
+ class Worker
70
+ class Base
71
+ attr_reader :http_method, :opts, :url
72
+
73
+ def initialize(http_method, url, opts)
74
+ @http_method = http_method
75
+ @url = url
76
+ @opts = opts
77
+ end
78
+
79
+ private
80
+
81
+ def params
82
+ opts.fetch(:params, nil)
83
+ end
84
+
85
+ def username
86
+ opts.fetch(:auth, {})[:user]
87
+ end
88
+
89
+ def password
90
+ opts.fetch(:auth, {})[:pass]
91
+ end
92
+
93
+ def request_headers
94
+ opts.fetch(:headers, {})
95
+ end
96
+
97
+ def request_body
98
+ opts[:data]
99
+ end
100
+
101
+ def open_timeout
102
+ opts.fetch(:open_timeout, 60)
103
+ end
104
+
105
+ def read_timeout
106
+ opts.fetch(:read_timeout, 60)
107
+ end
108
+
109
+ def ssl_verify?
110
+ opts.fetch(:ssl_verify, true)
111
+ end
112
+ end
113
+
114
+ class Local < Base
115
+ def status
116
+ response.status
117
+ end
118
+
119
+ def body
120
+ response.body
121
+ end
122
+
123
+ def response_headers
124
+ response.headers.to_h
125
+ end
126
+
127
+ private
128
+
129
+ def response
130
+ return @response if @response
131
+ conn = Faraday.new url: url, headers: request_headers, params: params, ssl: { verify: ssl_verify? }
132
+
133
+ # set basic authentication
134
+ conn.basic_auth username, password unless username.nil? || password.nil?
135
+
136
+ # set default timeout
137
+ conn.options.timeout = read_timeout # open/read timeout in seconds
138
+ conn.options.open_timeout = open_timeout # connection open timeout in seconds
139
+
140
+ @response = conn.send(http_method.downcase) do |req|
141
+ req.body = request_body
142
+ end
143
+ end
144
+ end
145
+
146
+ class Remote < Base
147
+ attr_reader :inspec
148
+
149
+ def initialize(inspec, http_method, url, opts)
150
+ unless inspec.command('curl').exist?
151
+ raise Inspec::Exceptions::ResourceSkipped,
152
+ 'curl is not available on the target machine'
153
+ end
154
+
155
+ @inspec = inspec
156
+ super(http_method, url, opts)
157
+ end
158
+
159
+ def status
160
+ run_curl
161
+ @status
162
+ end
163
+
164
+ def body
165
+ run_curl
166
+ @body&.strip
167
+ end
168
+
169
+ def response_headers
170
+ run_curl
171
+ @response_headers
172
+ end
173
+
174
+ private
175
+
176
+ def run_curl
177
+ return if @ran_curl
178
+
179
+ response = inspec.command(curl_command).stdout
180
+ @ran_curl = true
181
+ return if response.nil?
182
+
183
+ # strip any carriage returns to normalize output
184
+ response.delete!("\r")
185
+
186
+ # split the prelude (status line and headers) and the body
187
+ prelude, @body = response.split("\n\n", 2)
188
+ prelude = prelude.lines
189
+
190
+ # grab the status off of the first line of the prelude
191
+ status_line = prelude.shift
192
+ @status = status_line.split(' ', 3)[1].to_i
193
+
194
+ # parse the rest of the prelude which will be all the HTTP headers
195
+ @response_headers = {}
196
+ prelude.each do |line|
197
+ line.strip!
198
+ key, value = line.split(':', 2)
199
+ @response_headers[key] = value.strip
200
+ end
201
+ end
202
+
203
+ def curl_command # rubocop:disable Metrics/AbcSize
204
+ cmd = ['curl -i']
205
+
206
+ # Use curl's --head option when the method requested is HEAD. Otherwise,
207
+ # the user may experience a timeout when curl does not properly close
208
+ # the connection after the response is received.
209
+ if http_method.casecmp('HEAD') == 0
210
+ cmd << '--head'
211
+ else
212
+ cmd << "-X #{http_method}"
213
+ end
214
+
215
+ cmd << "--connect-timeout #{open_timeout}"
216
+ cmd << "--max-time #{open_timeout+read_timeout}"
217
+ cmd << "--user \'#{username}:#{password}\'" unless username.nil? || password.nil?
218
+ cmd << '--insecure' unless ssl_verify?
219
+ cmd << "--data #{Shellwords.shellescape(request_body)}" unless request_body.nil?
220
+
221
+ request_headers.each do |k, v|
222
+ cmd << "-H '#{k}: #{v}'"
223
+ end
224
+
225
+ if params.nil?
226
+ cmd << "'#{url}'"
227
+ else
228
+ cmd << "'#{url}?#{params.map { |e| e.join('=') }.join('&')}'"
229
+ end
230
+
231
+ cmd.join(' ')
232
+ end
233
+ end
234
+ end
235
+
236
+ class Headers < Hash
237
+ def self.create(header_data)
238
+ header_data.each_with_object(new) { |(k, v), memo| memo[k.to_s.downcase] = v }
239
+ end
240
+
241
+ def [](requested_key)
242
+ fetch(requested_key.downcase, nil)
243
+ end
244
+
245
+ def method_missing(requested_key)
246
+ fetch(requested_key.to_s.downcase, nil)
247
+ end
248
+ end
249
+ end
250
+ end