inspec-core 2.1.67

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 (412) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3136 -0
  3. data/Gemfile +56 -0
  4. data/LICENSE +14 -0
  5. data/MAINTAINERS.md +33 -0
  6. data/MAINTAINERS.toml +52 -0
  7. data/README.md +453 -0
  8. data/bin/inspec +12 -0
  9. data/docs/.gitignore +2 -0
  10. data/docs/README.md +40 -0
  11. data/docs/dev/control-eval.md +62 -0
  12. data/docs/dsl_inspec.md +258 -0
  13. data/docs/dsl_resource.md +100 -0
  14. data/docs/glossary.md +99 -0
  15. data/docs/habitat.md +192 -0
  16. data/docs/inspec_and_friends.md +114 -0
  17. data/docs/matchers.md +169 -0
  18. data/docs/migration.md +293 -0
  19. data/docs/platforms.md +119 -0
  20. data/docs/plugin_kitchen_inspec.md +50 -0
  21. data/docs/profiles.md +378 -0
  22. data/docs/reporters.md +105 -0
  23. data/docs/resources/aide_conf.md.erb +76 -0
  24. data/docs/resources/apache.md.erb +67 -0
  25. data/docs/resources/apache_conf.md.erb +68 -0
  26. data/docs/resources/apt.md.erb +71 -0
  27. data/docs/resources/audit_policy.md.erb +47 -0
  28. data/docs/resources/auditd.md.erb +79 -0
  29. data/docs/resources/auditd_conf.md.erb +68 -0
  30. data/docs/resources/bash.md.erb +75 -0
  31. data/docs/resources/bond.md.erb +90 -0
  32. data/docs/resources/bridge.md.erb +57 -0
  33. data/docs/resources/bsd_service.md.erb +67 -0
  34. data/docs/resources/chocolatey_package.md.erb +58 -0
  35. data/docs/resources/command.md.erb +138 -0
  36. data/docs/resources/cpan.md.erb +79 -0
  37. data/docs/resources/cran.md.erb +64 -0
  38. data/docs/resources/crontab.md.erb +89 -0
  39. data/docs/resources/csv.md.erb +54 -0
  40. data/docs/resources/dh_params.md.erb +205 -0
  41. data/docs/resources/directory.md.erb +30 -0
  42. data/docs/resources/docker.md.erb +219 -0
  43. data/docs/resources/docker_container.md.erb +103 -0
  44. data/docs/resources/docker_image.md.erb +94 -0
  45. data/docs/resources/docker_service.md.erb +114 -0
  46. data/docs/resources/elasticsearch.md.erb +242 -0
  47. data/docs/resources/etc_fstab.md.erb +125 -0
  48. data/docs/resources/etc_group.md.erb +75 -0
  49. data/docs/resources/etc_hosts.md.erb +78 -0
  50. data/docs/resources/etc_hosts_allow.md.erb +74 -0
  51. data/docs/resources/etc_hosts_deny.md.erb +74 -0
  52. data/docs/resources/file.md.erb +526 -0
  53. data/docs/resources/filesystem.md.erb +41 -0
  54. data/docs/resources/firewalld.md.erb +107 -0
  55. data/docs/resources/gem.md.erb +79 -0
  56. data/docs/resources/group.md.erb +61 -0
  57. data/docs/resources/grub_conf.md.erb +101 -0
  58. data/docs/resources/host.md.erb +86 -0
  59. data/docs/resources/http.md.erb +197 -0
  60. data/docs/resources/iis_app.md.erb +122 -0
  61. data/docs/resources/iis_site.md.erb +135 -0
  62. data/docs/resources/inetd_conf.md.erb +94 -0
  63. data/docs/resources/ini.md.erb +76 -0
  64. data/docs/resources/interface.md.erb +58 -0
  65. data/docs/resources/iptables.md.erb +64 -0
  66. data/docs/resources/json.md.erb +63 -0
  67. data/docs/resources/kernel_module.md.erb +120 -0
  68. data/docs/resources/kernel_parameter.md.erb +53 -0
  69. data/docs/resources/key_rsa.md.erb +85 -0
  70. data/docs/resources/launchd_service.md.erb +57 -0
  71. data/docs/resources/limits_conf.md.erb +75 -0
  72. data/docs/resources/login_defs.md.erb +71 -0
  73. data/docs/resources/mount.md.erb +69 -0
  74. data/docs/resources/mssql_session.md.erb +60 -0
  75. data/docs/resources/mysql_conf.md.erb +99 -0
  76. data/docs/resources/mysql_session.md.erb +74 -0
  77. data/docs/resources/nginx.md.erb +79 -0
  78. data/docs/resources/nginx_conf.md.erb +138 -0
  79. data/docs/resources/npm.md.erb +60 -0
  80. data/docs/resources/ntp_conf.md.erb +60 -0
  81. data/docs/resources/oneget.md.erb +53 -0
  82. data/docs/resources/oracledb_session.md.erb +52 -0
  83. data/docs/resources/os.md.erb +141 -0
  84. data/docs/resources/os_env.md.erb +91 -0
  85. data/docs/resources/package.md.erb +120 -0
  86. data/docs/resources/packages.md.erb +67 -0
  87. data/docs/resources/parse_config.md.erb +103 -0
  88. data/docs/resources/parse_config_file.md.erb +138 -0
  89. data/docs/resources/passwd.md.erb +141 -0
  90. data/docs/resources/pip.md.erb +67 -0
  91. data/docs/resources/port.md.erb +137 -0
  92. data/docs/resources/postgres_conf.md.erb +79 -0
  93. data/docs/resources/postgres_hba_conf.md.erb +93 -0
  94. data/docs/resources/postgres_ident_conf.md.erb +76 -0
  95. data/docs/resources/postgres_session.md.erb +69 -0
  96. data/docs/resources/powershell.md.erb +102 -0
  97. data/docs/resources/processes.md.erb +109 -0
  98. data/docs/resources/rabbitmq_config.md.erb +41 -0
  99. data/docs/resources/registry_key.md.erb +158 -0
  100. data/docs/resources/runit_service.md.erb +57 -0
  101. data/docs/resources/security_policy.md.erb +47 -0
  102. data/docs/resources/service.md.erb +121 -0
  103. data/docs/resources/shadow.md.erb +146 -0
  104. data/docs/resources/ssh_config.md.erb +73 -0
  105. data/docs/resources/sshd_config.md.erb +83 -0
  106. data/docs/resources/ssl.md.erb +119 -0
  107. data/docs/resources/sys_info.md.erb +42 -0
  108. data/docs/resources/systemd_service.md.erb +57 -0
  109. data/docs/resources/sysv_service.md.erb +57 -0
  110. data/docs/resources/upstart_service.md.erb +57 -0
  111. data/docs/resources/user.md.erb +140 -0
  112. data/docs/resources/users.md.erb +127 -0
  113. data/docs/resources/vbscript.md.erb +55 -0
  114. data/docs/resources/virtualization.md.erb +57 -0
  115. data/docs/resources/windows_feature.md.erb +47 -0
  116. data/docs/resources/windows_hotfix.md.erb +53 -0
  117. data/docs/resources/windows_task.md.erb +95 -0
  118. data/docs/resources/wmi.md.erb +81 -0
  119. data/docs/resources/x509_certificate.md.erb +151 -0
  120. data/docs/resources/xinetd_conf.md.erb +156 -0
  121. data/docs/resources/xml.md.erb +85 -0
  122. data/docs/resources/yaml.md.erb +69 -0
  123. data/docs/resources/yum.md.erb +98 -0
  124. data/docs/resources/zfs_dataset.md.erb +53 -0
  125. data/docs/resources/zfs_pool.md.erb +47 -0
  126. data/docs/ruby_usage.md +203 -0
  127. data/docs/shared/matcher_be.md.erb +1 -0
  128. data/docs/shared/matcher_cmp.md.erb +43 -0
  129. data/docs/shared/matcher_eq.md.erb +3 -0
  130. data/docs/shared/matcher_include.md.erb +1 -0
  131. data/docs/shared/matcher_match.md.erb +1 -0
  132. data/docs/shell.md +217 -0
  133. data/examples/README.md +8 -0
  134. data/examples/inheritance/README.md +65 -0
  135. data/examples/inheritance/controls/example.rb +14 -0
  136. data/examples/inheritance/inspec.yml +15 -0
  137. data/examples/kitchen-ansible/.kitchen.yml +25 -0
  138. data/examples/kitchen-ansible/Gemfile +19 -0
  139. data/examples/kitchen-ansible/README.md +53 -0
  140. data/examples/kitchen-ansible/files/nginx.repo +6 -0
  141. data/examples/kitchen-ansible/tasks/main.yml +16 -0
  142. data/examples/kitchen-ansible/test/integration/default/default.yml +5 -0
  143. data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -0
  144. data/examples/kitchen-chef/.kitchen.yml +20 -0
  145. data/examples/kitchen-chef/Berksfile +3 -0
  146. data/examples/kitchen-chef/Gemfile +19 -0
  147. data/examples/kitchen-chef/README.md +27 -0
  148. data/examples/kitchen-chef/metadata.rb +7 -0
  149. data/examples/kitchen-chef/recipes/default.rb +6 -0
  150. data/examples/kitchen-chef/recipes/nginx.rb +30 -0
  151. data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -0
  152. data/examples/kitchen-puppet/.kitchen.yml +23 -0
  153. data/examples/kitchen-puppet/Gemfile +20 -0
  154. data/examples/kitchen-puppet/Puppetfile +25 -0
  155. data/examples/kitchen-puppet/README.md +53 -0
  156. data/examples/kitchen-puppet/manifests/site.pp +33 -0
  157. data/examples/kitchen-puppet/metadata.json +11 -0
  158. data/examples/kitchen-puppet/modules/.gitkeep +0 -0
  159. data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -0
  160. data/examples/meta-profile/README.md +37 -0
  161. data/examples/meta-profile/controls/example.rb +13 -0
  162. data/examples/meta-profile/inspec.yml +13 -0
  163. data/examples/profile-attribute.yml +2 -0
  164. data/examples/profile-attribute/README.md +14 -0
  165. data/examples/profile-attribute/controls/example.rb +11 -0
  166. data/examples/profile-attribute/inspec.yml +8 -0
  167. data/examples/profile-sensitive/README.md +29 -0
  168. data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -0
  169. data/examples/profile-sensitive/controls/sensitive.rb +9 -0
  170. data/examples/profile-sensitive/inspec.yml +8 -0
  171. data/examples/profile/README.md +48 -0
  172. data/examples/profile/controls/example.rb +23 -0
  173. data/examples/profile/controls/gordon.rb +36 -0
  174. data/examples/profile/controls/meta.rb +34 -0
  175. data/examples/profile/inspec.yml +10 -0
  176. data/examples/profile/libraries/gordon_config.rb +59 -0
  177. data/inspec-core.gemspec +43 -0
  178. data/lib/bundles/README.md +3 -0
  179. data/lib/bundles/inspec-artifact.rb +7 -0
  180. data/lib/bundles/inspec-artifact/README.md +1 -0
  181. data/lib/bundles/inspec-artifact/cli.rb +277 -0
  182. data/lib/bundles/inspec-compliance.rb +16 -0
  183. data/lib/bundles/inspec-compliance/.kitchen.yml +20 -0
  184. data/lib/bundles/inspec-compliance/README.md +193 -0
  185. data/lib/bundles/inspec-compliance/api.rb +360 -0
  186. data/lib/bundles/inspec-compliance/api/login.rb +193 -0
  187. data/lib/bundles/inspec-compliance/bootstrap.sh +41 -0
  188. data/lib/bundles/inspec-compliance/cli.rb +260 -0
  189. data/lib/bundles/inspec-compliance/configuration.rb +103 -0
  190. data/lib/bundles/inspec-compliance/http.rb +125 -0
  191. data/lib/bundles/inspec-compliance/images/cc-token.png +0 -0
  192. data/lib/bundles/inspec-compliance/support.rb +36 -0
  193. data/lib/bundles/inspec-compliance/target.rb +106 -0
  194. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -0
  195. data/lib/bundles/inspec-habitat.rb +12 -0
  196. data/lib/bundles/inspec-habitat/cli.rb +36 -0
  197. data/lib/bundles/inspec-habitat/log.rb +10 -0
  198. data/lib/bundles/inspec-habitat/profile.rb +391 -0
  199. data/lib/bundles/inspec-init.rb +8 -0
  200. data/lib/bundles/inspec-init/README.md +31 -0
  201. data/lib/bundles/inspec-init/cli.rb +97 -0
  202. data/lib/bundles/inspec-init/templates/profile/README.md +3 -0
  203. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -0
  204. data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -0
  205. data/lib/bundles/inspec-init/templates/profile/libraries/.gitkeep +0 -0
  206. data/lib/bundles/inspec-supermarket.rb +13 -0
  207. data/lib/bundles/inspec-supermarket/README.md +45 -0
  208. data/lib/bundles/inspec-supermarket/api.rb +84 -0
  209. data/lib/bundles/inspec-supermarket/cli.rb +73 -0
  210. data/lib/bundles/inspec-supermarket/target.rb +34 -0
  211. data/lib/fetchers/git.rb +163 -0
  212. data/lib/fetchers/local.rb +74 -0
  213. data/lib/fetchers/mock.rb +35 -0
  214. data/lib/fetchers/url.rb +247 -0
  215. data/lib/inspec.rb +24 -0
  216. data/lib/inspec/archive/tar.rb +29 -0
  217. data/lib/inspec/archive/zip.rb +19 -0
  218. data/lib/inspec/backend.rb +93 -0
  219. data/lib/inspec/base_cli.rb +368 -0
  220. data/lib/inspec/cached_fetcher.rb +66 -0
  221. data/lib/inspec/cli.rb +292 -0
  222. data/lib/inspec/completions/bash.sh.erb +45 -0
  223. data/lib/inspec/completions/fish.sh.erb +34 -0
  224. data/lib/inspec/completions/zsh.sh.erb +61 -0
  225. data/lib/inspec/control_eval_context.rb +179 -0
  226. data/lib/inspec/dependencies/cache.rb +72 -0
  227. data/lib/inspec/dependencies/dependency_set.rb +92 -0
  228. data/lib/inspec/dependencies/lockfile.rb +115 -0
  229. data/lib/inspec/dependencies/requirement.rb +123 -0
  230. data/lib/inspec/dependencies/resolver.rb +86 -0
  231. data/lib/inspec/describe.rb +27 -0
  232. data/lib/inspec/dsl.rb +66 -0
  233. data/lib/inspec/dsl_shared.rb +33 -0
  234. data/lib/inspec/env_printer.rb +157 -0
  235. data/lib/inspec/errors.rb +14 -0
  236. data/lib/inspec/exceptions.rb +12 -0
  237. data/lib/inspec/expect.rb +45 -0
  238. data/lib/inspec/fetcher.rb +45 -0
  239. data/lib/inspec/file_provider.rb +275 -0
  240. data/lib/inspec/formatters.rb +3 -0
  241. data/lib/inspec/formatters/base.rb +259 -0
  242. data/lib/inspec/formatters/json_rspec.rb +20 -0
  243. data/lib/inspec/formatters/show_progress.rb +12 -0
  244. data/lib/inspec/library_eval_context.rb +58 -0
  245. data/lib/inspec/log.rb +11 -0
  246. data/lib/inspec/metadata.rb +247 -0
  247. data/lib/inspec/method_source.rb +24 -0
  248. data/lib/inspec/objects.rb +14 -0
  249. data/lib/inspec/objects/attribute.rb +75 -0
  250. data/lib/inspec/objects/control.rb +61 -0
  251. data/lib/inspec/objects/describe.rb +92 -0
  252. data/lib/inspec/objects/each_loop.rb +36 -0
  253. data/lib/inspec/objects/list.rb +15 -0
  254. data/lib/inspec/objects/or_test.rb +40 -0
  255. data/lib/inspec/objects/ruby_helper.rb +15 -0
  256. data/lib/inspec/objects/tag.rb +27 -0
  257. data/lib/inspec/objects/test.rb +87 -0
  258. data/lib/inspec/objects/value.rb +27 -0
  259. data/lib/inspec/plugins.rb +60 -0
  260. data/lib/inspec/plugins/cli.rb +24 -0
  261. data/lib/inspec/plugins/fetcher.rb +86 -0
  262. data/lib/inspec/plugins/resource.rb +135 -0
  263. data/lib/inspec/plugins/secret.rb +15 -0
  264. data/lib/inspec/plugins/source_reader.rb +40 -0
  265. data/lib/inspec/polyfill.rb +12 -0
  266. data/lib/inspec/profile.rb +513 -0
  267. data/lib/inspec/profile_context.rb +208 -0
  268. data/lib/inspec/profile_vendor.rb +66 -0
  269. data/lib/inspec/reporters.rb +60 -0
  270. data/lib/inspec/reporters/automate.rb +76 -0
  271. data/lib/inspec/reporters/base.rb +25 -0
  272. data/lib/inspec/reporters/cli.rb +356 -0
  273. data/lib/inspec/reporters/json.rb +116 -0
  274. data/lib/inspec/reporters/json_min.rb +48 -0
  275. data/lib/inspec/reporters/junit.rb +78 -0
  276. data/lib/inspec/require_loader.rb +33 -0
  277. data/lib/inspec/resource.rb +190 -0
  278. data/lib/inspec/rule.rb +280 -0
  279. data/lib/inspec/runner.rb +345 -0
  280. data/lib/inspec/runner_mock.rb +41 -0
  281. data/lib/inspec/runner_rspec.rb +175 -0
  282. data/lib/inspec/runtime_profile.rb +26 -0
  283. data/lib/inspec/schema.rb +213 -0
  284. data/lib/inspec/secrets.rb +19 -0
  285. data/lib/inspec/secrets/yaml.rb +30 -0
  286. data/lib/inspec/shell.rb +220 -0
  287. data/lib/inspec/shell_detector.rb +90 -0
  288. data/lib/inspec/source_reader.rb +29 -0
  289. data/lib/inspec/version.rb +8 -0
  290. data/lib/matchers/matchers.rb +339 -0
  291. data/lib/resources/aide_conf.rb +151 -0
  292. data/lib/resources/apache.rb +48 -0
  293. data/lib/resources/apache_conf.rb +149 -0
  294. data/lib/resources/apt.rb +149 -0
  295. data/lib/resources/audit_policy.rb +63 -0
  296. data/lib/resources/auditd.rb +231 -0
  297. data/lib/resources/auditd_conf.rb +46 -0
  298. data/lib/resources/bash.rb +35 -0
  299. data/lib/resources/bond.rb +69 -0
  300. data/lib/resources/bridge.rb +122 -0
  301. data/lib/resources/chocolatey_package.rb +78 -0
  302. data/lib/resources/command.rb +73 -0
  303. data/lib/resources/cpan.rb +58 -0
  304. data/lib/resources/cran.rb +64 -0
  305. data/lib/resources/crontab.rb +169 -0
  306. data/lib/resources/csv.rb +56 -0
  307. data/lib/resources/dh_params.rb +77 -0
  308. data/lib/resources/directory.rb +25 -0
  309. data/lib/resources/docker.rb +236 -0
  310. data/lib/resources/docker_container.rb +89 -0
  311. data/lib/resources/docker_image.rb +83 -0
  312. data/lib/resources/docker_object.rb +57 -0
  313. data/lib/resources/docker_service.rb +90 -0
  314. data/lib/resources/elasticsearch.rb +169 -0
  315. data/lib/resources/etc_fstab.rb +94 -0
  316. data/lib/resources/etc_group.rb +154 -0
  317. data/lib/resources/etc_hosts.rb +66 -0
  318. data/lib/resources/etc_hosts_allow_deny.rb +112 -0
  319. data/lib/resources/file.rb +298 -0
  320. data/lib/resources/filesystem.rb +31 -0
  321. data/lib/resources/firewalld.rb +143 -0
  322. data/lib/resources/gem.rb +70 -0
  323. data/lib/resources/groups.rb +215 -0
  324. data/lib/resources/grub_conf.rb +227 -0
  325. data/lib/resources/host.rb +306 -0
  326. data/lib/resources/http.rb +253 -0
  327. data/lib/resources/iis_app.rb +101 -0
  328. data/lib/resources/iis_site.rb +148 -0
  329. data/lib/resources/inetd_conf.rb +54 -0
  330. data/lib/resources/ini.rb +29 -0
  331. data/lib/resources/interface.rb +129 -0
  332. data/lib/resources/iptables.rb +80 -0
  333. data/lib/resources/json.rb +111 -0
  334. data/lib/resources/kernel_module.rb +107 -0
  335. data/lib/resources/kernel_parameter.rb +58 -0
  336. data/lib/resources/key_rsa.rb +63 -0
  337. data/lib/resources/limits_conf.rb +46 -0
  338. data/lib/resources/login_def.rb +57 -0
  339. data/lib/resources/mount.rb +88 -0
  340. data/lib/resources/mssql_session.rb +101 -0
  341. data/lib/resources/mysql.rb +82 -0
  342. data/lib/resources/mysql_conf.rb +127 -0
  343. data/lib/resources/mysql_session.rb +85 -0
  344. data/lib/resources/nginx.rb +96 -0
  345. data/lib/resources/nginx_conf.rb +226 -0
  346. data/lib/resources/npm.rb +48 -0
  347. data/lib/resources/ntp_conf.rb +51 -0
  348. data/lib/resources/oneget.rb +71 -0
  349. data/lib/resources/oracledb_session.rb +139 -0
  350. data/lib/resources/os.rb +36 -0
  351. data/lib/resources/os_env.rb +86 -0
  352. data/lib/resources/package.rb +370 -0
  353. data/lib/resources/packages.rb +111 -0
  354. data/lib/resources/parse_config.rb +112 -0
  355. data/lib/resources/passwd.rb +76 -0
  356. data/lib/resources/pip.rb +130 -0
  357. data/lib/resources/platform.rb +109 -0
  358. data/lib/resources/port.rb +771 -0
  359. data/lib/resources/postgres.rb +131 -0
  360. data/lib/resources/postgres_conf.rb +114 -0
  361. data/lib/resources/postgres_hba_conf.rb +90 -0
  362. data/lib/resources/postgres_ident_conf.rb +79 -0
  363. data/lib/resources/postgres_session.rb +71 -0
  364. data/lib/resources/powershell.rb +67 -0
  365. data/lib/resources/processes.rb +204 -0
  366. data/lib/resources/rabbitmq_conf.rb +51 -0
  367. data/lib/resources/registry_key.rb +297 -0
  368. data/lib/resources/security_policy.rb +180 -0
  369. data/lib/resources/service.rb +794 -0
  370. data/lib/resources/shadow.rb +159 -0
  371. data/lib/resources/ssh_conf.rb +97 -0
  372. data/lib/resources/ssl.rb +99 -0
  373. data/lib/resources/sys_info.rb +28 -0
  374. data/lib/resources/toml.rb +32 -0
  375. data/lib/resources/users.rb +654 -0
  376. data/lib/resources/vbscript.rb +68 -0
  377. data/lib/resources/virtualization.rb +247 -0
  378. data/lib/resources/windows_feature.rb +84 -0
  379. data/lib/resources/windows_hotfix.rb +35 -0
  380. data/lib/resources/windows_task.rb +102 -0
  381. data/lib/resources/wmi.rb +110 -0
  382. data/lib/resources/x509_certificate.rb +137 -0
  383. data/lib/resources/xinetd.rb +106 -0
  384. data/lib/resources/xml.rb +46 -0
  385. data/lib/resources/yaml.rb +43 -0
  386. data/lib/resources/yum.rb +180 -0
  387. data/lib/resources/zfs_dataset.rb +60 -0
  388. data/lib/resources/zfs_pool.rb +49 -0
  389. data/lib/source_readers/flat.rb +39 -0
  390. data/lib/source_readers/inspec.rb +75 -0
  391. data/lib/utils/command_wrapper.rb +27 -0
  392. data/lib/utils/convert.rb +12 -0
  393. data/lib/utils/database_helpers.rb +77 -0
  394. data/lib/utils/enumerable_delegation.rb +9 -0
  395. data/lib/utils/erlang_parser.rb +192 -0
  396. data/lib/utils/file_reader.rb +25 -0
  397. data/lib/utils/filter.rb +273 -0
  398. data/lib/utils/filter_array.rb +27 -0
  399. data/lib/utils/find_files.rb +47 -0
  400. data/lib/utils/hash.rb +41 -0
  401. data/lib/utils/json_log.rb +18 -0
  402. data/lib/utils/latest_version.rb +22 -0
  403. data/lib/utils/modulator.rb +12 -0
  404. data/lib/utils/nginx_parser.rb +105 -0
  405. data/lib/utils/object_traversal.rb +49 -0
  406. data/lib/utils/parser.rb +274 -0
  407. data/lib/utils/pkey_reader.rb +15 -0
  408. data/lib/utils/plugin_registry.rb +93 -0
  409. data/lib/utils/simpleconfig.rb +120 -0
  410. data/lib/utils/spdx.rb +13 -0
  411. data/lib/utils/spdx.txt +344 -0
  412. metadata +713 -0
