puppet 6.11.1-x64-mingw32 → 6.16.0-x64-mingw32

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 (395) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +3 -8
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +1 -0
  5. data/Gemfile.lock +39 -36
  6. data/README.md +17 -24
  7. data/ext/build_defaults.yaml +1 -0
  8. data/ext/project_data.yaml +1 -1
  9. data/ext/windows/service/daemon.rb +25 -20
  10. data/lib/puppet.rb +52 -13
  11. data/lib/puppet/agent.rb +20 -14
  12. data/lib/puppet/application/agent.rb +12 -14
  13. data/lib/puppet/application/describe.rb +7 -5
  14. data/lib/puppet/application/device.rb +2 -2
  15. data/lib/puppet/application/filebucket.rb +19 -15
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/resource.rb +1 -1
  18. data/lib/puppet/application/ssl.rb +4 -4
  19. data/lib/puppet/concurrent.rb +2 -0
  20. data/lib/puppet/concurrent/lock.rb +16 -0
  21. data/lib/puppet/concurrent/synchronized.rb +15 -0
  22. data/lib/puppet/concurrent/thread_local_singleton.rb +14 -0
  23. data/lib/puppet/configurer.rb +85 -83
  24. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  25. data/lib/puppet/context/trusted_information.rb +14 -8
  26. data/lib/puppet/daemon.rb +13 -27
  27. data/lib/puppet/defaults.rb +158 -40
  28. data/lib/puppet/environments.rb +30 -20
  29. data/lib/puppet/error.rb +9 -1
  30. data/lib/puppet/face/facts.rb +8 -5
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/plugin.rb +2 -2
  34. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  35. data/lib/puppet/file_system/file_impl.rb +13 -9
  36. data/lib/puppet/file_system/memory_file.rb +6 -0
  37. data/lib/puppet/file_system/memory_impl.rb +13 -0
  38. data/lib/puppet/file_system/uniquefile.rb +4 -0
  39. data/lib/puppet/file_system/windows.rb +7 -10
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/forge/errors.rb +2 -2
  42. data/lib/puppet/forge/repository.rb +31 -86
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/camelcase.rb +2 -2
  45. data/lib/puppet/functions/epp.rb +4 -4
  46. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  47. data/lib/puppet/functions/filter.rb +1 -0
  48. data/lib/puppet/functions/find_file.rb +9 -9
  49. data/lib/puppet/functions/find_template.rb +63 -0
  50. data/lib/puppet/functions/inline_epp.rb +5 -5
  51. data/lib/puppet/functions/reduce.rb +2 -4
  52. data/lib/puppet/http.rb +7 -0
  53. data/lib/puppet/http/client.rb +341 -54
  54. data/lib/puppet/http/errors.rb +2 -0
  55. data/lib/puppet/http/external_client.rb +90 -0
  56. data/lib/puppet/http/redirector.rb +34 -0
  57. data/lib/puppet/http/resolver.rb +57 -1
  58. data/lib/puppet/http/resolver/server_list.rb +98 -0
  59. data/lib/puppet/http/resolver/settings.rb +23 -2
  60. data/lib/puppet/http/resolver/srv.rb +36 -4
  61. data/lib/puppet/http/response.rb +68 -1
  62. data/lib/puppet/http/retry_after_handler.rb +39 -0
  63. data/lib/puppet/http/service.rb +179 -3
  64. data/lib/puppet/http/service/ca.rb +84 -21
  65. data/lib/puppet/http/service/compiler.rb +319 -0
  66. data/lib/puppet/http/service/file_server.rb +206 -0
  67. data/lib/puppet/http/service/report.rb +66 -0
  68. data/lib/puppet/http/session.rb +106 -31
  69. data/lib/puppet/indirector/catalog/compiler.rb +10 -0
  70. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  71. data/lib/puppet/indirector/facts/rest.rb +42 -0
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  73. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  74. data/lib/puppet/indirector/file_content/http.rb +5 -0
  75. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  76. data/lib/puppet/indirector/file_metadata/http.rb +4 -4
  77. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  78. data/lib/puppet/indirector/json.rb +1 -1
  79. data/lib/puppet/indirector/msgpack.rb +1 -1
  80. data/lib/puppet/indirector/node/rest.rb +24 -0
  81. data/lib/puppet/indirector/report/rest.rb +19 -0
  82. data/lib/puppet/indirector/report/yaml.rb +23 -0
  83. data/lib/puppet/indirector/rest.rb +12 -0
  84. data/lib/puppet/indirector/status/rest.rb +18 -0
  85. data/lib/puppet/loaders.rb +6 -0
  86. data/lib/puppet/metatype/manager.rb +80 -80
  87. data/lib/puppet/network/http/base_pool.rb +19 -1
  88. data/lib/puppet/network/http/compression.rb +7 -0
  89. data/lib/puppet/network/http/connection.rb +6 -0
  90. data/lib/puppet/network/http/connection_adapter.rb +182 -0
  91. data/lib/puppet/network/http/nocache_pool.rb +2 -0
  92. data/lib/puppet/network/http/pool.rb +13 -6
  93. data/lib/puppet/network/http_pool.rb +2 -1
  94. data/lib/puppet/node/environment.rb +24 -8
  95. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  96. data/lib/puppet/pal/pal_impl.rb +9 -29
  97. data/lib/puppet/parser/ast/pops_bridge.rb +6 -11
  98. data/lib/puppet/parser/compiler.rb +42 -32
  99. data/lib/puppet/parser/functions.rb +18 -13
  100. data/lib/puppet/parser/functions/epp.rb +3 -3
  101. data/lib/puppet/parser/functions/filter.rb +1 -0
  102. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  103. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  105. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  106. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
  107. data/lib/puppet/pops/loaders.rb +7 -5
  108. data/lib/puppet/pops/lookup/invocation.rb +10 -3
  109. data/lib/puppet/pops/model/pn_transformer.rb +5 -9
  110. data/lib/puppet/pops/parser/evaluating_parser.rb +8 -11
  111. data/lib/puppet/pops/serialization/json_path.rb +3 -3
  112. data/lib/puppet/pops/time/timespan.rb +3 -5
  113. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
  114. data/lib/puppet/pops/types/string_converter.rb +6 -9
  115. data/lib/puppet/pops/types/type_calculator.rb +30 -10
  116. data/lib/puppet/pops/types/type_formatter.rb +9 -11
  117. data/lib/puppet/pops/types/type_parser.rb +3 -3
  118. data/lib/puppet/pops/validation/checker4_0.rb +1 -1
  119. data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
  120. data/lib/puppet/provider/aix_object.rb +4 -2
  121. data/lib/puppet/provider/group/aix.rb +1 -0
  122. data/lib/puppet/provider/group/groupadd.rb +57 -24
  123. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +78 -4
  126. data/lib/puppet/provider/package/dnfmodule.rb +69 -15
  127. data/lib/puppet/provider/package/dpkg.rb +14 -7
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +41 -7
  130. data/lib/puppet/provider/package/openbsd.rb +13 -1
  131. data/lib/puppet/provider/package/pacman.rb +2 -5
  132. data/lib/puppet/provider/package/pip.rb +143 -48
  133. data/lib/puppet/provider/package/pip3.rb +0 -2
  134. data/lib/puppet/provider/package/pkg.rb +18 -5
  135. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  136. data/lib/puppet/provider/package/pkgng.rb +16 -4
  137. data/lib/puppet/provider/package/portage.rb +5 -5
  138. data/lib/puppet/provider/package/puppet_gem.rb +6 -2
  139. data/lib/puppet/provider/package/rpm.rb +6 -213
  140. data/lib/puppet/provider/package/yum.rb +108 -24
  141. data/lib/puppet/provider/package/zypper.rb +59 -1
  142. data/lib/puppet/provider/package_targetable.rb +5 -4
  143. data/lib/puppet/provider/service/systemd.rb +23 -5
  144. data/lib/puppet/provider/user/aix.rb +1 -0
  145. data/lib/puppet/provider/user/directoryservice.rb +30 -5
  146. data/lib/puppet/provider/user/hpux.rb +1 -1
  147. data/lib/puppet/provider/user/useradd.rb +11 -8
  148. data/lib/puppet/reports/http.rb +13 -9
  149. data/lib/puppet/reports/store.rb +1 -1
  150. data/lib/puppet/resource/type_collection.rb +20 -16
  151. data/lib/puppet/runtime.rb +32 -1
  152. data/lib/puppet/settings.rb +4 -0
  153. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  154. data/lib/puppet/ssl.rb +1 -0
  155. data/lib/puppet/ssl/certificate.rb +2 -1
  156. data/lib/puppet/ssl/host.rb +4 -4
  157. data/lib/puppet/ssl/oids.rb +1 -0
  158. data/lib/puppet/ssl/ssl_provider.rb +20 -0
  159. data/lib/puppet/ssl/state_machine.rb +81 -35
  160. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  161. data/lib/puppet/test/test_helper.rb +7 -1
  162. data/lib/puppet/transaction.rb +33 -11
  163. data/lib/puppet/transaction/report.rb +2 -2
  164. data/lib/puppet/transaction/resource_harness.rb +1 -1
  165. data/lib/puppet/type.rb +7 -2
  166. data/lib/puppet/type/file.rb +13 -0
  167. data/lib/puppet/type/file/data_sync.rb +5 -1
  168. data/lib/puppet/type/file/source.rb +49 -58
  169. data/lib/puppet/type/group.rb +5 -4
  170. data/lib/puppet/type/package.rb +102 -10
  171. data/lib/puppet/type/service.rb +6 -8
  172. data/lib/puppet/type/user.rb +6 -30
  173. data/lib/puppet/util.rb +34 -11
  174. data/lib/puppet/util/at_fork.rb +1 -1
  175. data/lib/puppet/util/autoload.rb +4 -18
  176. data/lib/puppet/util/instance_loader.rb +14 -10
  177. data/lib/puppet/util/log/destinations.rb +2 -11
  178. data/lib/puppet/util/logging.rb +30 -18
  179. data/lib/puppet/util/package/version/debian.rb +175 -0
  180. data/lib/puppet/util/package/version/gem.rb +15 -0
  181. data/lib/puppet/util/package/version/pip.rb +167 -0
  182. data/lib/puppet/util/package/version/range.rb +53 -0
  183. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  184. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  185. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  186. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  187. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  188. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  189. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  190. data/lib/puppet/util/package/version/rpm.rb +73 -0
  191. data/lib/puppet/util/pidlock.rb +36 -10
  192. data/lib/puppet/util/platform.rb +5 -0
  193. data/lib/puppet/util/plist.rb +6 -0
  194. data/lib/puppet/util/rpm_compare.rb +193 -0
  195. data/lib/puppet/util/storage.rb +0 -1
  196. data/lib/puppet/util/windows/adsi.rb +50 -20
  197. data/lib/puppet/util/windows/process.rb +15 -14
  198. data/lib/puppet/util/windows/security.rb +1 -0
  199. data/lib/puppet/util/windows/sid.rb +3 -3
  200. data/lib/puppet/util/yaml.rb +1 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509/cert_provider.rb +9 -5
  203. data/locales/puppet.pot +640 -521
  204. data/man/man5/puppet.conf.5 +88 -9
  205. data/man/man8/puppet-agent.8 +6 -6
  206. data/man/man8/puppet-apply.8 +1 -1
  207. data/man/man8/puppet-catalog.8 +1 -1
  208. data/man/man8/puppet-config.8 +1 -1
  209. data/man/man8/puppet-describe.8 +1 -1
  210. data/man/man8/puppet-device.8 +2 -2
  211. data/man/man8/puppet-doc.8 +1 -1
  212. data/man/man8/puppet-epp.8 +1 -1
  213. data/man/man8/puppet-facts.8 +1 -1
  214. data/man/man8/puppet-filebucket.8 +17 -2
  215. data/man/man8/puppet-generate.8 +1 -1
  216. data/man/man8/puppet-help.8 +6 -3
  217. data/man/man8/puppet-key.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-man.8 +1 -1
  220. data/man/man8/puppet-module.8 +4 -1
  221. data/man/man8/puppet-node.8 +1 -1
  222. data/man/man8/puppet-parser.8 +1 -1
  223. data/man/man8/puppet-plugin.8 +1 -1
  224. data/man/man8/puppet-report.8 +1 -1
  225. data/man/man8/puppet-resource.8 +1 -1
  226. data/man/man8/puppet-script.8 +1 -1
  227. data/man/man8/puppet-ssl.8 +2 -2
  228. data/man/man8/puppet-status.8 +1 -1
  229. data/man/man8/puppet.8 +2 -2
  230. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  231. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  232. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  233. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  234. data/spec/fixtures/unit/forge/bacula.json +76 -0
  235. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  236. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  237. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  238. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  239. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  240. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
  241. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -106
  242. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
  243. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
  244. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
  245. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
  246. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -102
  247. data/spec/integration/application/agent_spec.rb +394 -0
  248. data/spec/integration/application/apply_spec.rb +132 -3
  249. data/spec/integration/application/filebucket_spec.rb +190 -0
  250. data/spec/integration/application/plugin_spec.rb +73 -0
  251. data/spec/integration/configurer_spec.rb +26 -7
  252. data/spec/integration/http/client_spec.rb +154 -0
  253. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  254. data/spec/integration/indirector/report/yaml.rb +83 -0
  255. data/spec/integration/module_tool/forge_spec.rb +51 -0
  256. data/spec/integration/network/http_pool_spec.rb +76 -20
  257. data/spec/integration/node/environment_spec.rb +15 -0
  258. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  259. data/spec/lib/puppet/test_ca.rb +2 -2
  260. data/spec/lib/puppet_spec/https.rb +20 -9
  261. data/spec/lib/puppet_spec/puppetserver.rb +119 -0
  262. data/spec/shared_contexts/https.rb +29 -0
  263. data/spec/spec_helper.rb +6 -2
  264. data/spec/unit/agent_spec.rb +80 -26
  265. data/spec/unit/application/agent_spec.rb +9 -5
  266. data/spec/unit/application/apply_spec.rb +2 -12
  267. data/spec/unit/application/describe_spec.rb +88 -50
  268. data/spec/unit/application/device_spec.rb +2 -2
  269. data/spec/unit/application/filebucket_spec.rb +22 -2
  270. data/spec/unit/application/resource_spec.rb +2 -2
  271. data/spec/unit/concurrent/lock_spec.rb +29 -0
  272. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  273. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  274. data/spec/unit/configurer_spec.rb +400 -406
  275. data/spec/unit/context/trusted_information_spec.rb +17 -0
  276. data/spec/unit/daemon_spec.rb +5 -64
  277. data/spec/unit/defaults_spec.rb +38 -4
  278. data/spec/unit/environments_spec.rb +65 -28
  279. data/spec/unit/face/facts_spec.rb +24 -20
  280. data/spec/unit/face/module/search_spec.rb +17 -0
  281. data/spec/unit/face/plugin_spec.rb +12 -10
  282. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  283. data/spec/unit/file_system_spec.rb +26 -2
  284. data/spec/unit/forge/errors_spec.rb +1 -1
  285. data/spec/unit/forge/forge_spec.rb +12 -54
  286. data/spec/unit/forge/module_release_spec.rb +19 -6
  287. data/spec/unit/forge/repository_spec.rb +63 -157
  288. data/spec/unit/forge_spec.rb +46 -116
  289. data/spec/unit/functions/find_template_spec.rb +69 -0
  290. data/spec/unit/functions/lookup_spec.rb +13 -0
  291. data/spec/unit/http/client_spec.rb +395 -27
  292. data/spec/unit/http/external_client_spec.rb +201 -0
  293. data/spec/unit/http/resolver_spec.rb +81 -12
  294. data/spec/unit/http/response_spec.rb +69 -0
  295. data/spec/unit/http/service/ca_spec.rb +100 -7
  296. data/spec/unit/http/service/compiler_spec.rb +627 -0
  297. data/spec/unit/http/service/file_server_spec.rb +308 -0
  298. data/spec/unit/http/service/report_spec.rb +118 -0
  299. data/spec/unit/http/service_spec.rb +117 -4
  300. data/spec/unit/http/session_spec.rb +237 -19
  301. data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
  302. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  303. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  304. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  305. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  306. data/spec/unit/indirector/file_metadata/http_spec.rb +167 -0
  307. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  308. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  309. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  310. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  311. data/spec/unit/indirector/rest_spec.rb +13 -0
  312. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  313. data/spec/unit/network/http/connection_spec.rb +549 -176
  314. data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
  315. data/spec/unit/network/http/pool_spec.rb +89 -11
  316. data/spec/unit/network/http_pool_spec.rb +63 -57
  317. data/spec/unit/network/http_spec.rb +1 -1
  318. data/spec/unit/node/environment_spec.rb +16 -0
  319. data/spec/unit/node/facts_spec.rb +2 -1
  320. data/spec/unit/node_spec.rb +7 -4
  321. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  322. data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
  323. data/spec/unit/pops/validator/validator_spec.rb +7 -2
  324. data/spec/unit/provider/aix_object_spec.rb +16 -2
  325. data/spec/unit/provider/group/groupadd_spec.rb +181 -56
  326. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  327. data/spec/unit/provider/package/aix_spec.rb +29 -0
  328. data/spec/unit/provider/package/apt_spec.rb +43 -2
  329. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  330. data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
  331. data/spec/unit/provider/package/dpkg_spec.rb +28 -6
  332. data/spec/unit/provider/package/gem_spec.rb +40 -0
  333. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  334. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  335. data/spec/unit/provider/package/pip_spec.rb +68 -19
  336. data/spec/unit/provider/package/pkg_spec.rb +15 -1
  337. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  338. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  339. data/spec/unit/provider/package/portage_spec.rb +9 -4
  340. data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
  341. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  342. data/spec/unit/provider/package/yum_spec.rb +292 -0
  343. data/spec/unit/provider/package/zypper_spec.rb +84 -0
  344. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  345. data/spec/unit/provider/service/init_spec.rb +1 -0
  346. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  347. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  348. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  349. data/spec/unit/provider/service/systemd_spec.rb +92 -12
  350. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  351. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  352. data/spec/unit/provider/user/useradd_spec.rb +21 -8
  353. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  354. data/spec/unit/puppet_pal_2pec.rb +0 -26
  355. data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
  356. data/spec/unit/puppet_spec.rb +47 -0
  357. data/spec/unit/reports/http_spec.rb +70 -52
  358. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  359. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  360. data/spec/unit/ssl/certificate_spec.rb +7 -0
  361. data/spec/unit/ssl/host_spec.rb +4 -2
  362. data/spec/unit/ssl/oids_spec.rb +1 -0
  363. data/spec/unit/ssl/ssl_provider_spec.rb +71 -0
  364. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  365. data/spec/unit/transaction/persistence_spec.rb +1 -10
  366. data/spec/unit/transaction/report_spec.rb +4 -0
  367. data/spec/unit/transaction_spec.rb +45 -1
  368. data/spec/unit/type/file/content_spec.rb +9 -3
  369. data/spec/unit/type/file/ensure_spec.rb +1 -2
  370. data/spec/unit/type/file/source_spec.rb +86 -35
  371. data/spec/unit/type/package_spec.rb +8 -0
  372. data/spec/unit/type/service_spec.rb +9 -8
  373. data/spec/unit/type/user_spec.rb +1 -2
  374. data/spec/unit/util/at_fork_spec.rb +3 -2
  375. data/spec/unit/util/autoload_spec.rb +2 -1
  376. data/spec/unit/util/log/destinations_spec.rb +1 -29
  377. data/spec/unit/util/log_spec.rb +0 -138
  378. data/spec/unit/util/logging_spec.rb +200 -0
  379. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  380. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  381. data/spec/unit/util/package/version/range_spec.rb +175 -0
  382. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  383. data/spec/unit/util/pidlock_spec.rb +112 -42
  384. data/spec/unit/util/plist_spec.rb +20 -0
  385. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  386. data/spec/unit/util/storage_spec.rb +1 -8
  387. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  388. data/spec/unit/util/windows/sid_spec.rb +2 -2
  389. data/spec/unit/x509/cert_provider_spec.rb +24 -4
  390. data/tasks/generate_cert_fixtures.rake +15 -1
  391. data/tasks/manpages.rake +6 -35
  392. metadata +92 -12
  393. data/COMMITTERS.md +0 -244
  394. data/spec/integration/faces/plugin_spec.rb +0 -61
  395. data/spec/lib/puppet_spec/validators.rb +0 -37
