puppet 6.27.0 → 7.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (804) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +16 -2
  3. data/CONTRIBUTING.md +5 -5
  4. data/Gemfile +5 -7
  5. data/Gemfile.lock +51 -70
  6. data/README.md +5 -5
  7. data/conf/fileserver.conf +5 -10
  8. data/ext/README.environment +8 -0
  9. data/ext/build_defaults.yaml +1 -1
  10. data/ext/dbfix.sql +132 -0
  11. data/ext/debian/README.Debian +8 -0
  12. data/ext/debian/README.source +2 -0
  13. data/ext/debian/TODO.Debian +1 -0
  14. data/ext/debian/changelog.erb +1122 -0
  15. data/ext/debian/compat +1 -0
  16. data/ext/debian/control +144 -0
  17. data/ext/debian/copyright +339 -0
  18. data/ext/debian/docs +1 -0
  19. data/ext/debian/fileserver.conf +41 -0
  20. data/ext/debian/puppet-common.dirs +13 -0
  21. data/ext/debian/puppet-common.install +3 -0
  22. data/ext/debian/puppet-common.lintian-overrides +5 -0
  23. data/ext/debian/puppet-common.manpages +28 -0
  24. data/ext/debian/puppet-common.postinst +35 -0
  25. data/ext/debian/puppet-common.postrm +33 -0
  26. data/ext/debian/puppet-el.dirs +1 -0
  27. data/ext/debian/puppet-el.emacsen-install +25 -0
  28. data/ext/debian/puppet-el.emacsen-remove +11 -0
  29. data/ext/debian/puppet-el.emacsen-startup +9 -0
  30. data/ext/debian/puppet-el.install +1 -0
  31. data/ext/debian/puppet-testsuite.install +2 -0
  32. data/ext/debian/puppet-testsuite.lintian-overrides +4 -0
  33. data/ext/debian/puppet.lintian-overrides +3 -0
  34. data/ext/debian/puppet.logrotate +20 -0
  35. data/ext/debian/puppet.postinst +20 -0
  36. data/ext/debian/puppet.postrm +20 -0
  37. data/ext/debian/puppet.preinst +20 -0
  38. data/ext/debian/puppetmaster-common.install +2 -0
  39. data/ext/debian/puppetmaster-common.manpages +2 -0
  40. data/ext/debian/puppetmaster-common.postinst +6 -0
  41. data/ext/debian/puppetmaster-passenger.dirs +4 -0
  42. data/ext/debian/puppetmaster-passenger.postinst +162 -0
  43. data/ext/debian/puppetmaster-passenger.postrm +61 -0
  44. data/ext/debian/puppetmaster.README.debian +17 -0
  45. data/ext/debian/puppetmaster.default +14 -0
  46. data/ext/debian/puppetmaster.init +137 -0
  47. data/ext/debian/puppetmaster.lintian-overrides +3 -0
  48. data/ext/debian/puppetmaster.postinst +20 -0
  49. data/ext/debian/puppetmaster.postrm +5 -0
  50. data/ext/debian/puppetmaster.preinst +22 -0
  51. data/ext/debian/rules +132 -0
  52. data/ext/debian/source/format +1 -0
  53. data/ext/debian/source/options +1 -0
  54. data/ext/debian/vim-puppet.README.Debian +13 -0
  55. data/ext/debian/vim-puppet.dirs +5 -0
  56. data/ext/debian/vim-puppet.yaml +7 -0
  57. data/ext/debian/watch +2 -0
  58. data/ext/freebsd/puppetd +26 -0
  59. data/ext/freebsd/puppetmasterd +26 -0
  60. data/ext/gentoo/conf.d/puppet +5 -0
  61. data/ext/gentoo/conf.d/puppetmaster +12 -0
  62. data/ext/gentoo/init.d/puppet +38 -0
  63. data/ext/gentoo/init.d/puppetmaster +51 -0
  64. data/ext/gentoo/puppet/fileserver.conf +41 -0
  65. data/ext/ips/puppet-agent +44 -0
  66. data/ext/ips/puppet-master +44 -0
  67. data/ext/ips/puppet.p5m.erb +12 -0
  68. data/ext/ips/puppetagent.xml +42 -0
  69. data/ext/ips/puppetmaster.xml +42 -0
  70. data/ext/ips/rules +19 -0
  71. data/ext/ips/transforms +34 -0
  72. data/ext/ldap/puppet.schema +24 -0
  73. data/ext/logcheck/puppet +23 -0
  74. data/{examples → ext}/nagios/check_puppet.rb +2 -2
  75. data/ext/osx/file_mapping.yaml +28 -0
  76. data/ext/osx/postflight.erb +109 -0
  77. data/ext/osx/preflight.erb +52 -0
  78. data/ext/osx/prototype.plist.erb +38 -0
  79. data/ext/osx/puppet.plist +0 -2
  80. data/ext/project_data.yaml +1 -15
  81. data/ext/redhat/fileserver.conf +41 -0
  82. data/ext/redhat/logrotate +21 -0
  83. data/ext/redhat/puppet.spec.erb +841 -0
  84. data/ext/redhat/server.init +128 -0
  85. data/ext/redhat/server.sysconfig +13 -0
  86. data/{examples/enc → ext}/regexp_nodes/classes/databases +0 -0
  87. data/{examples/enc → ext}/regexp_nodes/classes/webservers +0 -0
  88. data/{examples/enc → ext}/regexp_nodes/environment/development +0 -0
  89. data/{examples/enc → ext}/regexp_nodes/parameters/service/prod +0 -0
  90. data/{examples/enc → ext}/regexp_nodes/parameters/service/qa +0 -0
  91. data/{examples/enc → ext}/regexp_nodes/parameters/service/sandbox +0 -0
  92. data/{examples/enc → ext}/regexp_nodes/regexp_nodes.rb +0 -0
  93. data/ext/solaris/pkginfo +6 -0
  94. data/ext/solaris/smf/puppetd.xml +77 -0
  95. data/ext/solaris/smf/puppetmasterd.xml +77 -0
  96. data/ext/solaris/smf/svc-puppetd +71 -0
  97. data/ext/solaris/smf/svc-puppetmasterd +67 -0
  98. data/ext/suse/puppet.spec +310 -0
  99. data/ext/suse/server.init +173 -0
  100. data/ext/windows/service/daemon.rb +6 -5
  101. data/ext/yaml_nodes.rb +105 -0
  102. data/install.rb +21 -17
  103. data/lib/puppet/application/agent.rb +4 -16
  104. data/lib/puppet/application/apply.rb +4 -24
  105. data/lib/puppet/application/device.rb +100 -106
  106. data/lib/puppet/application/filebucket.rb +13 -10
  107. data/lib/puppet/application/lookup.rb +24 -74
  108. data/lib/puppet/application/resource.rb +16 -32
  109. data/lib/puppet/application/script.rb +0 -2
  110. data/lib/puppet/application/ssl.rb +1 -13
  111. data/lib/puppet/application.rb +178 -108
  112. data/lib/puppet/application_support.rb +0 -7
  113. data/lib/puppet/concurrent/thread_local_singleton.rb +3 -6
  114. data/lib/puppet/configurer/downloader.rb +1 -2
  115. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  116. data/lib/puppet/configurer.rb +86 -183
  117. data/lib/puppet/confine/variable.rb +1 -1
  118. data/lib/puppet/defaults.rb +130 -244
  119. data/lib/puppet/environments.rb +82 -146
  120. data/lib/puppet/face/facts.rb +5 -103
  121. data/lib/puppet/face/generate.rb +0 -2
  122. data/lib/puppet/face/help/action.erb +0 -1
  123. data/lib/puppet/face/help/face.erb +0 -1
  124. data/lib/puppet/face/help.rb +1 -1
  125. data/lib/puppet/face/node/clean.rb +0 -11
  126. data/lib/puppet/face/plugin.rb +5 -8
  127. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  128. data/lib/puppet/ffi/windows/constants.rb +404 -0
  129. data/lib/puppet/ffi/windows/functions.rb +628 -0
  130. data/lib/puppet/ffi/windows/structs.rb +338 -0
  131. data/lib/puppet/ffi/windows.rb +12 -0
  132. data/lib/puppet/file_serving/configuration/parser.rb +3 -34
  133. data/lib/puppet/file_serving/configuration.rb +0 -8
  134. data/lib/puppet/file_serving/fileset.rb +2 -14
  135. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  136. data/lib/puppet/file_serving/metadata.rb +0 -3
  137. data/lib/puppet/file_serving/mount/file.rb +4 -4
  138. data/lib/puppet/file_serving/mount.rb +1 -2
  139. data/lib/puppet/file_system/file_impl.rb +8 -10
  140. data/lib/puppet/file_system/jruby.rb +1 -1
  141. data/lib/puppet/file_system/memory_file.rb +1 -8
  142. data/lib/puppet/file_system/windows.rb +6 -8
  143. data/lib/puppet/file_system.rb +1 -1
  144. data/lib/puppet/forge/repository.rb +0 -1
  145. data/lib/puppet/forge.rb +4 -4
  146. data/lib/puppet/functions/all.rb +1 -1
  147. data/lib/puppet/functions/camelcase.rb +1 -1
  148. data/lib/puppet/functions/capitalize.rb +2 -2
  149. data/lib/puppet/functions/downcase.rb +2 -2
  150. data/lib/puppet/functions/empty.rb +0 -8
  151. data/lib/puppet/functions/find_template.rb +2 -2
  152. data/lib/puppet/functions/get.rb +5 -5
  153. data/lib/puppet/functions/group_by.rb +5 -13
  154. data/lib/puppet/functions/lest.rb +1 -1
  155. data/lib/puppet/functions/new.rb +100 -100
  156. data/lib/puppet/functions/next.rb +1 -18
  157. data/lib/puppet/functions/partition.rb +4 -12
  158. data/lib/puppet/functions/require.rb +5 -5
  159. data/lib/puppet/functions/sort.rb +3 -3
  160. data/lib/puppet/functions/strftime.rb +0 -1
  161. data/lib/puppet/functions/tree_each.rb +10 -7
  162. data/lib/puppet/functions/type.rb +4 -4
  163. data/lib/puppet/functions/unwrap.rb +2 -17
  164. data/lib/puppet/functions/upcase.rb +2 -2
  165. data/lib/puppet/functions/versioncmp.rb +2 -6
  166. data/lib/puppet/generate/models/type/type.rb +4 -1
  167. data/lib/puppet/generate/type.rb +0 -9
  168. data/lib/puppet/http/client.rb +165 -115
  169. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  170. data/lib/puppet/http/errors.rb +16 -0
  171. data/lib/puppet/http/external_client.rb +5 -7
  172. data/lib/puppet/{network/http → http}/factory.rb +8 -15
  173. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  174. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  175. data/lib/puppet/http/proxy.rb +137 -0
  176. data/lib/puppet/http/redirector.rb +4 -17
  177. data/lib/puppet/http/resolver/server_list.rb +10 -25
  178. data/lib/puppet/http/resolver/settings.rb +4 -7
  179. data/lib/puppet/http/resolver/srv.rb +7 -11
  180. data/lib/puppet/http/resolver.rb +5 -15
  181. data/lib/puppet/http/response.rb +36 -54
  182. data/lib/puppet/http/response_converter.rb +24 -0
  183. data/lib/puppet/http/response_net_http.rb +42 -0
  184. data/lib/puppet/http/retry_after_handler.rb +4 -13
  185. data/lib/puppet/http/service/ca.rb +11 -22
  186. data/lib/puppet/http/service/compiler.rb +23 -144
  187. data/lib/puppet/http/service/file_server.rb +19 -29
  188. data/lib/puppet/http/service/puppetserver.rb +26 -12
  189. data/lib/puppet/http/service/report.rb +8 -10
  190. data/lib/puppet/http/service.rb +12 -26
  191. data/lib/puppet/http/session.rb +11 -20
  192. data/lib/puppet/{network/http → http}/site.rb +1 -2
  193. data/lib/puppet/http.rb +22 -13
  194. data/lib/puppet/indirector/catalog/compiler.rb +6 -25
  195. data/lib/puppet/indirector/catalog/rest.rb +2 -5
  196. data/lib/puppet/indirector/facts/facter.rb +6 -6
  197. data/lib/puppet/indirector/facts/rest.rb +3 -22
  198. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  199. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  200. data/lib/puppet/indirector/file_metadata/rest.rb +3 -10
  201. data/lib/puppet/indirector/file_server.rb +1 -8
  202. data/lib/puppet/indirector/generic_http.rb +0 -11
  203. data/lib/puppet/indirector/indirection.rb +1 -1
  204. data/lib/puppet/indirector/node/rest.rb +2 -4
  205. data/lib/puppet/indirector/report/rest.rb +3 -8
  206. data/lib/puppet/indirector/request.rb +0 -101
  207. data/lib/puppet/indirector/resource/ral.rb +1 -6
  208. data/lib/puppet/indirector/rest.rb +12 -263
  209. data/lib/puppet/indirector/terminus.rb +0 -4
  210. data/lib/puppet/interface/documentation.rb +0 -1
  211. data/lib/puppet/module/plan.rb +1 -0
  212. data/lib/puppet/module/task.rb +1 -1
  213. data/lib/puppet/module.rb +0 -1
  214. data/lib/puppet/module_tool/applications/installer.rb +2 -56
  215. data/lib/puppet/module_tool/applications/uninstaller.rb +1 -1
  216. data/lib/puppet/module_tool/applications/upgrader.rb +1 -1
  217. data/lib/puppet/module_tool/applications.rb +0 -1
  218. data/lib/puppet/module_tool/errors/shared.rb +2 -34
  219. data/lib/puppet/network/authconfig.rb +2 -96
  220. data/lib/puppet/network/authorization.rb +13 -35
  221. data/lib/puppet/network/formats.rb +0 -67
  222. data/lib/puppet/network/http/api/indirected_routes.rb +3 -21
  223. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  224. data/lib/puppet/network/http/connection.rb +247 -316
  225. data/lib/puppet/network/http/handler.rb +0 -1
  226. data/lib/puppet/network/http.rb +3 -3
  227. data/lib/puppet/network/http_pool.rb +16 -34
  228. data/lib/puppet/node/environment.rb +11 -10
  229. data/lib/puppet/node.rb +2 -31
  230. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  231. data/lib/puppet/pal/pal_impl.rb +4 -2
  232. data/lib/puppet/parser/ast/leaf.rb +2 -3
  233. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  234. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  235. data/lib/puppet/parser/compiler.rb +0 -198
  236. data/lib/puppet/parser/functions/fqdn_rand.rb +6 -14
  237. data/lib/puppet/parser/resource.rb +1 -70
  238. data/lib/puppet/parser/scope.rb +0 -1
  239. data/lib/puppet/parser/templatewrapper.rb +1 -2
  240. data/lib/puppet/pops/evaluator/closure.rb +5 -7
  241. data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -5
  242. data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
  243. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -4
  244. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  245. data/lib/puppet/pops/issues.rb +0 -5
  246. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  247. data/lib/puppet/pops/lookup/lookup_adapter.rb +2 -3
  248. data/lib/puppet/pops/model/ast.pp +0 -42
  249. data/lib/puppet/pops/model/ast.rb +0 -291
  250. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  251. data/lib/puppet/pops/model/factory.rb +1 -47
  252. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  253. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  254. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  255. data/lib/puppet/pops/parser/code_merger.rb +4 -4
  256. data/lib/puppet/pops/parser/egrammar.ra +0 -58
  257. data/lib/puppet/pops/parser/eparser.rb +1685 -1896
  258. data/lib/puppet/pops/parser/lexer2.rb +91 -92
  259. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  260. data/lib/puppet/pops/parser/slurp_support.rb +0 -1
  261. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  262. data/lib/puppet/pops/serialization/to_stringified_converter.rb +1 -1
  263. data/lib/puppet/pops/types/p_sem_ver_type.rb +2 -8
  264. data/lib/puppet/pops/types/p_sensitive_type.rb +0 -10
  265. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  266. data/lib/puppet/pops/types/type_formatter.rb +3 -4
  267. data/lib/puppet/pops/types/type_mismatch_describer.rb +1 -1
  268. data/lib/puppet/pops/types/type_parser.rb +0 -4
  269. data/lib/puppet/pops/types/types.rb +1 -2
  270. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  271. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  272. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  273. data/lib/puppet/property/list.rb +1 -1
  274. data/lib/puppet/provider/aix_object.rb +1 -1
  275. data/lib/puppet/provider/exec/posix.rb +4 -16
  276. data/lib/puppet/provider/group/groupadd.rb +10 -18
  277. data/lib/puppet/provider/nameservice.rb +0 -18
  278. data/lib/puppet/provider/package/apt.rb +2 -34
  279. data/lib/puppet/provider/package/aptitude.rb +0 -6
  280. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  281. data/lib/puppet/provider/package/dpkg.rb +0 -10
  282. data/lib/puppet/provider/package/gem.rb +23 -3
  283. data/lib/puppet/provider/package/nim.rb +6 -11
  284. data/lib/puppet/provider/package/pip.rb +3 -16
  285. data/lib/puppet/provider/package/pkg.rb +2 -23
  286. data/lib/puppet/provider/package/portage.rb +1 -1
  287. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  288. data/lib/puppet/provider/package/puppetserver_gem.rb +1 -1
  289. data/lib/puppet/provider/package/yum.rb +1 -1
  290. data/lib/puppet/provider/parsedfile.rb +0 -3
  291. data/lib/puppet/provider/service/base.rb +1 -1
  292. data/lib/puppet/provider/service/debian.rb +0 -2
  293. data/lib/puppet/provider/service/init.rb +9 -10
  294. data/lib/puppet/provider/service/launchd.rb +2 -2
  295. data/lib/puppet/provider/service/redhat.rb +1 -1
  296. data/lib/puppet/provider/service/smf.rb +194 -76
  297. data/lib/puppet/provider/service/systemd.rb +6 -16
  298. data/lib/puppet/provider/service/upstart.rb +5 -5
  299. data/lib/puppet/provider/service/windows.rb +0 -38
  300. data/lib/puppet/provider/user/aix.rb +3 -46
  301. data/lib/puppet/provider/user/directoryservice.rb +11 -34
  302. data/lib/puppet/provider/user/useradd.rb +24 -134
  303. data/lib/puppet/provider.rb +1 -14
  304. data/lib/puppet/reference/configuration.rb +8 -7
  305. data/lib/puppet/reference/indirection.rb +1 -1
  306. data/lib/puppet/reference/providers.rb +2 -2
  307. data/lib/puppet/resource/catalog.rb +2 -15
  308. data/lib/puppet/resource/type.rb +3 -119
  309. data/lib/puppet/resource/type_collection.rb +3 -49
  310. data/lib/puppet/resource.rb +6 -127
  311. data/lib/puppet/runtime.rb +2 -13
  312. data/lib/puppet/settings/environment_conf.rb +0 -1
  313. data/lib/puppet/settings/integer_setting.rb +17 -0
  314. data/lib/puppet/settings/port_setting.rb +15 -0
  315. data/lib/puppet/settings/priority_setting.rb +5 -4
  316. data/lib/puppet/settings.rb +82 -98
  317. data/lib/puppet/ssl/base.rb +3 -5
  318. data/lib/puppet/ssl/certificate.rb +0 -6
  319. data/lib/puppet/ssl/certificate_request.rb +1 -12
  320. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  321. data/lib/puppet/ssl/oids.rb +3 -1
  322. data/lib/puppet/ssl/ssl_provider.rb +24 -10
  323. data/lib/puppet/ssl/state_machine.rb +3 -1
  324. data/lib/puppet/ssl/verifier.rb +2 -6
  325. data/lib/puppet/ssl.rb +10 -6
  326. data/lib/puppet/test/test_helper.rb +2 -7
  327. data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
  328. data/lib/puppet/transaction/persistence.rb +1 -21
  329. data/lib/puppet/transaction/report.rb +3 -19
  330. data/lib/puppet/transaction.rb +1 -7
  331. data/lib/puppet/type/exec.rb +6 -36
  332. data/lib/puppet/type/file/checksum.rb +1 -1
  333. data/lib/puppet/type/file/data_sync.rb +1 -1
  334. data/lib/puppet/type/file/mode.rb +0 -6
  335. data/lib/puppet/type/file/selcontext.rb +1 -1
  336. data/lib/puppet/type/file/source.rb +1 -1
  337. data/lib/puppet/type/file.rb +12 -32
  338. data/lib/puppet/type/filebucket.rb +4 -4
  339. data/lib/puppet/type/group.rb +1 -0
  340. data/lib/puppet/type/package.rb +8 -16
  341. data/lib/puppet/type/resources.rb +1 -1
  342. data/lib/puppet/type/service.rb +41 -26
  343. data/lib/puppet/type/tidy.rb +3 -22
  344. data/lib/puppet/type/user.rb +13 -32
  345. data/lib/puppet/type.rb +1 -77
  346. data/lib/puppet/util/autoload.rb +8 -1
  347. data/lib/puppet/util/command_line.rb +1 -1
  348. data/lib/puppet/util/execution.rb +0 -11
  349. data/lib/puppet/util/filetype.rb +2 -2
  350. data/lib/puppet/util/http_proxy.rb +2 -215
  351. data/lib/puppet/util/json.rb +0 -20
  352. data/lib/puppet/util/log.rb +4 -8
  353. data/lib/puppet/util/logging.rb +25 -1
  354. data/lib/puppet/util/monkey_patches.rb +2 -59
  355. data/lib/puppet/util/package.rb +16 -25
  356. data/lib/puppet/util/pidlock.rb +1 -1
  357. data/lib/puppet/util/posix.rb +5 -54
  358. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  359. data/lib/puppet/util/rdoc.rb +0 -7
  360. data/lib/puppet/util/retry_action.rb +1 -1
  361. data/lib/puppet/util/run_mode.rb +9 -1
  362. data/lib/puppet/util/selinux.rb +4 -30
  363. data/lib/puppet/util/suidmanager.rb +2 -1
  364. data/lib/puppet/util/symbolic_file_mode.rb +17 -29
  365. data/lib/puppet/util/tagging.rb +0 -1
  366. data/lib/puppet/util/windows/adsi.rb +0 -46
  367. data/lib/puppet/util/windows/daemon.rb +360 -0
  368. data/lib/puppet/util/windows/error.rb +1 -0
  369. data/lib/puppet/util/windows/eventlog.rb +4 -9
  370. data/lib/puppet/util/windows/file.rb +8 -242
  371. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  372. data/lib/puppet/util/windows/principal.rb +2 -9
  373. data/lib/puppet/util/windows/process.rb +4 -226
  374. data/lib/puppet/util/windows/service.rb +11 -457
  375. data/lib/puppet/util/windows/sid.rb +2 -6
  376. data/lib/puppet/util/windows/string.rb +12 -13
  377. data/lib/puppet/util/windows/user.rb +2 -0
  378. data/lib/puppet/util/windows.rb +3 -11
  379. data/lib/puppet/util/yaml.rb +1 -42
  380. data/lib/puppet/util.rb +5 -5
  381. data/lib/puppet/vendor/require_vendored.rb +0 -1
  382. data/lib/puppet/version.rb +1 -1
  383. data/lib/puppet/x509/cert_provider.rb +29 -1
  384. data/lib/puppet/x509.rb +5 -1
  385. data/lib/puppet.rb +20 -26
  386. data/locales/puppet.pot +9633 -5
  387. data/man/man5/puppet.conf.5 +286 -401
  388. data/man/man8/puppet-agent.8 +2 -5
  389. data/man/man8/puppet-apply.8 +2 -2
  390. data/man/man8/puppet-catalog.8 +9 -9
  391. data/man/man8/puppet-config.8 +1 -1
  392. data/man/man8/puppet-describe.8 +1 -1
  393. data/man/man8/puppet-device.8 +2 -2
  394. data/man/man8/puppet-doc.8 +1 -1
  395. data/man/man8/puppet-epp.8 +1 -1
  396. data/man/man8/puppet-facts.8 +8 -51
  397. data/man/man8/puppet-filebucket.8 +4 -4
  398. data/man/man8/puppet-generate.8 +1 -1
  399. data/man/man8/puppet-help.8 +1 -1
  400. data/man/man8/puppet-lookup.8 +6 -9
  401. data/man/man8/puppet-module.8 +3 -60
  402. data/man/man8/puppet-node.8 +5 -5
  403. data/man/man8/puppet-parser.8 +1 -1
  404. data/man/man8/puppet-plugin.8 +1 -1
  405. data/man/man8/puppet-report.8 +5 -5
  406. data/man/man8/puppet-resource.8 +1 -1
  407. data/man/man8/puppet-script.8 +2 -2
  408. data/man/man8/puppet-ssl.8 +1 -5
  409. data/man/man8/puppet.8 +2 -2
  410. data/spec/fixtures/ssl/127.0.0.1-key.pem +57 -107
  411. data/spec/fixtures/ssl/127.0.0.1.pem +31 -52
  412. data/spec/fixtures/ssl/bad-basic-constraints.pem +35 -57
  413. data/spec/fixtures/ssl/bad-int-basic-constraints.pem +35 -57
  414. data/spec/fixtures/ssl/ca.pem +35 -57
  415. data/spec/fixtures/ssl/crl.pem +18 -28
  416. data/spec/fixtures/ssl/ec-key.pem +11 -11
  417. data/spec/fixtures/ssl/ec.pem +24 -33
  418. data/spec/fixtures/ssl/encrypted-ec-key.pem +12 -12
  419. data/spec/fixtures/ssl/encrypted-key.pem +58 -108
  420. data/spec/fixtures/ssl/intermediate-agent-crl.pem +19 -28
  421. data/spec/fixtures/ssl/intermediate-agent.pem +36 -57
  422. data/spec/fixtures/ssl/intermediate-crl.pem +21 -31
  423. data/spec/fixtures/ssl/intermediate.pem +36 -57
  424. data/spec/fixtures/ssl/pluto-key.pem +57 -107
  425. data/spec/fixtures/ssl/pluto.pem +30 -52
  426. data/spec/fixtures/ssl/request-key.pem +57 -107
  427. data/spec/fixtures/ssl/request.pem +26 -47
  428. data/spec/fixtures/ssl/revoked-key.pem +57 -107
  429. data/spec/fixtures/ssl/revoked.pem +30 -52
  430. data/spec/fixtures/ssl/signed-key.pem +57 -107
  431. data/spec/fixtures/ssl/signed.pem +30 -52
  432. data/spec/fixtures/ssl/tampered-cert.pem +30 -52
  433. data/spec/fixtures/ssl/tampered-csr.pem +26 -47
  434. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +57 -107
  435. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +29 -50
  436. data/spec/fixtures/ssl/unknown-ca-key.pem +57 -107
  437. data/spec/fixtures/ssl/unknown-ca.pem +33 -55
  438. data/spec/fixtures/unit/forge/bacula.json +1 -1
  439. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  440. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +0 -4
  441. data/spec/integration/application/agent_spec.rb +51 -299
  442. data/spec/integration/application/apply_spec.rb +1 -20
  443. data/spec/integration/application/filebucket_spec.rb +16 -32
  444. data/spec/integration/application/help_spec.rb +2 -0
  445. data/spec/integration/application/lookup_spec.rb +50 -81
  446. data/spec/integration/application/module_spec.rb +0 -21
  447. data/spec/integration/application/plugin_spec.rb +24 -2
  448. data/spec/integration/configurer_spec.rb +2 -18
  449. data/spec/integration/defaults_spec.rb +14 -3
  450. data/spec/integration/environments/settings_interpolation_spec.rb +4 -0
  451. data/spec/integration/http/client_spec.rb +0 -42
  452. data/spec/integration/indirector/direct_file_server_spec.rb +3 -1
  453. data/spec/integration/indirector/facts/facter_spec.rb +39 -93
  454. data/spec/integration/network/http_pool_spec.rb +3 -21
  455. data/spec/integration/parser/catalog_spec.rb +0 -38
  456. data/spec/integration/parser/node_spec.rb +0 -9
  457. data/spec/integration/parser/pcore_resource_spec.rb +0 -47
  458. data/spec/integration/resource/type_collection_spec.rb +6 -2
  459. data/spec/integration/transaction/report_spec.rb +1 -1
  460. data/spec/integration/transaction_spec.rb +9 -4
  461. data/spec/integration/type/exec_spec.rb +45 -70
  462. data/spec/integration/type/file_spec.rb +7 -6
  463. data/spec/integration/type/package_spec.rb +6 -6
  464. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  465. data/spec/integration/util/windows/adsi_spec.rb +1 -21
  466. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  467. data/spec/integration/util/windows/principal_spec.rb +0 -21
  468. data/spec/integration/util/windows/process_spec.rb +9 -1
  469. data/spec/integration/util/windows/registry_spec.rb +10 -6
  470. data/spec/integration/util/windows/security_spec.rb +1 -1
  471. data/spec/lib/matchers/include.rb +27 -0
  472. data/spec/lib/matchers/include_spec.rb +32 -0
  473. data/spec/lib/puppet/test_ca.rb +2 -7
  474. data/spec/lib/puppet_spec/modules.rb +2 -13
  475. data/spec/lib/puppet_spec/puppetserver.rb +1 -16
  476. data/spec/lib/puppet_spec/settings.rb +1 -1
  477. data/spec/shared_behaviours/documentation_on_faces.rb +2 -0
  478. data/spec/spec_helper.rb +17 -13
  479. data/spec/unit/agent_spec.rb +6 -10
  480. data/spec/unit/application/agent_spec.rb +3 -7
  481. data/spec/unit/application/apply_spec.rb +56 -76
  482. data/spec/unit/application/facts_spec.rb +12 -456
  483. data/spec/unit/application/filebucket_spec.rb +43 -39
  484. data/spec/unit/application/lookup_spec.rb +10 -131
  485. data/spec/unit/application/resource_spec.rb +0 -29
  486. data/spec/unit/application/ssl_spec.rb +2 -25
  487. data/spec/unit/application_spec.rb +9 -51
  488. data/spec/unit/certificate_factory_spec.rb +1 -1
  489. data/spec/unit/configurer/downloader_spec.rb +6 -8
  490. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  491. data/spec/unit/configurer_spec.rb +68 -327
  492. data/spec/unit/confine/feature_spec.rb +1 -1
  493. data/spec/unit/confine_spec.rb +2 -8
  494. data/spec/unit/context/trusted_information_spec.rb +2 -6
  495. data/spec/unit/defaults_spec.rb +68 -55
  496. data/spec/unit/environments_spec.rb +68 -408
  497. data/spec/unit/face/generate_spec.rb +0 -64
  498. data/spec/unit/face/node_spec.rb +11 -0
  499. data/spec/unit/face/plugin_spec.rb +73 -33
  500. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  501. data/spec/unit/file_bucket/file_spec.rb +1 -1
  502. data/spec/unit/file_serving/configuration/parser_spec.rb +15 -41
  503. data/spec/unit/file_serving/configuration_spec.rb +10 -26
  504. data/spec/unit/file_serving/fileset_spec.rb +0 -60
  505. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  506. data/spec/unit/file_serving/terminus_helper_spec.rb +4 -11
  507. data/spec/unit/file_system_spec.rb +4 -56
  508. data/spec/unit/forge/module_release_spec.rb +10 -5
  509. data/spec/unit/functions/assert_type_spec.rb +1 -1
  510. data/spec/unit/functions/camelcase_spec.rb +1 -1
  511. data/spec/unit/functions/capitalize_spec.rb +1 -1
  512. data/spec/unit/functions/downcase_spec.rb +1 -1
  513. data/spec/unit/functions/empty_spec.rb +0 -10
  514. data/spec/unit/functions/logging_spec.rb +0 -1
  515. data/spec/unit/functions/lookup_spec.rb +0 -64
  516. data/spec/unit/functions/unwrap_spec.rb +0 -8
  517. data/spec/unit/functions/upcase_spec.rb +1 -1
  518. data/spec/unit/functions/versioncmp_spec.rb +4 -40
  519. data/spec/unit/functions4_spec.rb +2 -2
  520. data/spec/unit/gettext/config_spec.rb +0 -12
  521. data/spec/unit/http/client_spec.rb +8 -66
  522. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  523. data/spec/unit/http/external_client_spec.rb +4 -4
  524. data/spec/unit/{network/http → http}/factory_spec.rb +5 -30
  525. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  526. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  527. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  528. data/spec/unit/http/resolver_spec.rb +13 -13
  529. data/spec/unit/http/service/compiler_spec.rb +0 -193
  530. data/spec/unit/http/service/file_server_spec.rb +3 -3
  531. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  532. data/spec/unit/http/service_spec.rb +0 -1
  533. data/spec/unit/http/session_spec.rb +16 -14
  534. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  535. data/spec/unit/indirector/catalog/compiler_spec.rb +10 -101
  536. data/spec/unit/indirector/catalog/rest_spec.rb +0 -8
  537. data/spec/unit/indirector/face_spec.rb +1 -0
  538. data/spec/unit/indirector/facts/facter_spec.rb +3 -0
  539. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  540. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +8 -26
  541. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  542. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  543. data/spec/unit/indirector/file_server_spec.rb +1 -15
  544. data/spec/unit/indirector/indirection_spec.rb +15 -18
  545. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  546. data/spec/unit/indirector/request_spec.rb +0 -264
  547. data/spec/unit/indirector/resource/ral_spec.rb +75 -40
  548. data/spec/unit/indirector/rest_spec.rb +98 -752
  549. data/spec/unit/indirector/store_configs_spec.rb +7 -0
  550. data/spec/unit/indirector_spec.rb +2 -2
  551. data/spec/unit/interface/action_spec.rb +9 -0
  552. data/spec/unit/module_spec.rb +1 -15
  553. data/spec/unit/module_tool/applications/installer_spec.rb +0 -105
  554. data/spec/unit/network/authconfig_spec.rb +2 -129
  555. data/spec/unit/network/authorization_spec.rb +2 -55
  556. data/spec/unit/network/formats_spec.rb +4 -51
  557. data/spec/unit/network/http/api/indirected_routes_spec.rb +5 -92
  558. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  559. data/spec/unit/network/http/api_spec.rb +10 -0
  560. data/spec/unit/network/http/connection_spec.rb +19 -41
  561. data/spec/unit/network/http/handler_spec.rb +0 -1
  562. data/spec/unit/network/http_pool_spec.rb +0 -4
  563. data/spec/unit/node/environment_spec.rb +33 -21
  564. data/spec/unit/node_spec.rb +2 -60
  565. data/spec/unit/parser/compiler_spec.rb +19 -3
  566. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  567. data/spec/unit/parser/functions/fqdn_rand_spec.rb +1 -15
  568. data/spec/unit/parser/resource_spec.rb +8 -14
  569. data/spec/unit/parser/templatewrapper_spec.rb +5 -16
  570. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  571. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  572. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  573. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  574. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  575. data/spec/unit/pops/parser/parse_containers_spec.rb +13 -2
  576. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  577. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  578. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  579. data/spec/unit/pops/serialization/to_stringified_spec.rb +0 -5
  580. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +0 -18
  581. data/spec/unit/pops/types/p_sensitive_type_spec.rb +0 -18
  582. data/spec/unit/pops/types/type_calculator_spec.rb +6 -12
  583. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  584. data/spec/unit/pops/validator/validator_spec.rb +61 -51
  585. data/spec/unit/pops/visitor_spec.rb +1 -1
  586. data/spec/unit/property_spec.rb +0 -1
  587. data/spec/unit/provider/group/groupadd_spec.rb +2 -5
  588. data/spec/unit/provider/nameservice_spec.rb +64 -122
  589. data/spec/unit/provider/package/apt_spec.rb +23 -28
  590. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  591. data/spec/unit/provider/package/base_spec.rb +5 -6
  592. data/spec/unit/provider/package/dnfmodule_spec.rb +1 -10
  593. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  594. data/spec/unit/provider/package/gem_spec.rb +33 -1
  595. data/spec/unit/provider/package/nim_spec.rb +0 -42
  596. data/spec/unit/provider/package/pacman_spec.rb +12 -18
  597. data/spec/unit/provider/package/pip2_spec.rb +1 -1
  598. data/spec/unit/provider/package/pip3_spec.rb +1 -1
  599. data/spec/unit/provider/package/pip_spec.rb +12 -44
  600. data/spec/unit/provider/package/pkg_spec.rb +4 -29
  601. data/spec/unit/provider/package/pkgdmg_spec.rb +4 -0
  602. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -3
  603. data/spec/unit/provider/package/puppetserver_gem_spec.rb +1 -1
  604. data/spec/unit/provider/parsedfile_spec.rb +0 -10
  605. data/spec/unit/provider/service/gentoo_spec.rb +5 -6
  606. data/spec/unit/provider/service/init_spec.rb +9 -16
  607. data/spec/unit/provider/service/launchd_spec.rb +0 -11
  608. data/spec/unit/provider/service/openwrt_spec.rb +29 -23
  609. data/spec/unit/provider/service/redhat_spec.rb +2 -3
  610. data/spec/unit/provider/service/smf_spec.rb +401 -165
  611. data/spec/unit/provider/service/systemd_spec.rb +9 -54
  612. data/spec/unit/provider/service/windows_spec.rb +0 -203
  613. data/spec/unit/provider/user/aix_spec.rb +0 -105
  614. data/spec/unit/provider/user/directoryservice_spec.rb +36 -68
  615. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  616. data/spec/unit/provider/user/pw_spec.rb +0 -2
  617. data/spec/unit/provider/user/useradd_spec.rb +5 -114
  618. data/spec/unit/provider_spec.rb +12 -22
  619. data/spec/unit/puppet_spec.rb +4 -12
  620. data/spec/unit/resource/catalog_spec.rb +2 -15
  621. data/spec/unit/resource/type_collection_spec.rb +2 -22
  622. data/spec/unit/resource/type_spec.rb +1 -1
  623. data/spec/unit/resource_spec.rb +12 -125
  624. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  625. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  626. data/spec/unit/settings/port_setting_spec.rb +31 -0
  627. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  628. data/spec/unit/settings_spec.rb +79 -110
  629. data/spec/unit/ssl/base_spec.rb +37 -3
  630. data/spec/unit/ssl/certificate_request_spec.rb +21 -45
  631. data/spec/unit/ssl/certificate_spec.rb +2 -11
  632. data/spec/unit/ssl/ssl_provider_spec.rb +2 -5
  633. data/spec/unit/ssl/state_machine_spec.rb +5 -20
  634. data/spec/unit/ssl/verifier_spec.rb +0 -21
  635. data/spec/unit/transaction/additional_resource_generator_spec.rb +9 -3
  636. data/spec/unit/transaction/event_manager_spec.rb +11 -14
  637. data/spec/unit/transaction/persistence_spec.rb +0 -51
  638. data/spec/unit/transaction/report_spec.rb +0 -2
  639. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  640. data/spec/unit/transaction_spec.rb +55 -96
  641. data/spec/unit/type/exec_spec.rb +29 -76
  642. data/spec/unit/type/file/checksum_spec.rb +6 -6
  643. data/spec/unit/type/file/content_spec.rb +2 -1
  644. data/spec/unit/type/file/ensure_spec.rb +1 -1
  645. data/spec/unit/type/file/mode_spec.rb +1 -1
  646. data/spec/unit/type/file/selinux_spec.rb +5 -3
  647. data/spec/unit/type/file/source_spec.rb +4 -5
  648. data/spec/unit/type/file_spec.rb +18 -6
  649. data/spec/unit/type/group_spec.rb +6 -13
  650. data/spec/unit/type/package_spec.rb +1 -1
  651. data/spec/unit/type/resources_spec.rb +7 -7
  652. data/spec/unit/type/service_spec.rb +189 -87
  653. data/spec/unit/type/tidy_spec.rb +8 -24
  654. data/spec/unit/type_spec.rb +24 -4
  655. data/spec/unit/util/at_fork_spec.rb +2 -2
  656. data/spec/unit/util/autoload_spec.rb +1 -5
  657. data/spec/unit/util/backups_spec.rb +2 -3
  658. data/spec/unit/util/execution_spec.rb +11 -44
  659. data/spec/unit/util/inifile_spec.rb +14 -6
  660. data/spec/unit/util/log_spec.rb +7 -8
  661. data/spec/unit/util/logging_spec.rb +3 -5
  662. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  663. data/spec/unit/util/posix_spec.rb +15 -363
  664. data/spec/unit/util/run_mode_spec.rb +21 -121
  665. data/spec/unit/util/selinux_spec.rb +68 -163
  666. data/spec/unit/util/storage_spec.rb +1 -3
  667. data/spec/unit/util/suidmanager_spec.rb +41 -44
  668. data/spec/unit/util/windows/sid_spec.rb +0 -41
  669. data/spec/unit/util/windows/string_spec.rb +1 -3
  670. data/spec/unit/util/yaml_spec.rb +13 -92
  671. data/spec/unit/util_spec.rb +6 -31
  672. data/tasks/generate_cert_fixtures.rake +3 -12
  673. data/tasks/parallel.rake +3 -3
  674. metadata +138 -233
  675. data/conf/auth.conf +0 -150
  676. data/ext/README.md +0 -13
  677. data/lib/puppet/application/cert.rb +0 -76
  678. data/lib/puppet/application/key.rb +0 -4
  679. data/lib/puppet/application/man.rb +0 -4
  680. data/lib/puppet/application/status.rb +0 -4
  681. data/lib/puppet/face/key.rb +0 -16
  682. data/lib/puppet/face/man.rb +0 -145
  683. data/lib/puppet/face/module/build.rb +0 -14
  684. data/lib/puppet/face/module/generate.rb +0 -14
  685. data/lib/puppet/face/module/search.rb +0 -103
  686. data/lib/puppet/face/status.rb +0 -51
  687. data/lib/puppet/facter_impl.rb +0 -96
  688. data/lib/puppet/ffi/posix/constants.rb +0 -14
  689. data/lib/puppet/ffi/posix/functions.rb +0 -24
  690. data/lib/puppet/ffi/posix.rb +0 -10
  691. data/lib/puppet/file_serving/mount/scripts.rb +0 -24
  692. data/lib/puppet/indirector/certificate/file.rb +0 -9
  693. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  694. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  695. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  696. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  697. data/lib/puppet/indirector/file_content/http.rb +0 -22
  698. data/lib/puppet/indirector/key/file.rb +0 -46
  699. data/lib/puppet/indirector/key/memory.rb +0 -7
  700. data/lib/puppet/indirector/ssl_file.rb +0 -162
  701. data/lib/puppet/indirector/status/local.rb +0 -12
  702. data/lib/puppet/indirector/status/rest.rb +0 -27
  703. data/lib/puppet/indirector/status.rb +0 -3
  704. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  705. data/lib/puppet/network/auth_config_parser.rb +0 -90
  706. data/lib/puppet/network/authstore.rb +0 -283
  707. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  708. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  709. data/lib/puppet/network/http/base_pool.rb +0 -36
  710. data/lib/puppet/network/http/compression.rb +0 -127
  711. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  712. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  713. data/lib/puppet/network/rest_controller.rb +0 -2
  714. data/lib/puppet/network/rights.rb +0 -210
  715. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  716. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  717. data/lib/puppet/parser/environment_compiler.rb +0 -202
  718. data/lib/puppet/pops/types/enumeration.rb +0 -16
  719. data/lib/puppet/resource/capability_finder.rb +0 -154
  720. data/lib/puppet/rest/errors.rb +0 -15
  721. data/lib/puppet/rest/response.rb +0 -35
  722. data/lib/puppet/rest/route.rb +0 -85
  723. data/lib/puppet/rest/routes.rb +0 -135
  724. data/lib/puppet/settings/alias_setting.rb +0 -37
  725. data/lib/puppet/ssl/host.rb +0 -505
  726. data/lib/puppet/ssl/key.rb +0 -61
  727. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  728. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  729. data/lib/puppet/ssl/validator.rb +0 -61
  730. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  731. data/lib/puppet/status.rb +0 -40
  732. data/lib/puppet/util/connection.rb +0 -88
  733. data/lib/puppet/util/fact_dif.rb +0 -81
  734. data/lib/puppet/util/ssl.rb +0 -83
  735. data/lib/puppet/util/windows/api_types.rb +0 -309
  736. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  737. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  738. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  739. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  740. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  741. data/lib/puppet/vendor/pathspec/README.md +0 -53
  742. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  743. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  744. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  745. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  746. data/man/man8/puppet-key.8 +0 -126
  747. data/man/man8/puppet-man.8 +0 -76
  748. data/man/man8/puppet-status.8 +0 -108
  749. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +0 -92
  750. data/spec/fixtures/integration/application/agent/lib/facter/agent_spec_role.rb +0 -3
  751. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Gemfile +0 -4
  752. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/Rakefile +0 -3
  753. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/lib/puppet/functions/l10n.rb +0 -8
  754. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/config.yaml +0 -25
  755. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/ja/puppet-l10n.po +0 -19
  756. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/locales/puppet-l10n.pot +0 -20
  757. data/spec/fixtures/integration/l10n/envs/prod/modules/demo/metadata.json +0 -8
  758. data/spec/fixtures/ssl/oid-key.pem +0 -117
  759. data/spec/fixtures/ssl/oid.pem +0 -69
  760. data/spec/fixtures/ssl/trusted_oid_mapping.yaml +0 -5
  761. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +0 -9
  762. data/spec/integration/application/resource_spec.rb +0 -68
  763. data/spec/integration/application/ssl_spec.rb +0 -20
  764. data/spec/integration/l10n/compiler_spec.rb +0 -37
  765. data/spec/integration/network/authconfig_spec.rb +0 -256
  766. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  767. data/spec/shared_contexts/l10n.rb +0 -32
  768. data/spec/unit/application/man_spec.rb +0 -52
  769. data/spec/unit/capability_spec.rb +0 -414
  770. data/spec/unit/concurrent/thread_local_singleton_spec.rb +0 -39
  771. data/spec/unit/face/key_spec.rb +0 -9
  772. data/spec/unit/face/module/search_spec.rb +0 -231
  773. data/spec/unit/face/status_spec.rb +0 -9
  774. data/spec/unit/facter_impl_spec.rb +0 -31
  775. data/spec/unit/file_serving/mount/scripts_spec.rb +0 -69
  776. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  777. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  778. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  779. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  780. data/spec/unit/indirector/key/file_spec.rb +0 -78
  781. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  782. data/spec/unit/indirector/status/local_spec.rb +0 -10
  783. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  784. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  785. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  786. data/spec/unit/network/authstore_spec.rb +0 -407
  787. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  788. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  789. data/spec/unit/network/http/compression_spec.rb +0 -240
  790. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  791. data/spec/unit/network/http_spec.rb +0 -9
  792. data/spec/unit/network/rights_spec.rb +0 -439
  793. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  794. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +0 -20
  795. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  796. data/spec/unit/resource/capability_finder_spec.rb +0 -148
  797. data/spec/unit/rest/route_spec.rb +0 -132
  798. data/spec/unit/ssl/host_spec.rb +0 -645
  799. data/spec/unit/ssl/key_spec.rb +0 -173
  800. data/spec/unit/ssl/validator_spec.rb +0 -278
  801. data/spec/unit/status_spec.rb +0 -45
  802. data/spec/unit/util/json_spec.rb +0 -126
  803. data/spec/unit/util/ssl_spec.rb +0 -91
  804. data/spec/unit/util/windows_spec.rb +0 -23