@@ -0,0 +1,93 @@
1
+ # encoding: utf-8
2
+ # author: Dominik Richter
3
+ # author: Christoph Hartmann
4
+
5
+ class PluginRegistry
6
+ attr_reader :registry
7
+
8
+ def initialize
9
+ @registry = {}
10
+ end
11
+
12
+ # Resolve a target via available plugins.
13
+ #
14
+ # @param [String] target to resolve
15
+ # @return [Plugin] plugin instance if it can be resolved, nil otherwise
16
+ def resolve(target)
17
+ modules.each do |m|
18
+ res = m.resolve(target)
19
+ return res unless res.nil?
20
+ end
21
+ nil
22
+ end
23
+
24
+ private
25
+
26
+ # Get all registered plugins sorted by priority, with highest first
27
+ #
28
+ # @return [Array[Plugin]] sorted list of plugins
29
+ def modules
30
+ @registry.values
31
+ .sort_by { |x| x.respond_to?(:priority) ? x.priority : 0 }
32
+ .reverse
33
+ end
34
+ end
35
+
36
+ class PluginRegistry
37
+ class Plugin
38
+ # Retrieve the plugin registry associated with this plugin
39
+ #
40
+ # @return [PluginRegistry] plugin registry for this plugin
41
+ def self.plugin_registry
42
+ raise "Plugin #{self} does not implement `self.plugin_registry()`. This method is required"
43
+ end
44
+
45
+ # Register a new plugin by name
46
+ #
47
+ # @param [String] the unique name of this plugin
48
+ # @return [nil] disregard
49
+ def self.name(name)
50
+ raise "Trying to register #{self} with name == nil" if name.nil?
51
+ @name = name
52
+ plugin_registry.registry[name] = self
53
+ end
54
+
55
+ # This plugin's priority. Set it by providing the priority as an
56
+ # argument. Higher numbers ensure that the plugin is
57
+ # called early to check if a target belongs to it. When called without
58
+ # an argument, it retrieves this plugin's priority. Defaults to 0.
59
+ #
60
+ # @param [Numeric] Priority as a number. Will only be set if != nil
61
+ # @return [Numeric] This plugin's priority
62
+ def self.priority(x = nil)
63
+ @priority = x unless x.nil?
64
+ @priority || 0
65
+ end
66
+
67
+ # Try to resolve the target. If this plugin cannot handle it, the result
68
+ # will be nil. If, however, the plugin can resolve it, the resulting
69
+ # object will be an instance of this plugin. This means, that the interface
70
+ # that this base class provides, is the basis for the returned type.
71
+ #
72
+ # @param [String] target to try to resolve
73
+ # @return [Plugin] instance if it can be resolved, nil otherwise
74
+ def self.resolve(_target)
75
+ raise "Plugin #{self} does not implement `self.resolve(target)`. This method is required"
76
+ end
77
+
78
+ # When a plugin's resolve doesn't lead to the final state, it can
79
+ # use this method to hand it back for another resolver to handle.
80
+ #
81
+ # @param [Any] the current target that needs resolving
82
+ # @param [Plugin] an instance of the calling resolver
83
+ # @return [Plugin] instance if it can be resolved, nil otherwise
84
+ def self.resolve_next(target, parent)
85
+ res = plugin_registry.resolve(target)
86
+ res.parent = parent
87
+ res
88
+ end
89
+
90
+ attr_reader :target
91
+ attr_accessor :parent
92
+ end
93
+ end
@@ -0,0 +1,120 @@
1
+ # encoding: utf-8
2
+ # copyright: 2015, Dominik Richter
3
+ # author: Dominik Richter
4
+ # author: Christoph Hartmann
5
+
6
+ require 'utils/parser'
7
+
8
+ class SimpleConfig
9
+ include CommentParser
10
+
11
+ attr_reader :params, :groups
12
+ def initialize(raw_data, opts = {})
13
+ parse(raw_data, opts)
14
+ end
15
+
16
+ # Parse some data
17
+ # quotes: quoting characters, which are parsed, so everything inside
18
+ # it will be part of a string
19
+ # multiline: allow quoted text to span multiple lines
20
+ # comment_char: char which identifies comments
21
+ # standalone_comments: comments must appear alone in a line; if set to true,
22
+ # no comments can be added to the end of an assignment/statement line
23
+ def parse(raw_data, opts = nil)
24
+ @params = {}
25
+ @groups = []
26
+ @vals = @params
27
+ options = default_options.merge(opts || {})
28
+ return if raw_data.nil?
29
+
30
+ # prepare raw data if required
31
+ if !options[:line_separator].nil?
32
+ raw_data = raw_data.tr(options[:line_separator], "\n")
33
+ end
34
+ rest = raw_data
35
+ rest = parse_rest(rest, options) until rest.empty?
36
+ end
37
+
38
+ private
39
+
40
+ def parse_values(match, values)
41
+ start_idx = 2
42
+ i = 0
43
+ count = values - 1
44
+ return match[start_idx] if values == 1
45
+
46
+ # iterate over expected parameters
47
+ values = []
48
+ loop do
49
+ values.push(match[start_idx + i])
50
+ i += 1
51
+ break if i > count
52
+ end
53
+ values
54
+ end
55
+
56
+ def parse_params_line(line, opts)
57
+ # now line contains what we are interested in parsing
58
+ # check if it is an assignment
59
+ m = opts[:assignment_regex].match(line)
60
+ return nil if m.nil?
61
+
62
+ if opts[:multiple_values]
63
+ @vals[m[1]] ||= []
64
+ @vals[m[1]].push(parse_values(m, opts[:key_values]))
65
+ else
66
+ @vals[m[1]] = parse_values(m, opts[:key_values])
67
+ end
68
+ end
69
+
70
+ def parse_group_line(line, opts)
71
+ return nil if opts[:group_re].nil?
72
+ m = opts[:group_re].match(line)
73
+ return nil if m.nil?
74
+ @groups.push(m[1])
75
+
76
+ # We use a Hashie::Mash to provide method syntax for retrieving
77
+ # values. For configs that have keys whose values may be hashes
78
+ # (such as a mysql config that has [sections]), providing
79
+ # a hash whose values are accessible via methods provide
80
+ # a better user experience with `its` blocks.
81
+ @vals = @params[m[1]] = Hashie::Mash.new
82
+ end
83
+
84
+ def parse_implicit_assignment_line(line, opts)
85
+ return nil if is_empty_line(line)
86
+ if opts[:multiple_values]
87
+ @vals[line.strip] ||= []
88
+ else
89
+ @vals[line.strip] = ''
90
+ end
91
+ end
92
+
93
+ def parse_rest(rest, opts)
94
+ line, idx_nl = parse_comment_line(rest, opts)
95
+ parse_params_line(line, opts) or
96
+ parse_group_line(line, opts) or
97
+ parse_implicit_assignment_line(line, opts)
98
+
99
+ # return whatever is left
100
+ rest[(idx_nl + 1)..-1] || ''
101
+ end
102
+
103
+ def is_empty_line(l)
104
+ l =~ /^\s*$/
105
+ end
106
+
107
+ def default_options
108
+ {
109
+ quotes: '',
110
+ multiline: false,
111
+ comment_char: '#',
112
+ line_separator: nil, # uses this char to seperate lines before parsing
113
+ assignment_regex: /^\s*([^=]*?)\s*=\s*(.*?)\s*$/,
114
+ group_re: /\[([^\]]+)\]\s*$/,
115
+ key_values: 1, # default for key=value, may require for 'key val1 val2 val3'
116
+ standalone_comments: false,
117
+ multiple_values: false,
118
+ }
119
+ end
120
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ # author: Christoph Hartmann
3
+ # author: Dominik Richter
4
+ class Spdx
5
+ def self.licenses
6
+ spdx_file = File.join(File.dirname(__FILE__), 'spdx.txt').freeze
7
+ File.read(spdx_file).split("\n")
8
+ end
9
+
10
+ def self.valid_license?(license)
11
+ licenses.include?(license)
12
+ end
13
+ end
@@ -0,0 +1,344 @@
1
+ Glide
2
+ Abstyles
3
+ AFL-1.1
4
+ AFL-1.2
5
+ AFL-2.0
6
+ AFL-2.1
7
+ AFL-3.0
8
+ AMPAS
9
+ APL-1.0
10
+ Adobe-Glyph
11
+ APAFML
12
+ Adobe-2006
13
+ AGPL-1.0
14
+ Afmparse
15
+ Aladdin
16
+ ADSL
17
+ AMDPLPA
18
+ ANTLR-PD
19
+ Apache-1.0
20
+ Apache-1.1
21
+ Apache-2.0
22
+ AML
23
+ APSL-1.0
24
+ APSL-1.1
25
+ APSL-1.2
26
+ APSL-2.0
27
+ Artistic-1.0
28
+ Artistic-1.0-Perl
29
+ Artistic-1.0-cl8
30
+ Artistic-2.0
31
+ AAL
32
+ Bahyph
33
+ Barr
34
+ Beerware
35
+ BitTorrent-1.0
36
+ BitTorrent-1.1
37
+ BSL-1.0
38
+ Borceux
39
+ BSD-2-Clause
40
+ BSD-2-Clause-FreeBSD
41
+ BSD-2-Clause-NetBSD
42
+ BSD-3-Clause
43
+ BSD-3-Clause-Clear
44
+ BSD-3-Clause-No-Nuclear-License
45
+ BSD-3-Clause-No-Nuclear-License-2014
46
+ BSD-3-Clause-No-Nuclear-Warranty
47
+ BSD-4-Clause
48
+ BSD-Protection
49
+ BSD-Source-Code
50
+ BSD-3-Clause-Attribution
51
+ 0BSD
52
+ BSD-4-Clause-UC
53
+ bzip2-1.0.5
54
+ bzip2-1.0.6
55
+ Caldera
56
+ CECILL-1.0
57
+ CECILL-1.1
58
+ CECILL-2.0
59
+ CECILL-2.1
60
+ CECILL-B
61
+ CECILL-C
62
+ ClArtistic
63
+ MIT-CMU
64
+ CNRI-Jython
65
+ CNRI-Python
66
+ CNRI-Python-GPL-Compatible
67
+ CPOL-1.02
68
+ CDDL-1.0
69
+ CDDL-1.1
70
+ CPAL-1.0
71
+ CPL-1.0
72
+ CATOSL-1.1
73
+ Condor-1.1
74
+ CC-BY-1.0
75
+ CC-BY-2.0
76
+ CC-BY-2.5
77
+ CC-BY-3.0
78
+ CC-BY-4.0
79
+ CC-BY-ND-1.0
80
+ CC-BY-ND-2.0
81
+ CC-BY-ND-2.5
82
+ CC-BY-ND-3.0
83
+ CC-BY-ND-4.0
84
+ CC-BY-NC-1.0
85
+ CC-BY-NC-2.0
86
+ CC-BY-NC-2.5
87
+ CC-BY-NC-3.0
88
+ CC-BY-NC-4.0
89
+ CC-BY-NC-ND-1.0
90
+ CC-BY-NC-ND-2.0
91
+ CC-BY-NC-ND-2.5
92
+ CC-BY-NC-ND-3.0
93
+ CC-BY-NC-ND-4.0
94
+ CC-BY-NC-SA-1.0
95
+ CC-BY-NC-SA-2.0
96
+ CC-BY-NC-SA-2.5
97
+ CC-BY-NC-SA-3.0
98
+ CC-BY-NC-SA-4.0
99
+ CC-BY-SA-1.0
100
+ CC-BY-SA-2.0
101
+ CC-BY-SA-2.5
102
+ CC-BY-SA-3.0
103
+ CC-BY-SA-4.0
104
+ CC0-1.0
105
+ Crossword
106
+ CrystalStacker
107
+ CUA-OPL-1.0
108
+ Cube
109
+ curl
110
+ D-FSL-1.0
111
+ diffmark
112
+ WTFPL
113
+ DOC
114
+ Dotseqn
115
+ DSDP
116
+ dvipdfm
117
+ EPL-1.0
118
+ ECL-1.0
119
+ ECL-2.0
120
+ eGenix
121
+ EFL-1.0
122
+ EFL-2.0
123
+ MIT-advertising
124
+ MIT-enna
125
+ Entessa
126
+ ErlPL-1.1
127
+ EUDatagrid
128
+ EUPL-1.0
129
+ EUPL-1.1
130
+ Eurosym
131
+ Fair
132
+ MIT-feh
133
+ Frameworx-1.0
134
+ FreeImage
135
+ FTL
136
+ FSFAP
137
+ FSFUL
138
+ FSFULLR
139
+ Giftware
140
+ GL2PS
141
+ Glulxe
142
+ AGPL-3.0
143
+ GFDL-1.1
144
+ GFDL-1.2
145
+ GFDL-1.3
146
+ GPL-1.0
147
+ GPL-2.0
148
+ GPL-3.0
149
+ LGPL-2.1
150
+ LGPL-3.0
151
+ LGPL-2.0
152
+ gnuplot
153
+ gSOAP-1.3b
154
+ HaskellReport
155
+ HPND
156
+ IBM-pibs
157
+ IPL-1.0
158
+ ICU
159
+ ImageMagick
160
+ iMatix
161
+ Imlib2
162
+ IJG
163
+ Info-ZIP
164
+ Intel-ACPI
165
+ Intel
166
+ Interbase-1.0
167
+ IPA
168
+ ISC
169
+ JasPer-2.0
170
+ JSON
171
+ LPPL-1.0
172
+ LPPL-1.1
173
+ LPPL-1.2
174
+ LPPL-1.3a
175
+ LPPL-1.3c
176
+ Latex2e
177
+ BSD-3-Clause-LBNL
178
+ Leptonica
179
+ LGPLLR
180
+ Libpng
181
+ libtiff
182
+ LAL-1.2
183
+ LAL-1.3
184
+ LiLiQ-P-1.1
185
+ LiLiQ-Rplus-1.1
186
+ LiLiQ-R-1.1
187
+ LPL-1.02
188
+ LPL-1.0
189
+ MakeIndex
190
+ MTLL
191
+ MS-PL
192
+ MS-RL
193
+ MirOS
194
+ MITNFA
195
+ MIT
196
+ Motosoto
197
+ MPL-1.0
198
+ MPL-1.1
199
+ MPL-2.0
200
+ MPL-2.0-no-copyleft-exception
201
+ mpich2
202
+ Multics
203
+ Mup
204
+ NASA-1.3
205
+ Naumen
206
+ NBPL-1.0
207
+ Net-SNMP
208
+ NetCDF
209
+ NGPL
210
+ NOSL
211
+ NPL-1.0
212
+ NPL-1.1
213
+ Newsletr
214
+ NLPL
215
+ Nokia
216
+ NPOSL-3.0
217
+ NLOD-1.0
218
+ Noweb
219
+ NRL
220
+ NTP
221
+ Nunit
222
+ OCLC-2.0
223
+ ODbL-1.0
224
+ PDDL-1.0
225
+ OCCT-PL
226
+ OGTSL
227
+ OLDAP-2.2.2
228
+ OLDAP-1.1
229
+ OLDAP-1.2
230
+ OLDAP-1.3
231
+ OLDAP-1.4
232
+ OLDAP-2.0
233
+ OLDAP-2.0.1
234
+ OLDAP-2.1
235
+ OLDAP-2.2
236
+ OLDAP-2.2.1
237
+ OLDAP-2.3
238
+ OLDAP-2.4
239
+ OLDAP-2.5
240
+ OLDAP-2.6
241
+ OLDAP-2.7
242
+ OLDAP-2.8
243
+ OML
244
+ OPL-1.0
245
+ OSL-1.0
246
+ OSL-1.1
247
+ OSL-2.0
248
+ OSL-2.1
249
+ OSL-3.0
250
+ OpenSSL
251
+ OSET-PL-2.1
252
+ PHP-3.0
253
+ PHP-3.01
254
+ Plexus
255
+ PostgreSQL
256
+ psfrag
257
+ psutils
258
+ Python-2.0
259
+ QPL-1.0
260
+ Qhull
261
+ Rdisc
262
+ RPSL-1.0
263
+ RPL-1.1
264
+ RPL-1.5
265
+ RHeCos-1.1
266
+ RSCPL
267
+ RSA-MD
268
+ Ruby
269
+ SAX-PD
270
+ Saxpath
271
+ SCEA
272
+ SWL
273
+ SMPPL
274
+ Sendmail
275
+ SGI-B-1.0
276
+ SGI-B-1.1
277
+ SGI-B-2.0
278
+ OFL-1.0
279
+ OFL-1.1
280
+ SimPL-2.0
281
+ Sleepycat
282
+ SNIA
283
+ Spencer-86
284
+ Spencer-94
285
+ Spencer-99
286
+ SMLNJ
287
+ SugarCRM-1.1.3
288
+ SISSL
289
+ SISSL-1.2
290
+ SPL-1.0
291
+ Watcom-1.0
292
+ TCL
293
+ TCP-wrappers
294
+ Unlicense
295
+ TMate
296
+ TORQUE-1.1
297
+ TOSL
298
+ Unicode-DFS-2015
299
+ Unicode-DFS-2016
300
+ Unicode-TOU
301
+ UPL-1.0
302
+ NCSA
303
+ Vim
304
+ VOSTROM
305
+ VSL-1.0
306
+ W3C-20150513
307
+ W3C-19980720
308
+ W3C
309
+ Wsuipa
310
+ Xnet
311
+ X11
312
+ Xerox
313
+ XFree86-1.1
314
+ xinetd
315
+ xpp
316
+ XSkat
317
+ YPL-1.0
318
+ YPL-1.1
319
+ Zed
320
+ Zend-2.0
321
+ Zimbra-1.3
322
+ Zimbra-1.4
323
+ Zlib
324
+ zlib-acknowledgement
325
+ ZPL-1.1
326
+ ZPL-2.0
327
+ ZPL-2.1
328
+ eCos-2.0
329
+ GPL-1.0+
330
+ GPL-2.0+
331
+ GPL-2.0-with-autoconf-exception
332
+ GPL-2.0-with-bison-exception
333
+ GPL-2.0-with-classpath-exception
334
+ GPL-2.0-with-font-exception
335
+ GPL-2.0-with-GCC-exception
336
+ GPL-3.0+
337
+ GPL-3.0-with-autoconf-exception
338
+ GPL-3.0-with-GCC-exception
339
+ LGPL-2.1+
340
+ LGPL-3.0+
341
+ LGPL-2.0+
342
+ StandardML-NJ
343
+ WXwindows
344
+ All Rights Reserved