@@ -1,3 +1,5 @@
1
+ require 'puppet/concurrent/synchronized'
2
+
1
3
  # @api private
2
4
  module Puppet::Environments
3
5
 
@@ -184,6 +186,13 @@ module Puppet::Environments
184
186
  end
185
187
  end
186
188
 
189
+ def self.real_path(dir)
190
+ if Puppet::FileSystem.symlink?(dir) && Puppet[:versioned_environment_dirs]
191
+ dir = Puppet::FileSystem.expand_path(Puppet::FileSystem.readlink(dir))
192
+ end
193
+ return dir
194
+ end
195
+
187
196
  # @!macro loader_search_paths
188
197
  def search_paths
189
198
  ["file://#{@environment_dir}"]
@@ -191,27 +200,26 @@ module Puppet::Environments
191
200
 
192
201
  # @!macro loader_list
193
202
  def list
194
- valid_directories.collect do |envdir|
195
- name = Puppet::FileSystem.basename_string(envdir).intern
196
-
203
+ valid_environment_names.collect do |name|
197
204
  create_environment(name)
198
205
  end
199
206
  end
200
207
 
201
208
  # @!macro loader_get
202
209
  def get(name)
203
- if valid_directory?(File.join(@environment_dir, name.to_s))
210
+ if validated_directory(File.join(@environment_dir, name.to_s))
204
211
  create_environment(name)