@@ -1,645 +0,0 @@
1
- require 'spec_helper'
2
- require 'puppet/test_ca'
3
-
4
- require 'puppet/ssl/host'
5
- require 'matchers/json'
6
- require 'puppet_spec/ssl'
7
- require 'puppet/rest/routes'
8
-
9
- def base_json_comparison(result, json_hash)
10
- expect(result["fingerprint"]).to eq(json_hash["fingerprint"])
11
- expect(result["name"]).to eq(json_hash["name"])
12
- expect(result["state"]).to eq(json_hash["desired_state"])
13
- end
14
-
15
- describe Puppet::SSL::Host, if: !Puppet::Util::Platform.jruby? do
16
- include JSONMatchers
17
- include PuppetSpec::Files
18
-
19
- before do
20
- # Get a safe temporary file
21
- dir = tmpdir("ssl_host_testing")
22
- Puppet.settings[:confdir] = dir
23
- Puppet.settings[:vardir] = dir
24
- Puppet.settings.use :main, :ssl
25
-
26
- @host = Puppet::SSL::Host.new("myname")
27
- end
28
-
29
- after do
30
- # Cleaned out any cached localhost instance.
31
- Puppet::SSL::Host.reset
32
- end
33
-
34
- it "should use any provided name as its name" do
35
- expect(@host.name).to eq("myname")
36
- end
37
-
38
- it "should retrieve its public key from its private key" do
39
- realkey = double('realkey')
40
- key = double('key', :content => realkey)
41
- allow(Puppet::SSL::Key.indirection).to receive(:find).and_return(key)
42
- pubkey = double('public_key')
43
- expect(realkey).to receive(:public_key).and_return(pubkey)
44
-
45
- expect(@host.public_key).to equal(pubkey)
46
- end
47
-
48
- describe 'localhost' do
49
- before(:each) do
50
- allow_any_instance_of(Puppet::SSL::Host).to receive(:certificate).and_return(nil)
51
- allow_any_instance_of(Puppet::SSL::Host).to receive(:generate)
52
- end
53
-
54
- it "is deprecated" do
55
- Puppet::SSL::Host.localhost
56
-
57
- expect(@logs).to include(an_object_having_attributes(message: /Puppet::SSL::Host is deprecated/))
58
- end
59
-
60
- it "should allow to reset localhost" do
61
- previous_host = Puppet::SSL::Host.localhost
62
- Puppet::SSL::Host.reset
63
- expect(Puppet::SSL::Host.localhost).not_to eq(previous_host)
64
- end
65
-
66
- it "should generate the certificate for the localhost instance if no certificate is available" do
67
- host = double('host', :key => nil)
68
- expect(Puppet::SSL::Host).to receive(:new).and_return(host)
69
-
70
- expect(host).to receive(:certificate).and_return(nil)
71
- expect(host).to receive(:generate)
72
-
73
- expect(Puppet::SSL::Host.localhost).to equal(host)
74
- end
75
-
76
- it "should always read the key for the localhost instance in from disk" do
77
- host = double('host', :certificate => "eh")
78
- expect(host).to receive(:key)
79
- expect(Puppet::SSL::Host).to receive(:new).and_return(host)
80
-
81
- Puppet::SSL::Host.localhost
82
- end
83
-
84
- it "should cache the localhost instance" do
85
- host = double('host', :certificate => "eh", :key => 'foo')
86
- expect(Puppet::SSL::Host).to receive(:new).once.and_return(host)
87
- expect(Puppet::SSL::Host.localhost).to eq(Puppet::SSL::Host.localhost)
88
- end
89
- end
90
-
91
- context "with dns_alt_names" do
92
- before :each do
93
- @key = double('key content')
94
- key = double('key', :generate => true, :content => @key)
95
- allow(Puppet::SSL::Key).to receive(:new).and_return(key)
96
- allow(Puppet::SSL::Key.indirection).to receive(:save).with(key)
97
-
98
- @cr = double('certificate request', :render => "csr pem")
99
- allow(Puppet::SSL::CertificateRequest).to receive(:new).and_return(@cr)
100
- allow_any_instance_of(Puppet::SSL::Host).to receive(:submit_certificate_request)
101
- end
102
-
103
- describe "explicitly specified" do
104
- before :each do
105
- Puppet[:dns_alt_names] = 'one, two'
106
- end
107
-
108
- it "should not include subjectAltName if not the local node" do
109
- expect(@cr).to receive(:generate).with(@key, {})
110
-
111
- Puppet::SSL::Host.new('not-the-' + Puppet[:certname]).generate_certificate_request
112
- end
113
-
114
- it "should include subjectAltName if the local node" do
115
- expect(@cr).to receive(:generate).with(@key, { :dns_alt_names => 'one, two' })
116
-
117
- Puppet::SSL::Host.new(Puppet[:certname]).generate_certificate_request
118
- end
119
- end
120
- end
121
-
122
- it "should be able to verify its certificate matches its key" do
123
- expect(Puppet::SSL::Host.new("foo")).to respond_to(:validate_certificate_with_key)
124
- end
125
-
126
- it "should consider the certificate invalid if it cannot find a key" do
127
- host = Puppet::SSL::Host.new("foo")
128
- certificate = double('cert', :fingerprint => 'DEADBEEF')
129
- expect(host).to receive(:key).and_return(nil)
130
- expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, "No private key with which to validate certificate with fingerprint: DEADBEEF")
131
- end
132
-
133
- it "should consider the certificate invalid if it cannot find a certificate" do
134
- host = Puppet::SSL::Host.new("foo")
135
- expect(host).not_to receive(:key)
136
- expect { host.validate_certificate_with_key(nil) }.to raise_error(Puppet::Error, "No certificate to validate.")
137
- end
138
-
139
- it "should consider the certificate invalid if the SSL certificate's key verification fails" do
140
- host = Puppet::SSL::Host.new("foo")
141
- key = double('key', :content => "private_key")
142
- sslcert = double('sslcert')
143
- certificate = double('cert', {:content => sslcert, :fingerprint => 'DEADBEEF'})
144
- allow(host).to receive(:key).and_return(key)
145
- expect(sslcert).to receive(:check_private_key).with("private_key").and_return(false)
146
- expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /DEADBEEF/)
147
- end
148
-
149
- it "should consider the certificate valid if the SSL certificate's key verification succeeds" do
150
- host = Puppet::SSL::Host.new("foo")
151
- key = double('key', :content => "private_key")
152
- sslcert = double('sslcert')
153
- certificate = double('cert', :content => sslcert)
154
- allow(host).to receive(:key).and_return(key)
155
- expect(sslcert).to receive(:check_private_key).with("private_key").and_return(true)
156
- expect{ host.validate_certificate_with_key(certificate) }.not_to raise_error
157
- end
158
-
159
- it "should output agent-specific commands when validation fails" do
160
- host = Puppet::SSL::Host.new("foo")
161
- key = double('key', :content => "private_key")
162
- sslcert = double('sslcert')
163
- certificate = double('cert', {:content => sslcert, :fingerprint => 'DEADBEEF'})
164
- allow(host).to receive(:key).and_return(key)
165
- expect(sslcert).to receive(:check_private_key).with("private_key").and_return(false)
166
- expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /puppet ssl clean \n/)
167
- end
168
-
169
- it "should output device-specific commands when validation fails" do
170
- Puppet[:certname] = "device.example.com"
171
- host = Puppet::SSL::Host.new("device.example.com", true)
172
- key = double('key', :content => "private_key")
173
- sslcert = double('sslcert')
174
- certificate = double('cert', {:content => sslcert, :fingerprint => 'DEADBEEF'})
175
- allow(host).to receive(:key).and_return(key)
176
- expect(sslcert).to receive(:check_private_key).with("private_key").and_return(false)
177
- expect { host.validate_certificate_with_key(certificate) }.to raise_error(Puppet::Error, /puppet ssl clean --target device.example.com/)
178
- end
179
-
180
- describe "when initializing" do
181
- it "should default its name to the :certname setting" do
182
- Puppet[:certname] = "myname"
183
-
184
- expect(Puppet::SSL::Host.new.name).to eq("myname")
185
- end
186
-
187
- it "should downcase a passed in name" do
188
- expect(Puppet::SSL::Host.new("Host.Domain.Com").name).to eq("host.domain.com")
189
- end
190
- end
191
-
192
- describe "when managing its private key" do
193
- before do
194
- @realkey = "mykey"
195
- @key = Puppet::SSL::Key.new("mykey")
196
- @key.content = @realkey
197
- end
198
-
199
- it "should return nil if the key is not set and cannot be found" do
200
- expect(Puppet::SSL::Key.indirection).to receive(:find).with("myname").and_return(nil)
201
- expect(@host.key).to be_nil
202
- end
203
-
204
- it "should find the key in the Key class and return the Puppet instance" do
205
- expect(Puppet::SSL::Key.indirection).to receive(:find).with("myname").and_return(@key)
206
- expect(@host.key).to equal(@key)
207
- end
208
-
209
- it "should be able to generate and save a new key" do
210
- expect(Puppet::SSL::Key).to receive(:new).with("myname").and_return(@key)
211
-
212
- expect(@key).to receive(:generate)
213
- expect(Puppet::SSL::Key.indirection).to receive(:save)
214
-
215
- expect(@host.generate_key).to be_truthy
216
- expect(@host.key).to equal(@key)
217
- end
218
-
219
- it "should not retain keys that could not be saved" do
220
- expect(Puppet::SSL::Key).to receive(:new).with("myname").and_return(@key)
221
-
222
- expect(@key).to receive(:generate)
223
- expect(Puppet::SSL::Key.indirection).to receive(:save).and_raise("eh")
224
-
225
- expect { @host.generate_key }.to raise_error(RuntimeError)
226
- expect(@host.key).to be_nil
227
- end
228
-
229
- it "should return any previously found key without requerying" do
230
- expect(Puppet::SSL::Key.indirection).to receive(:find).with("myname").and_return(@key).once
231
- expect(@host.key).to equal(@key)
232
- expect(@host.key).to equal(@key)
233
- end
234
- end
235
-
236
- describe "when managing its certificate request" do
237
- before(:all) do
238
- @pki = PuppetSpec::SSL.create_chained_pki
239
- end
240
-
241
- before(:each) do
242
- Puppet[:requestdir] = tmpdir('requests')
243
- end
244
-
245
- let(:key) { Puppet::SSL::Key.from_s(@pki[:leaf_key].to_s, @host.name) }
246
-
247
- it "should generate a new key when generating the cert request if no key exists" do
248
- expect(@host).to receive(:key).exactly(2).times.and_return(nil, key)
249
- expect(@host).to receive(:generate_key).and_return(key)
250
-
251
- allow(@host).to receive(:submit_certificate_request)
252
-
253
- @host.generate_certificate_request
254
- expect(Puppet::FileSystem.exist?(File.join(Puppet[:requestdir], "#{@host.name}.pem"))).to be true
255
- end
256
-
257
- it "should be able to generate and save a new request using the private key" do
258
- allow(@host).to receive(:key).and_return(key)
259
- allow(@host).to receive(:submit_certificate_request)
260
-
261
- expect(@host.generate_certificate_request).to be_truthy
262
- expect(Puppet::FileSystem.exist?(File.join(Puppet[:requestdir], "#{@host.name}.pem"))).to be true
263
- end
264
-
265
- it "should send a new request to the CA for signing" do
266
- allow(@host).to receive(:ssl_store).and_return(double("ssl store"))
267
- allow(@host).to receive(:key).and_return(key)
268
- request = double("request")
269
- allow(request).to receive(:generate)
270
- expect(request).to receive(:render).and_return("my request").twice
271
- expect(Puppet::SSL::CertificateRequest).to receive(:new).and_return(request)
272
-
273
- expect(Puppet::Rest::Routes).to receive(:put_certificate_request)
274
- .with("my request", @host.name, anything)
275
- .and_return(nil)
276
-
277
- expect(@host.generate_certificate_request).to be true
278
- end
279
-
280
- it "should return any previously found request without requerying" do
281
- request = double("request")
282
- expect(@host).to receive(:load_certificate_request_from_file).and_return(request).once
283
-
284
- expect(@host.certificate_request).to equal(request)
285
- expect(@host.certificate_request).to equal(request)
286
- end
287
-
288
- it "should not keep its certificate request in memory if the request cannot be saved" do
289
- allow(@host).to receive(:key).and_return(key)
290
- allow(@host).to receive(:submit_certificate_request)
291
- expect(Puppet::Util).to receive(:replace_file).and_raise(RuntimeError)
292
-
293
- expect { @host.generate_certificate_request }.to raise_error(RuntimeError)
294
-
295
- expect(@host.instance_eval { @certificate_request }).to be_nil
296
- end
297
- end
298
-
299
- describe "when managing its certificate" do
300
- before(:all) do
301
- @pki = PuppetSpec::SSL.create_chained_pki
302
- end
303
-
304
- before(:each) do
305
- Puppet[:certdir] = tmpdir('certs')
306
- allow(@host).to receive(:key).and_return(double("key"))
307
- allow(@host).to receive(:validate_certificate_with_key)
308
- allow(@host).to receive(:ssl_store).and_return(double("ssl store"))
309
- end
310
-
311
- let(:ca_cert_response) { @pki[:ca_bundle] }
312
- let(:crl_response) { @pki[:crl_chain] }
313
- let(:host_cert_response) { @pki[:unrevoked_leaf_node_cert] }
314
-
315
- it "should find the CA certificate and save it to disk" do
316
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: ca_cert_response)
317
- stub_request(:get, %r{puppet-ca/v1/certificate_revocation_list/ca}).to_return(status: 200, body: crl_response)
318
- stub_request(:get, %r{puppet-ca/v1/certificate/#{@host.name}}).to_return(status: 404)
319
-
320
- @host.certificate
321
- actual_ca_bundle = Puppet::FileSystem.read(Puppet[:localcacert])
322
- expect(actual_ca_bundle).to match(/BEGIN CERTIFICATE.*END CERTIFICATE.*BEGIN CERTIFICATE/m)
323
- end
324
-
325
- it "should raise if it cannot find a CA certificate" do
326
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 404)
327
-
328
- expect(@host).not_to receive(:get_host_certificate)
329
-
330
- expect {
331
- @host.certificate
332
- }.to raise_error(Puppet::Error, /CA certificate is missing from the server/)
333
- end
334
-
335
- it "should find the key if it does not have one" do
336
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: ca_cert_response)
337
- stub_request(:get, %r{puppet-ca/v1/certificate_revocation_list/ca}).to_return(status: 200, body: crl_response)
338
-
339
- expect(@host).to receive(:get_host_certificate).and_return(nil)
340
- expect(@host).to receive(:key).and_return(double("key"))
341
- @host.certificate
342
- end
343
-
344
- it "should generate the key if one cannot be found" do
345
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: ca_cert_response)
346
- stub_request(:get, %r{puppet-ca/v1/certificate_revocation_list/ca}).to_return(status: 200, body: crl_response)
347
-
348
- expect(@host).to receive(:get_host_certificate).and_return(nil)
349
- expect(@host).to receive(:key).and_return(nil)
350
- expect(@host).to receive(:generate_key)
351
- @host.certificate
352
- end
353
-
354
- it "should find the host certificate, write it to file, and return the Puppet certificate instance" do
355
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: ca_cert_response)
356
- stub_request(:get, %r{puppet-ca/v1/certificate_revocation_list/ca}).to_return(status: 200, body: crl_response)
357
- stub_request(:get, %r{puppet-ca/v1/certificate/#{@host.name}}).to_return(status: 200, body: host_cert_response.to_pem)
358
-
359
- expected_cert = Puppet::SSL::Certificate.from_s(@pki[:unrevoked_leaf_node_cert])
360
- actual_cert = @host.certificate
361
- expect(actual_cert).to be_a(Puppet::SSL::Certificate)
362
- expect(actual_cert.to_s).to eq(expected_cert.to_s)
363
- host_cert_from_file = Puppet::FileSystem.read(File.join(Puppet[:certdir], "#{@host.name}.pem"))
364
- expect(host_cert_from_file).to eq(expected_cert.to_s)
365
- end
366
-
367
- it "should return any previously found certificate" do
368
- cert = double('cert')
369
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: ca_cert_response)
370
- stub_request(:get, %r{puppet-ca/v1/certificate_revocation_list/ca}).to_return(status: 200, body: crl_response)
371
- expect(@host).to receive(:get_host_certificate).and_return(cert).once
372
-
373
- expect(@host.certificate).to equal(cert)
374
- expect(@host.certificate).to equal(cert)
375
- end
376
-
377
- context 'invalid certificates' do
378
- it "should raise if the CA certificate downloaded from CA is invalid" do
379
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: 'garbage')
380
-
381
- expect { @host.certificate }.to raise_error(OpenSSL::X509::CertificateError, /Failed to parse CA certificates as PEM/)
382
- end
383
-
384
- it "should warn if the host certificate downloaded from CA is invalid" do
385
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: ca_cert_response)
386
- stub_request(:get, %r{puppet-ca/v1/certificate_revocation_list/ca}).to_return(status: 200, body: crl_response)
387
- stub_request(:get, %r{puppet-ca/v1/certificate/#{@host.name}}).to_return(status: 200, body: 'garbage')
388
-
389
- expect { @host.certificate }.to raise_error(Puppet::Error, /did not contain a valid certificate for #{@host.name}/)
390
- end
391
-
392
- it 'should warn if the CA certificate loaded from disk is invalid' do
393
- Puppet::FileSystem.open(Puppet[:localcacert], nil, "w:ASCII") do |f|
394
- f.puts 'garbage'
395
- end
396
- expect { @host.certificate }.to raise_error(OpenSSL::X509::CertificateError, /Failed to parse CA certificates as PEM/)
397
- end
398
-
399
- it 'should warn if the host certificate loaded from disk in invalid' do
400
- stub_request(:get, %r{puppet-ca/v1/certificate/ca}).to_return(status: 200, body: ca_cert_response)
401
- stub_request(:get, %r{puppet-ca/v1/certificate_revocation_list/ca}).to_return(status: 200, body: crl_response)
402
-
403
- Puppet::FileSystem.open(File.join(Puppet[:certdir], "#{@host.name}.pem"), nil, "w:ASCII") do |f|
404
- f.puts 'garbage'
405
- end
406
- expect { @host.certificate }.to raise_error(Puppet::Error, /The certificate.*invalid/)
407
- end
408
- end
409
- end
410
-
411
- it "should have a method for generating all necessary files" do
412
- expect(Puppet::SSL::Host.new("me")).to respond_to(:generate)
413
- end
414
-
415
- describe "when generating files" do
416
- before do
417
- @host = Puppet::SSL::Host.new("me")
418
- allow(@host).to receive(:generate_key)
419
- allow(@host).to receive(:generate_certificate_request)
420
- allow(@host).to receive(:certificate_request)
421
- allow(@host).to receive(:certificate)
422
- end
423
-
424
- it "should generate a key if one is not present" do
425
- allow(@host).to receive(:key).and_return nil
426
- expect(@host).to receive(:generate_key)
427
-
428
- @host.generate
429
- end
430
-
431
- it "should generate a certificate request if one is not present" do
432
- expect(@host).to receive(:certificate_request).and_return nil
433
- expect(@host).to receive(:generate_certificate_request)
434
-
435
- @host.generate
436
- end
437
- end
438
-
439
- it "should have a method for creating an SSL store" do
440
- expect(Puppet::SSL::Host.new("me")).to respond_to(:ssl_store)
441
- end
442
-
443
- describe "when creating an SSL store" do
444
- before do
445
- Puppet[:localcacert] = "ssl_host_testing"
446
- end
447
-
448
- it "should accept a purpose" do
449
- store = double('store', :add_file => nil)
450
- expect(OpenSSL::X509::Store).to receive(:new).and_return(store)
451
- expect(store).to receive(:purpose=).with(OpenSSL::X509::PURPOSE_SSL_SERVER)
452
- host = Puppet::SSL::Host.new("me")
453
- host.crl_usage = false
454
-
455
- host.ssl_store(OpenSSL::X509::PURPOSE_SSL_SERVER)
456
- end
457
-
458
- context "and the CRL is not on disk" do
459
- before do
460
- @pki = PuppetSpec::SSL.create_chained_pki
461
- @revoked_cert = @pki[:revoked_root_node_cert]
462
- localcacert = Puppet.settings[:localcacert]
463
- Puppet::Util.replace_file(localcacert, 0644) {|f| f.write @pki[:ca_bundle] }
464
- end
465
-
466
- after do
467
- Puppet::FileSystem.unlink(Puppet.settings[:localcacert])
468
- Puppet::FileSystem.unlink(Puppet.settings[:hostcrl])
469
- end
470
-
471
- it "retrieves it from the server" do
472
- expect(Puppet::Rest::Routes).to receive(:get_crls)
473
- .with(Puppet::SSL::CA_NAME, anything)
474
- .and_return(@pki[:crl_chain])
475
-
476
- @host.ssl_store
477
- expect(Puppet::FileSystem.read(Puppet.settings[:hostcrl], :encoding => Encoding::UTF_8)).to eq(@pki[:crl_chain])
478
- end
479
- end
480
-
481
- describe "and a CRL is available" do
482
- before do
483
- pki = PuppetSpec::SSL.create_chained_pki
484
-
485
- @revoked_cert_from_self_signed_root = pki[:revoked_root_node_cert]
486
- @revoked_cert_from_ca_with_untrusted_chain = pki[:revoked_leaf_node_cert]
487
- @unrevoked_cert_from_self_signed_root = pki[:unrevoked_root_node_cert]
488
- @unrevoked_cert_from_revoked_ca = pki[:unrevoked_int_node_cert]
489
- @unrevoked_cert_from_ca_with_untrusted_chain = pki[:unrevoked_leaf_node_cert]
490
-
491
- localcacert = Puppet.settings[:localcacert]
492
- hostcrl = Puppet.settings[:hostcrl]
493
-
494
- Puppet::Util.replace_file(localcacert, 0644) {|f| f.write pki[:ca_bundle] }
495
- Puppet::Util.replace_file(hostcrl, 0644) {|f| f.write pki[:crl_chain] }
496
- end
497
-
498
- after do
499
- Puppet::FileSystem.unlink(Puppet.settings[:localcacert])
500
- Puppet::FileSystem.unlink(Puppet.settings[:hostcrl])
501
- end
502
-
503
- [true, :chain].each do |crl_setting|
504
- describe "and 'certificate_revocation' is #{crl_setting}" do
505
- before do
506
- @host = Puppet::SSL::Host.new(crl_setting.to_s)
507
- @host.crl_usage = crl_setting
508
- end
509
-
510
- it "should verify unrevoked certs" do
511
- expect(
512
- @host.ssl_store.verify(@unrevoked_cert_from_self_signed_root)
513
- ).to be true
514
- end
515
-
516
- it "should not verify revoked certs" do
517
- [@revoked_cert_from_self_signed_root,
518
- @revoked_cert_from_ca_with_untrusted_chain,
519
- @unrevoked_cert_from_revoked_ca,
520
- @unrevoked_cert_from_ca_with_untrusted_chain].each do |cert|
521
- expect(@host.ssl_store.verify(cert)).to be false
522
- end
523
- end
524
- end
525
- end
526
-
527
- describe "and 'certificate_revocation' is leaf" do
528
- before do
529
- @host = Puppet::SSL::Host.new("leaf")
530
- @host.crl_usage = :leaf
531
- end
532
-
533
- it "should verify unrevoked certs regardless of signing CA's revocation status" do
534
- [@unrevoked_cert_from_self_signed_root,
535
- @unrevoked_cert_from_revoked_ca,
536
- @unrevoked_cert_from_ca_with_untrusted_chain].each do |cert|
537
- expect(@host.ssl_store.verify(cert)).to be true
538
- end
539
- end
540
-
541
- it "should not verify certs revoked by their signing CA" do
542
- [@revoked_cert_from_self_signed_root,
543
- @revoked_cert_from_ca_with_untrusted_chain].each do |cert|
544
- expect(@host.ssl_store.verify(cert)).to be false
545
- end
546
- end
547
- end
548
-
549
- describe "and 'certificate_revocation' is false" do
550
- before do
551
- @host = Puppet::SSL::Host.new("host")
552
- @host.crl_usage = false
553
- end
554
-
555
- it "should verify valid certs regardless of revocation status" do
556
- [@revoked_cert_from_self_signed_root,
557
- @revoked_cert_from_ca_with_untrusted_chain,
558
- @unrevoked_cert_from_self_signed_root,
559
- @unrevoked_cert_from_revoked_ca,
560
- @unrevoked_cert_from_ca_with_untrusted_chain].each do |cert|
561
- expect(@host.ssl_store.verify(cert)).to be true
562
- end
563
- end
564
- end
565
- end
566
- end
567
-
568
- describe "when waiting for a cert" do
569
- before do
570
- @host = Puppet::SSL::Host.new("me")
571
- end
572
-
573
- it "should generate its certificate request and attempt to read the certificate again if no certificate is found" do
574
- expect(@host).to receive(:certificate).twice.and_return(nil, "foo")
575
- expect(@host).to receive(:generate)
576
- @host.wait_for_cert(1)
577
- end
578
-
579
- it "should catch and log errors during CSR saving" do
580
- expect(@host).to receive(:certificate).twice.and_return(nil, "foo")
581
- times_generate_called = 0
582
- expect(@host).to receive(:generate) do
583
- times_generate_called += 1
584
- raise RuntimeError if times_generate_called == 1
585
- nil
586
- end
587
- allow(@host).to receive(:sleep)
588
- @host.wait_for_cert(1)
589
- end
590
-
591
- it "should sleep and retry after failures saving the CSR if waitforcert is enabled" do
592
- expect(@host).to receive(:certificate).twice.and_return(nil, "foo")
593
- times_generate_called = 0
594
- expect(@host).to receive(:generate) do
595
- times_generate_called += 1
596
- raise RuntimeError if times_generate_called == 1
597
- nil
598
- end
599
- expect(@host).to receive(:sleep).with(1)
600
- @host.wait_for_cert(1)
601
- end
602
-
603
- it "should exit after failures saving the CSR of waitforcert is disabled" do
604
- expect(@host).to receive(:certificate).and_return(nil)
605
- expect(@host).to receive(:generate).and_raise(RuntimeError)
606
- expect(@host).to receive(:puts)
607
- expect { @host.wait_for_cert(0) }.to exit_with 1
608
- end
609
-
610
- it "should exit if the wait time is 0 and it can neither find nor retrieve a certificate" do
611
- allow(@host).to receive(:certificate).and_return(nil)
612
- expect(@host).to receive(:generate)
613
- expect(@host).to receive(:puts)
614
- expect { @host.wait_for_cert(0) }.to exit_with 1
615
- end
616
-
617
- it "should sleep for the specified amount of time if no certificate is found after generating its certificate request" do
618
- expect(@host).to receive(:certificate).exactly(3).times().and_return(nil, nil, "foo")
619
- expect(@host).to receive(:generate)
620
-
621
- expect(@host).to receive(:sleep).with(1)
622
-
623
- @host.wait_for_cert(1)
624
- end
625
-
626
- it "should catch and log exceptions during certificate retrieval" do
627
- times_certificate_called = 0
628
- expect(@host).to receive(:certificate) do
629
- times_certificate_called += 1
630
- if times_certificate_called == 1
631
- return nil
632
- elsif times_certificate_called == 2
633
- raise RuntimeError
634
- end
635
- "foo"
636
- end.exactly(3).times()
637
- allow(@host).to receive(:generate)
638
- allow(@host).to receive(:sleep)
639
-
640
- expect(Puppet).to receive(:log_exception).at_least(:once)
641
-
642
- @host.wait_for_cert(1)
643
- end
644
- end
645
- end