205
212
  end
206
213
  end
207
214
 
208
215
  # @!macro loader_get_conf
209
216
  def get_conf(name)
210
- envdir = File.join(@environment_dir, name.to_s)
211
- if valid_directory?(envdir)
212
- return Puppet::Settings::EnvironmentConf.load_from(envdir, @global_module_path)
217
+ envdir = validated_directory(File.join(@environment_dir, name.to_s))
218
+ if envdir
219
+ Puppet::Settings::EnvironmentConf.load_from(envdir, @global_module_path)
220
+ else
221
+ nil
213
222
  end
214
- nil
215
223
  end
216
224
 
217
225
  private
@@ -228,21 +236,22 @@ module Puppet::Environments
228
236
  env
229
237
  end
230
238
 
231
- def valid_directory?(envdir)
232
- name = Puppet::FileSystem.basename_string(envdir)
233
- Puppet::FileSystem.directory?(envdir) &&
234
- Puppet::Node::Environment.valid_name?(name)
235
- end
236
-
237
- def valid_directories
238
- if Puppet::FileSystem.directory?(@environment_dir)
239
- Puppet::FileSystem.children(@environment_dir).select do |child|
240
- valid_directory?(child)
241
- end
239
+ def validated_directory(envdir)
240
+ env_name = Puppet::FileSystem.basename_string(envdir)
241
+ envdir = Puppet::Environments::Directories.real_path(envdir)
242
+ if Puppet::FileSystem.directory?(envdir) && Puppet::Node::Environment.valid_name?(env_name)
243
+ envdir
242
244
  else
243
- []
245
+ nil
244
246
  end
245
247
  end
248
+
249
+ def valid_environment_names
250
+ return [] unless Puppet::FileSystem.directory?(@environment_dir)
251
+ Puppet::FileSystem.children(@environment_dir).map do |child|
252
+ Puppet::FileSystem.basename_string(child).intern if validated_directory(child)
253
+ end.compact
254
+ end
246
255
  end
247
256
 
248
257
  # Combine together multiple loaders to act as one.
@@ -293,6 +302,7 @@ module Puppet::Environments
293
302
 
294
303
  class Cached
295
304
  include EnvironmentLoader
305
+ include Puppet::Concurrent::Synchronized
296
306
 
297
307
  class DefaultCacheExpirationService
298
308
  def created(env)
@@ -12,7 +12,7 @@ module Puppet
12
12
  # This module implements logging with a filename and line number. Use this
13
13
  # for errors that need to report a location in a non-ruby file that we
14
14
  # parse.
15
- attr_accessor :line, :file, :pos
15
+ attr_accessor :line, :file, :pos, :puppetstack
16
16
 
17
17
  # May be called with 3 arguments for message, file, line, and exception, or
18
18
  # 4 args including the position on the line.
@@ -22,10 +22,18 @@ module Puppet
22
22
  original = pos
23
23
  pos = nil
24
24
  end
25
+
25
26
  super(message, original)
27
+
26
28
  @file = file unless (file.is_a?(String) && file.empty?)
27
29
  @line = line
28
30
  @pos = pos
31
+
32
+ if original && original.respond_to?(:puppetstack)
33
+ @puppetstack = original.puppetstack
34
+ else
35
+ @puppetstack = Puppet::Pops::PuppetStack.stacktrace()
36
+ end
29
37
  end
30
38
 
31
39
  def to_s
@@ -75,13 +75,16 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
75
75
  facts.name = Puppet[:node_name_value]
76
76
  end
77
77
 
78
- Puppet::Node::Facts.indirection.terminus_class = :rest
79
- server = Puppet::Node::Facts::Rest.server
80
- Puppet.notice(_("Uploading facts for '%{node}' to: '%{server}'") % {
78
+ client = Puppet.runtime[:http]
79
+ session = client.create_session
80
+ puppet = session.route_to(:puppet)
81
+
82
+ Puppet.notice(_("Uploading facts for '%{node}' to '%{server}'") % {
81
83
  node: Puppet[:node_name_value],
82
- server: server})
84
+ server: puppet.url.hostname})
83
85
 
84
- Puppet::Node::Facts.indirection.save(facts, nil, :environment => Puppet.lookup(:current_environment))
86
+ puppet.put_facts(Puppet[:node_name_value], facts: facts, environment: Puppet.lookup(:current_environment).name.to_s)
87
+ nil
85
88
  end
86
89
  end
87
90
  end
@@ -24,12 +24,19 @@ Puppet::Face.define(:help, '0.0.1') do
24
24
  summary _("The version of the subcommand for which to show help.")
25
25
  end
26
26
 
27
+ option "--ronn" do
28
+ summary _("Whether to render the help text in ronn format.")
29
+ default_to { false }
30
+ end
31
+
27
32
  default
28
33
  when_invoked do |*args|
29
34
  options = args.pop
30
35
 
31
- if default_case?(args) || help_for_help?(args)
32
- return erb('global.erb').result(binding)
36
+ unless options[:ronn]
37
+ if default_case?(args) || help_for_help?(args)
38
+ return erb('global.erb').result(binding)
39
+ end
33
40
  end
34
41
 
35
42
  if args.length > 2
@@ -54,9 +61,20 @@ Puppet::Face.define(:help, '0.0.1') do
54
61
  if actionname
55
62
  raise ArgumentError, _("The legacy subcommand '%{sub_command}' does not support supplying an action") % { sub_command: facename }
56
63
  end
64
+ # legacy apps already emit ronn output
57
65
  return render_application_help(facename)
58
66
  else
59
- return render_face_help(facename, actionname, version)
67
+ if options[:ronn]
68
+ # Calling `puppet help <app> --ronn` normally calls this action with
69
+ # <app> as the first argument in the `args` array. However, if <app>
70
+ # happens to match the name of an action, like `puppet help help
71
+ # --ronn`, then face_base "eats" the argument and `args` will be
72
+ # empty. Rather than force users to type `puppet help help help
73
+ # --ronn`, default the facename to `:help`
74
+ render_face_man(facename || :help)
75
+ else
76
+ render_face_help(facename, actionname, version)
77
+ end
60
78
  end
61
79
  end
62
80
  end
@@ -69,6 +87,14 @@ Puppet::Face.define(:help, '0.0.1') do
69
87
  args.length == 1 && args.first == 'help'
70
88
  end
71
89
 
90
+ def render_face_man(facename)
91
+ # set 'face' as it's used in the erb processing.
92
+ face = Puppet::Face[facename.to_sym, :current]
93
+ # avoid unused variable warning
94
+ _face = face
95
+ erb('man.erb').result(binding)
96
+ end
97
+
72
98
  def render_application_help(applicationname)
73
99
  return Puppet::Application[applicationname].help
74
100
  rescue StandardError, LoadError => detail
@@ -5,6 +5,8 @@ Puppet::Face.define(:module, '1.0.0') do
5
5
  action(:search) do
6
6
  summary _("Search the Puppet Forge for a module.")
7
7
  description <<-EOT
8
+ This action has been deprecated. Please use the Puppet Forge to search for modules.
9
+
8
10
  Searches a repository for modules whose names, descriptions, or keywords
9
11
  match the provided search term.
10
12
  EOT
@@ -22,6 +24,7 @@ Puppet::Face.define(:module, '1.0.0') do
22
24
  arguments _("<search_term>")
23
25
 
24
26
  when_invoked do |term, options|
27
+ Puppet.deprecation_warning(_("This action has been deprecated. Please use the Puppet Forge to search for modules."))
25
28
  Puppet::ModuleTool.set_option_defaults options
26
29
  Puppet::ModuleTool::Applications::Searcher.new(term, Puppet::Forge.new(options[:module_repository] || Puppet[:module_repository]), options).run
27
30
  end
@@ -94,5 +97,7 @@ Puppet::Face.define(:module, '1.0.0') do
94
97
  highlight[format % [ name.sub('/', '-'), desc, "@#{author}", [keywords].flatten.join(' ') ]]
95
98
  end.join
96
99
  end
100
+
101
+ deprecate
97
102
  end
98
103
  end
@@ -41,10 +41,10 @@ Puppet::Face.define(:plugin, '0.0.1') do
41
41
  when_invoked do |options|
42
42
  remote_environment_for_plugins = Puppet::Node::Environment.remote(Puppet[:environment])
43
43
 
44
- pool = Puppet::Network::HTTP::Pool.new(Puppet[:http_keepalive_timeout])
44
+ pool = Puppet.runtime[:http].pool
45
45
  Puppet.override(:http_pool => pool) do
46
46
  begin
47
- handler = Puppet::Configurer::PluginHandler.new()
47
+ handler = Puppet::Configurer::PluginHandler.new
48
48
  handler.download_plugins(remote_environment_for_plugins)
49
49
  ensure
50
50
  pool.close
@@ -18,7 +18,7 @@ class Puppet::FileServing::HttpMetadata < Puppet::FileServing::Metadata
18
18
  checksum = http_response['content-md5']
19
19
  if checksum
20
20
  # convert base64 digest to hex
21
- checksum = checksum.unpack("m0").first.unpack("H*").first
21
+ checksum = checksum.unpack("m").first.unpack("H*").first
22
22
  @checksums[:md5] = "{md5}#{checksum}"
23
23
  end
24
24
 
@@ -80,7 +80,7 @@ class Puppet::FileSystem::FileImpl
80
80
  end
81
81
 
82
82
  def read(path, opts = {})
83
- path.read(opts)
83
+ path.read(**opts)
84
84
  end
85
85
 
86
86
  def read_preserve_line_endings(path)
@@ -156,12 +156,14 @@ class Puppet::FileSystem::FileImpl
156
156
  end
157
157
 
158
158
  def replace_file(path, mode = nil)
159
- mode ||= begin
160
- stat = Puppet::FileSystem.lstat(path)
161
- stat.mode & 07777
162
- rescue Errno::ENOENT
163
- 0640
164
- end
159
+ begin
160
+ stat = Puppet::FileSystem.lstat(path)
161
+ gid = stat.gid
162
+ uid = stat.uid
163
+ mode ||= stat.mode & 07777
164
+ rescue Errno::ENOENT
165
+ mode ||= 0640
166
+ end
165
167
 
166
168
  tempfile = Puppet::FileSystem::Uniquefile.new(Puppet::FileSystem.basename_string(path), Puppet::FileSystem.dir_string(path))
167
169
  begin
@@ -173,8 +175,10 @@ class Puppet::FileSystem::FileImpl
173
175
  tempfile.close
174
176
  end
175
177
 
176
- chmod(mode, tempfile.path)
177
- File.rename(tempfile.path, Puppet::FileSystem.path_string(path))
178
+ tempfile_path = tempfile.path
179
+ FileUtils.chown(uid, gid, tempfile_path) if uid && gid
180
+ chmod(mode, tempfile_path)
181
+ File.rename(tempfile_path, Puppet::FileSystem.path_string(path))
178
182
  ensure
179
183
  tempfile.close!
180
184
  end
@@ -23,6 +23,10 @@ class Puppet::FileSystem::MemoryFile
23
23
  :children => children)
24
24
  end
25
25
 
26
+ def self.a_symlink(target_path, source_path)
27
+ new(target_path, :exist? => true, :symlink? => true, :source_path => source_path)
28
+ end
29
+
26
30
  def initialize(path, properties)
27
31
  @path = path
28
32
  @properties = properties
@@ -34,6 +38,8 @@ class Puppet::FileSystem::MemoryFile
34
38
  def directory?; @properties[:directory?]; end
35
39
  def exist?; @properties[:exist?]; end
36
40
  def executable?; @properties[:executable?]; end
41
+ def symlink?; @properties[:symlink?]; end
42
+ def source_path; @properties[:source_path]; end
37
43
 
38
44
  def each_line(&block)
39
45
  handle.each_line(&block)
@@ -23,6 +23,19 @@ class Puppet::FileSystem::MemoryImpl
23
23
  path.executable?
24
24
  end
25
25
 
26
+ def symlink?(path)
27
+ path.symlink?
28
+ end
29
+
30
+ def readlink(path)
31
+ path = path.path
32
+ link = find(path)
33
+ return Puppet::FileSystem::MemoryFile.a_missing_file(path) unless link
34
+ source = link.source_path
35
+ return Puppet::FileSystem::MemoryFile.a_missing_file(link) unless source
36
+ find(source) || Puppet::FileSystem::MemoryFile.a_missing_file(source)
37
+ end
38
+
26
39
  def children(path)
27
40
  path.children
28
41
  end
@@ -176,6 +176,10 @@ class Puppet::FileSystem::Uniquefile < DelegateClass(File)
176
176
  lock = tmpname + '.lock'
177
177
  mkdir(lock)
178
178
  yield
179
+ rescue Errno::ENOENT => e
180
+ ex = Errno::ENOENT.new("A directory component in #{lock} does not exist or is a dangling symbolic link")
181
+ ex.set_backtrace(e.backtrace)
182
+ raise ex
179
183
  ensure
180
184
  rmdir(lock) if Puppet::FileSystem.exist?(lock)
181
185
  end
@@ -117,6 +117,7 @@ class Puppet::FileSystem::Windows < Puppet::FileSystem::Posix
117
117
  end
118
118
 
119
119
  # https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--0-499-
120
+ FILE_NOT_FOUND = 2
120
121
  ACCESS_DENIED = 5
121
122
  SHARING_VIOLATION = 32
122
123
  LOCK_VIOLATION = 33
@@ -132,12 +133,12 @@ class Puppet::FileSystem::Windows < Puppet::FileSystem::Posix
132
133
  dacl = secure_dacl(current_sid)
133
134
  dacl.allow(Puppet::Util::Windows::SID::BuiltinUsers, FILE_READ)
134
135
  dacl
135
- when 0640, 0600
136
+ when 0660, 0640, 0600, 0440
136
137
  secure_dacl(current_sid)
137
138
  when nil
138
139
  get_dacl_from_file(path) || secure_dacl(current_sid)
139
140
  else
140
- raise ArgumentError, "Only modes 0644, 0640 and 0600 are allowed"
141
+ raise ArgumentError, "#{mode} is invalid: Only modes 0644, 0640, 0660, and 0440 are allowed"
141
142
  end
142
143
 
143
144
 
@@ -180,9 +181,9 @@ class Puppet::FileSystem::Windows < Puppet::FileSystem::Posix
180
181
  def secure_dacl(current_sid)
181
182
  dacl = Puppet::Util::Windows::AccessControlList.new
182
183
  [
183
- Puppet::Util::Windows::SID::LocalSystem,
184
- Puppet::Util::Windows::SID::BuiltinAdministrators,
185
- current_sid
184
+ Puppet::Util::Windows::SID::LocalSystem,
185
+ Puppet::Util::Windows::SID::BuiltinAdministrators,
186
+ current_sid
186
187
  ].uniq.map do |sid|
187
188
  dacl.allow(sid, FULL_CONTROL)
188
189
  end
@@ -193,11 +194,7 @@ class Puppet::FileSystem::Windows < Puppet::FileSystem::Posix
193
194
  sd = Puppet::Util::Windows::Security.get_security_descriptor(Puppet::FileSystem.path_string(path))
194
195
  sd.dacl
195
196
  rescue Puppet::Util::Windows::Error => e
196
- if e.code == 2 # ERROR_FILE_NOT_FOUND
197
- nil
198
- else
199
- raise e
200
- end
197
+ raise e unless e.code == FILE_NOT_FOUND
201
198
  end
202
199
 
203
200
  def raise_if_symlinks_unsupported
@@ -65,7 +65,7 @@ class Puppet::Forge < SemanticPuppet::Dependency::Source
65
65
  # make_http_request URI encodes parameters
66
66
  response = make_http_request(uri)
67
67
 
68
- if response.code == '200'
68
+ if response.code == 200
69
69
  result = Puppet::Util::Json.load(response.body)
70
70
  uri = decode_uri(result['pagination']['next'])
71
71
  matches.concat result['results']
@@ -102,7 +102,7 @@ class Puppet::Forge < SemanticPuppet::Dependency::Source
102
102
  # make_http_request URI encodes parameters
103
103
  response = make_http_request(uri)
104
104
 
105
- if response.code == '200'
105
+ if response.code == 200
106
106
  response = Puppet::Util::Json.load(response.body)
107
107
  else
108
108
  raise ResponseError.new(:uri => URI.parse(@host).merge(uri), :response => response)
@@ -207,7 +207,7 @@ class Puppet::Forge < SemanticPuppet::Dependency::Source
207
207
  def download(uri, destination)
208
208
  response = @source.make_http_request(uri, destination)
209
209
  destination.flush and destination.close
210
- unless response.code == '200'
210
+ unless response.code == 200
211
211
  raise Puppet::Forge::Errors::ResponseError.new(:uri => uri, :response => response)
212
212
  end
213
213
  end
@@ -74,12 +74,12 @@ module Puppet::Forge::Errors
74
74
  # @option options [String] :uri The URI that failed
75
75
  # @option options [String] :input The user's input (e.g. module name)
76
76
  # @option options [String] :message Error from the API response (optional)
77
- # @option options [Net::HTTPResponse] :response The original HTTP response
77
+ # @option options [Puppet::HTTP::Response] :response The original HTTP response
78
78
  def initialize(options)
79
79
  @uri = options[:uri]
80
80
  @message = options[:message]
81
81
  response = options[:response]
82
- @response = "#{response.code} #{response.message.strip}"
82
+ @response = "#{response.code} #{response.reason.strip}"
83
83
 
84
84
  begin
85
85
  body = Puppet::Util::Json.load(response.body)
@@ -15,24 +15,6 @@ class Puppet::Forge
15
15
 
16
16
  attr_reader :uri, :cache
17
17
 
18
- # List of Net::HTTP exceptions to catch
19
- NET_HTTP_EXCEPTIONS = [
20
- EOFError,
21
- Errno::ECONNABORTED,
22
- Errno::ECONNREFUSED,
23
- Errno::ECONNRESET,
24
- Errno::EINVAL,
25
- Errno::ETIMEDOUT,
26
- Net::HTTPBadResponse,
27
- Net::HTTPHeaderSyntaxError,
28
- Net::ProtocolError,
29
- SocketError,
30
- ]
31
-
32
- if Puppet.features.zlib?
33
- NET_HTTP_EXCEPTIONS << Zlib::GzipFile::Error
34
- end
35
-
36
18
  # Instantiate a new repository instance rooted at the +url+.
37
19
  # The library will report +for_agent+ in the User-Agent to the repository.
38
20
  def initialize(host, for_agent)
@@ -40,13 +22,41 @@ class Puppet::Forge
40
22
  @agent = for_agent
41
23
  @cache = Cache.new(self)
42
24
  @uri = URI.parse(host)
25
+
26
+ ssl_provider = Puppet::SSL::SSLProvider.new
27
+ @ssl_context = ssl_provider.create_system_context(cacerts: [])
43
28
  end
44
29
 
45
30
  # Return a Net::HTTPResponse read for this +path+.
46
31
  def make_http_request(path, io = nil)
47
- request = get_request_object(@uri.path.chomp('/')+path)
48
- Puppet.debug "HTTP GET #{@host}#{request.path}"
49
- return read_response(request, io)
32
+ raise ArgumentError, "Path must start with forward slash" unless path.start_with?('/')
33
+ begin
34
+ str = @uri.to_s
35
+ str.chomp!('/')
36
+ str += Puppet::Util.uri_encode(path)
37
+ uri = URI(str)
38
+
39
+ headers = { "User-Agent" => user_agent }
40
+ basic_auth = nil
41
+
42
+ if forge_authorization
43
+ headers["Authorization"] = forge_authorization
44
+ elsif @uri.user && @uri.password
45
+ basic_auth = {
46
+ user: @uri.user,
47
+ password: @uri.password
48
+ }
49
+ end
50
+
51
+ http = Puppet.runtime[:http]
52
+ response = http.get(uri, headers: headers, options: {basic_auth: basic_auth, ssl_context: @ssl_context})
53
+ io.write(response.body) if io.respond_to?(:write)
54
+ response
55
+ rescue Puppet::SSL::CertVerifyError => e
56
+ raise SSLVerifyError.new(:uri => @uri.to_s, :original => e.cause)
57
+ rescue => e
58
+ raise CommunicationError.new(:uri => @uri.to_s, :original => e)
59
+ end
50
60
  end
51
61
 
52
62
  def forge_authorization
@@ -57,71 +67,6 @@ class Puppet::Forge
57
67
  end
58
68
  end
59
69
 
60
- # responsible for properly encoding a URI
61
- def get_request_object(path)
62
- headers = {
63
- "User-Agent" => user_agent,
64
- }
65
-
66
- if Puppet.features.zlib?
67
- headers = headers.merge({
68
- "Accept-Encoding" => Puppet::Network::HTTP::Compression::ACCEPT_ENCODING
69
- })
70
- end
71
-
72
- if forge_authorization
73
- headers = headers.merge({"Authorization" => forge_authorization})
74
- end
75
-
76
- request = Net::HTTP::Get.new(Puppet::Util.uri_encode(path), headers)
77
-
78
- unless @uri.user.nil? || @uri.password.nil? || forge_authorization
79
- request.basic_auth(@uri.user, @uri.password)
80
- end
81
-
82
- return request
83
- end
84
-
85
- # Return a Net::HTTPResponse read from this HTTPRequest +request+.
86
- #
87
- # @param request [Net::HTTPRequest] request to make
88
- # @return [Net::HTTPResponse] response from request
89
- # @raise [Puppet::Forge::Errors::CommunicationError] if there is a network
90
- # related error
91
- # @raise [Puppet::Forge::Errors::SSLVerifyError] if there is a problem
92
- # verifying the remote SSL certificate
93
- def read_response(request, io = nil)
94
- http_object = Puppet::Util::HttpProxy.get_http_object(uri)
95
-
96
- http_object.start do |http|
97
- response = http.request(request)
98
-
99
- if Puppet.features.zlib?
100
- if response && response.key?("content-encoding")
101
- case response["content-encoding"]
102
- when "gzip"
103
- response.body = Zlib::GzipReader.new(StringIO.new(response.read_body), :encoding => "ASCII-8BIT").read
104
- response.delete("content-encoding")
105
- when "deflate"
106
- response.body = Zlib::Inflate.inflate(response.read_body)
107
- response.delete("content-encoding")
108
- end
109
- end
110
- end
111
-
112
- io.write(response.body) if io.respond_to? :write
113
- response
114
- end
115
- rescue *NET_HTTP_EXCEPTIONS => e
116
- raise CommunicationError.new(:uri => @uri.to_s, :original => e)
117
- rescue OpenSSL::SSL::SSLError => e
118
- if e.message =~ /certificate verify failed/
119
- raise SSLVerifyError.new(:uri => @uri.to_s, :original => e)
120
- else
121
- raise e
122
- end
123
- end
124
-
125
70
  # Return the local file name containing the data downloaded from the
126
71
  # repository at +release+ (e.g. "myuser-mymodule").
127
72
  def retrieve(release)