rubygems-update 2.7.11 → 3.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +67 -0
  3. data/.travis.yml +24 -18
  4. data/CODE_OF_CONDUCT.md +10 -8
  5. data/CONTRIBUTING.md +148 -0
  6. data/History.txt +458 -8
  7. data/MAINTAINERS.txt +1 -0
  8. data/Manifest.txt +16 -9
  9. data/POLICIES.md +92 -0
  10. data/README.md +53 -26
  11. data/Rakefile +77 -211
  12. data/{UPGRADING.rdoc → UPGRADING.md} +31 -32
  13. data/appveyor.yml +20 -45
  14. data/bin/gem +1 -2
  15. data/bin/update_rubygems +2 -3
  16. data/bundler/CHANGELOG.md +65 -0
  17. data/bundler/bundler.gemspec +7 -1
  18. data/bundler/lib/bundler/build_metadata.rb +1 -1
  19. data/bundler/lib/bundler/cli/add.rb +15 -5
  20. data/bundler/lib/bundler/cli/binstubs.rb +8 -2
  21. data/bundler/lib/bundler/cli/doctor.rb +47 -1
  22. data/bundler/lib/bundler/cli/install.rb +8 -5
  23. data/bundler/lib/bundler/cli/list.rb +41 -5
  24. data/bundler/lib/bundler/cli/outdated.rb +7 -1
  25. data/bundler/lib/bundler/cli/pristine.rb +4 -0
  26. data/bundler/lib/bundler/cli/remove.rb +18 -0
  27. data/bundler/lib/bundler/cli.rb +63 -21
  28. data/bundler/lib/bundler/definition.rb +15 -16
  29. data/bundler/lib/bundler/dependency.rb +2 -2
  30. data/bundler/lib/bundler/dsl.rb +19 -3
  31. data/bundler/lib/bundler/feature_flag.rb +7 -0
  32. data/bundler/lib/bundler/gem_version_promoter.rb +4 -2
  33. data/bundler/lib/bundler/injector.rb +168 -9
  34. data/bundler/lib/bundler/installer/parallel_installer.rb +5 -0
  35. data/bundler/lib/bundler/installer.rb +29 -6
  36. data/bundler/lib/bundler/plugin/events.rb +61 -0
  37. data/bundler/lib/bundler/plugin.rb +10 -3
  38. data/bundler/lib/bundler/resolver.rb +2 -2
  39. data/bundler/lib/bundler/rubygems_gem_installer.rb +7 -0
  40. data/bundler/lib/bundler/runtime.rb +8 -2
  41. data/bundler/lib/bundler/settings/validator.rb +23 -0
  42. data/bundler/lib/bundler/settings.rb +24 -3
  43. data/bundler/lib/bundler/shared_helpers.rb +19 -3
  44. data/bundler/lib/bundler/source/metadata.rb +2 -3
  45. data/bundler/lib/bundler/source.rb +9 -9
  46. data/bundler/lib/bundler/templates/newgem/lib/newgem.rb.tt +1 -0
  47. data/bundler/lib/bundler/version.rb +1 -1
  48. data/bundler/lib/bundler.rb +26 -8
  49. data/bundler/man/bundle-add.ronn +13 -2
  50. data/bundler/man/bundle-config.ronn +21 -0
  51. data/bundler/man/bundle-install.ronn +1 -1
  52. data/bundler/man/bundle-list.ronn +19 -1
  53. data/bundler/man/bundle-outdated.ronn +4 -0
  54. data/bundler/man/bundle-remove.ronn +23 -0
  55. data/bundler/man/bundle-update.ronn +1 -1
  56. data/bundler/man/bundle.ronn +3 -0
  57. data/lib/rubygems/available_set.rb +1 -1
  58. data/lib/rubygems/basic_specification.rb +12 -12
  59. data/lib/rubygems/bundler_version_finder.rb +3 -3
  60. data/lib/rubygems/command.rb +22 -15
  61. data/lib/rubygems/command_manager.rb +22 -5
  62. data/lib/rubygems/commands/build_command.rb +41 -7
  63. data/lib/rubygems/commands/cert_command.rb +45 -24
  64. data/lib/rubygems/commands/check_command.rb +1 -1
  65. data/lib/rubygems/commands/cleanup_command.rb +14 -7
  66. data/lib/rubygems/commands/contents_command.rb +14 -15
  67. data/lib/rubygems/commands/dependency_command.rb +17 -17
  68. data/lib/rubygems/commands/environment_command.rb +20 -1
  69. data/lib/rubygems/commands/fetch_command.rb +2 -3
  70. data/lib/rubygems/commands/generate_index_command.rb +2 -3
  71. data/lib/rubygems/commands/help_command.rb +12 -13
  72. data/lib/rubygems/commands/info_command.rb +33 -0
  73. data/lib/rubygems/commands/install_command.rb +21 -17
  74. data/lib/rubygems/commands/list_command.rb +0 -1
  75. data/lib/rubygems/commands/lock_command.rb +3 -4
  76. data/lib/rubygems/commands/open_command.rb +16 -10
  77. data/lib/rubygems/commands/owner_command.rb +21 -7
  78. data/lib/rubygems/commands/pristine_command.rb +23 -16
  79. data/lib/rubygems/commands/push_command.rb +19 -8
  80. data/lib/rubygems/commands/query_command.rb +24 -24
  81. data/lib/rubygems/commands/rdoc_command.rb +3 -4
  82. data/lib/rubygems/commands/search_command.rb +0 -1
  83. data/lib/rubygems/commands/server_command.rb +1 -2
  84. data/lib/rubygems/commands/setup_command.rb +86 -48
  85. data/lib/rubygems/commands/signin_command.rb +2 -1
  86. data/lib/rubygems/commands/signout_command.rb +2 -2
  87. data/lib/rubygems/commands/sources_command.rb +11 -12
  88. data/lib/rubygems/commands/specification_command.rb +7 -7
  89. data/lib/rubygems/commands/uninstall_command.rb +50 -18
  90. data/lib/rubygems/commands/unpack_command.rb +16 -7
  91. data/lib/rubygems/commands/update_command.rb +28 -23
  92. data/lib/rubygems/commands/which_command.rb +5 -8
  93. data/lib/rubygems/commands/yank_command.rb +1 -2
  94. data/lib/rubygems/compatibility.rb +1 -21
  95. data/lib/rubygems/config_file.rb +36 -36
  96. data/lib/rubygems/core_ext/kernel_require.rb +6 -6
  97. data/lib/rubygems/core_ext/kernel_warn.rb +45 -0
  98. data/lib/rubygems/defaults.rb +31 -19
  99. data/lib/rubygems/dependency.rb +15 -15
  100. data/lib/rubygems/dependency_installer.rb +30 -33
  101. data/lib/rubygems/dependency_list.rb +9 -10
  102. data/lib/rubygems/deprecate.rb +2 -3
  103. data/lib/rubygems/doctor.rb +5 -6
  104. data/lib/rubygems/errors.rb +3 -3
  105. data/lib/rubygems/exceptions.rb +11 -8
  106. data/lib/rubygems/ext/build_error.rb +0 -1
  107. data/lib/rubygems/ext/builder.rb +50 -23
  108. data/lib/rubygems/ext/cmake_builder.rb +2 -2
  109. data/lib/rubygems/ext/configure_builder.rb +2 -3
  110. data/lib/rubygems/ext/ext_conf_builder.rb +8 -7
  111. data/lib/rubygems/ext/rake_builder.rb +16 -18
  112. data/lib/rubygems/ext.rb +0 -1
  113. data/lib/rubygems/gem_runner.rb +2 -2
  114. data/lib/rubygems/gemcutter_utilities.rb +46 -12
  115. data/lib/rubygems/indexer.rb +19 -12
  116. data/lib/rubygems/install_default_message.rb +0 -1
  117. data/lib/rubygems/install_message.rb +0 -1
  118. data/lib/rubygems/install_update_options.rb +3 -29
  119. data/lib/rubygems/installer.rb +97 -55
  120. data/lib/rubygems/installer_test_case.rb +2 -16
  121. data/lib/rubygems/local_remote_options.rb +5 -4
  122. data/lib/rubygems/mock_gem_ui.rb +3 -4
  123. data/lib/rubygems/name_tuple.rb +4 -4
  124. data/lib/rubygems/package/digest_io.rb +3 -4
  125. data/lib/rubygems/package/file_source.rb +3 -4
  126. data/lib/rubygems/package/io_source.rb +1 -2
  127. data/lib/rubygems/package/old.rb +8 -16
  128. data/lib/rubygems/package/source.rb +0 -1
  129. data/lib/rubygems/package/tar_header.rb +13 -4
  130. data/lib/rubygems/package/tar_reader/entry.rb +20 -4
  131. data/lib/rubygems/package/tar_reader.rb +2 -4
  132. data/lib/rubygems/package/tar_test_case.rb +2 -8
  133. data/lib/rubygems/package/tar_writer.rb +13 -15
  134. data/lib/rubygems/package.rb +90 -63
  135. data/lib/rubygems/package_task.rb +0 -1
  136. data/lib/rubygems/path_support.rb +16 -6
  137. data/lib/rubygems/platform.rb +4 -5
  138. data/lib/rubygems/psych_tree.rb +1 -1
  139. data/lib/rubygems/rdoc.rb +2 -313
  140. data/lib/rubygems/remote_fetcher.rb +29 -82
  141. data/lib/rubygems/request/connection_pools.rb +24 -13
  142. data/lib/rubygems/request/http_pool.rb +3 -4
  143. data/lib/rubygems/request/https_pool.rb +1 -3
  144. data/lib/rubygems/request.rb +17 -16
  145. data/lib/rubygems/request_set/gem_dependency_api.rb +46 -49
  146. data/lib/rubygems/request_set/lockfile/parser.rb +18 -29
  147. data/lib/rubygems/request_set/lockfile/tokenizer.rb +9 -9
  148. data/lib/rubygems/request_set/lockfile.rb +12 -12
  149. data/lib/rubygems/request_set.rb +52 -25
  150. data/lib/rubygems/requirement.rb +32 -21
  151. data/lib/rubygems/resolver/activation_request.rb +6 -6
  152. data/lib/rubygems/resolver/api_set.rb +5 -6
  153. data/lib/rubygems/resolver/api_specification.rb +2 -3
  154. data/lib/rubygems/resolver/best_set.rb +5 -6
  155. data/lib/rubygems/resolver/composed_set.rb +5 -6
  156. data/lib/rubygems/resolver/conflict.rb +5 -5
  157. data/lib/rubygems/resolver/current_set.rb +1 -2
  158. data/lib/rubygems/resolver/dependency_request.rb +4 -4
  159. data/lib/rubygems/resolver/git_set.rb +5 -6
  160. data/lib/rubygems/resolver/git_specification.rb +4 -5
  161. data/lib/rubygems/resolver/index_set.rb +5 -6
  162. data/lib/rubygems/resolver/index_specification.rb +3 -4
  163. data/lib/rubygems/resolver/installed_specification.rb +3 -4
  164. data/lib/rubygems/resolver/installer_set.rb +12 -12
  165. data/lib/rubygems/resolver/local_specification.rb +1 -2
  166. data/lib/rubygems/resolver/lock_set.rb +5 -6
  167. data/lib/rubygems/resolver/lock_specification.rb +7 -8
  168. data/lib/rubygems/resolver/requirement_list.rb +1 -1
  169. data/lib/rubygems/resolver/set.rb +2 -2
  170. data/lib/rubygems/resolver/source_set.rb +4 -5
  171. data/lib/rubygems/resolver/spec_specification.rb +1 -2
  172. data/lib/rubygems/resolver/specification.rb +10 -7
  173. data/lib/rubygems/resolver/stats.rb +1 -1
  174. data/lib/rubygems/resolver/vendor_set.rb +4 -5
  175. data/lib/rubygems/resolver/vendor_specification.rb +2 -3
  176. data/lib/rubygems/resolver.rb +14 -16
  177. data/lib/rubygems/s3_uri_signer.rb +183 -0
  178. data/lib/rubygems/safe_yaml.rb +18 -10
  179. data/lib/rubygems/security/policies.rb +1 -2
  180. data/lib/rubygems/security/policy.rb +25 -25
  181. data/lib/rubygems/security/signer.rb +72 -24
  182. data/lib/rubygems/security/trust_dir.rb +10 -10
  183. data/lib/rubygems/security.rb +21 -22
  184. data/lib/rubygems/security_option.rb +0 -1
  185. data/lib/rubygems/server.rb +21 -21
  186. data/lib/rubygems/source/git.rb +9 -10
  187. data/lib/rubygems/source/installed.rb +3 -4
  188. data/lib/rubygems/source/local.rb +7 -7
  189. data/lib/rubygems/source/lock.rb +4 -4
  190. data/lib/rubygems/source/specific_file.rb +5 -5
  191. data/lib/rubygems/source/vendor.rb +2 -3
  192. data/lib/rubygems/source.rb +16 -25
  193. data/lib/rubygems/source_list.rb +2 -2
  194. data/lib/rubygems/source_local.rb +0 -1
  195. data/lib/rubygems/spec_fetcher.rb +5 -6
  196. data/lib/rubygems/specification.rb +219 -558
  197. data/lib/rubygems/specification_policy.rb +407 -0
  198. data/lib/rubygems/stub_specification.rb +12 -17
  199. data/lib/rubygems/test_case.rb +161 -75
  200. data/lib/rubygems/test_utilities.rb +20 -35
  201. data/lib/rubygems/text.rb +6 -6
  202. data/lib/rubygems/uninstaller.rb +38 -27
  203. data/lib/rubygems/uri_formatter.rb +1 -2
  204. data/lib/rubygems/user_interaction.rb +37 -89
  205. data/lib/rubygems/util/licenses.rb +27 -1
  206. data/lib/rubygems/util/list.rb +1 -1
  207. data/lib/rubygems/util.rb +32 -14
  208. data/lib/rubygems/validator.rb +4 -5
  209. data/lib/rubygems/version.rb +15 -15
  210. data/lib/rubygems/version_option.rb +2 -3
  211. data/lib/rubygems.rb +71 -102
  212. data/rubygems-update.gemspec +43 -0
  213. data/setup.rb +2 -8
  214. data/test/rubygems/ca_cert.pem +74 -65
  215. data/test/rubygems/client.pem +103 -45
  216. data/test/rubygems/rubygems_plugin.rb +0 -1
  217. data/test/rubygems/simple_gem.rb +1 -1
  218. data/test/rubygems/ssl_cert.pem +78 -17
  219. data/test/rubygems/ssl_key.pem +25 -13
  220. data/test/rubygems/test_bundled_ca.rb +1 -1
  221. data/test/rubygems/test_config.rb +7 -2
  222. data/test/rubygems/test_gem.rb +205 -132
  223. data/test/rubygems/test_gem_bundler_version_finder.rb +4 -0
  224. data/test/rubygems/test_gem_command.rb +0 -1
  225. data/test/rubygems/test_gem_command_manager.rb +18 -3
  226. data/test/rubygems/test_gem_commands_build_command.rb +220 -15
  227. data/test/rubygems/test_gem_commands_cert_command.rb +69 -8
  228. data/test/rubygems/test_gem_commands_check_command.rb +1 -1
  229. data/test/rubygems/test_gem_commands_cleanup_command.rb +27 -1
  230. data/test/rubygems/test_gem_commands_contents_command.rb +1 -2
  231. data/test/rubygems/test_gem_commands_dependency_command.rb +33 -34
  232. data/test/rubygems/test_gem_commands_environment_command.rb +1 -0
  233. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -1
  234. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -1
  235. data/test/rubygems/test_gem_commands_help_command.rb +7 -4
  236. data/test/rubygems/test_gem_commands_info_command.rb +44 -0
  237. data/test/rubygems/test_gem_commands_install_command.rb +79 -12
  238. data/test/rubygems/test_gem_commands_lock_command.rb +0 -1
  239. data/test/rubygems/test_gem_commands_open_command.rb +29 -0
  240. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -1
  241. data/test/rubygems/test_gem_commands_owner_command.rb +93 -57
  242. data/test/rubygems/test_gem_commands_pristine_command.rb +65 -30
  243. data/test/rubygems/test_gem_commands_push_command.rb +54 -0
  244. data/test/rubygems/test_gem_commands_query_command.rb +102 -100
  245. data/test/rubygems/test_gem_commands_search_command.rb +0 -1
  246. data/test/rubygems/test_gem_commands_server_command.rb +0 -1
  247. data/test/rubygems/test_gem_commands_setup_command.rb +50 -15
  248. data/test/rubygems/test_gem_commands_signin_command.rb +1 -1
  249. data/test/rubygems/test_gem_commands_sources_command.rb +0 -1
  250. data/test/rubygems/test_gem_commands_specification_command.rb +2 -3
  251. data/test/rubygems/test_gem_commands_stale_command.rb +3 -2
  252. data/test/rubygems/test_gem_commands_uninstall_command.rb +161 -8
  253. data/test/rubygems/test_gem_commands_unpack_command.rb +17 -1
  254. data/test/rubygems/test_gem_commands_update_command.rb +19 -2
  255. data/test/rubygems/test_gem_commands_which_command.rb +0 -1
  256. data/test/rubygems/test_gem_commands_yank_command.rb +0 -1
  257. data/test/rubygems/test_gem_config_file.rb +4 -2
  258. data/test/rubygems/test_gem_dependency.rb +0 -1
  259. data/test/rubygems/test_gem_dependency_installer.rb +8 -5
  260. data/test/rubygems/test_gem_dependency_list.rb +6 -7
  261. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -1
  262. data/test/rubygems/test_gem_doctor.rb +1 -2
  263. data/test/rubygems/test_gem_ext_builder.rb +10 -23
  264. data/test/rubygems/test_gem_ext_cmake_builder.rb +5 -4
  265. data/test/rubygems/test_gem_ext_configure_builder.rb +3 -3
  266. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +8 -9
  267. data/test/rubygems/test_gem_ext_rake_builder.rb +20 -5
  268. data/test/rubygems/test_gem_gem_runner.rb +0 -1
  269. data/test/rubygems/test_gem_gemcutter_utilities.rb +32 -6
  270. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -1
  271. data/test/rubygems/test_gem_indexer.rb +16 -10
  272. data/test/rubygems/test_gem_install_update_options.rb +1 -20
  273. data/test/rubygems/test_gem_installer.rb +154 -119
  274. data/test/rubygems/test_gem_local_remote_options.rb +3 -3
  275. data/test/rubygems/test_gem_name_tuple.rb +0 -1
  276. data/test/rubygems/test_gem_package.rb +77 -31
  277. data/test/rubygems/test_gem_package_old.rb +0 -1
  278. data/test/rubygems/test_gem_package_tar_header.rb +42 -2
  279. data/test/rubygems/test_gem_package_tar_reader.rb +0 -1
  280. data/test/rubygems/test_gem_package_tar_reader_entry.rb +11 -0
  281. data/test/rubygems/test_gem_package_tar_writer.rb +43 -7
  282. data/test/rubygems/test_gem_package_task.rb +2 -2
  283. data/test/rubygems/test_gem_path_support.rb +28 -11
  284. data/test/rubygems/test_gem_platform.rb +4 -5
  285. data/test/rubygems/test_gem_rdoc.rb +1 -136
  286. data/test/rubygems/test_gem_remote_fetcher.rb +241 -141
  287. data/test/rubygems/test_gem_request.rb +9 -9
  288. data/test/rubygems/test_gem_request_connection_pools.rb +24 -3
  289. data/test/rubygems/test_gem_request_set.rb +5 -5
  290. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +82 -64
  291. data/test/rubygems/test_gem_request_set_lockfile.rb +1 -2
  292. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +4 -9
  293. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +1 -1
  294. data/test/rubygems/test_gem_requirement.rb +24 -4
  295. data/test/rubygems/test_gem_resolver.rb +13 -17
  296. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -1
  297. data/test/rubygems/test_gem_resolver_api_set.rb +0 -1
  298. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -1
  299. data/test/rubygems/test_gem_resolver_best_set.rb +0 -1
  300. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -1
  301. data/test/rubygems/test_gem_resolver_conflict.rb +0 -1
  302. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -1
  303. data/test/rubygems/test_gem_resolver_git_set.rb +0 -1
  304. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -1
  305. data/test/rubygems/test_gem_resolver_index_set.rb +0 -1
  306. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -1
  307. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -1
  308. data/test/rubygems/test_gem_resolver_installer_set.rb +2 -3
  309. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -1
  310. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -1
  311. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -1
  312. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -1
  313. data/test/rubygems/test_gem_resolver_specification.rb +1 -2
  314. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -1
  315. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -1
  316. data/test/rubygems/test_gem_security.rb +1 -3
  317. data/test/rubygems/test_gem_security_policy.rb +5 -6
  318. data/test/rubygems/test_gem_security_signer.rb +4 -3
  319. data/test/rubygems/test_gem_security_trust_dir.rb +1 -2
  320. data/test/rubygems/test_gem_server.rb +4 -4
  321. data/test/rubygems/test_gem_source.rb +0 -13
  322. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -1
  323. data/test/rubygems/test_gem_source_git.rb +0 -1
  324. data/test/rubygems/test_gem_source_installed.rb +0 -1
  325. data/test/rubygems/test_gem_source_lock.rb +0 -1
  326. data/test/rubygems/test_gem_source_vendor.rb +0 -1
  327. data/test/rubygems/test_gem_spec_fetcher.rb +0 -1
  328. data/test/rubygems/test_gem_specification.rb +366 -198
  329. data/test/rubygems/test_gem_stream_ui.rb +15 -32
  330. data/test/rubygems/test_gem_stub_specification.rb +0 -2
  331. data/test/rubygems/test_gem_text.rb +4 -0
  332. data/test/rubygems/test_gem_uninstaller.rb +42 -3
  333. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -1
  334. data/test/rubygems/test_gem_uri_formatter.rb +0 -1
  335. data/test/rubygems/test_gem_util.rb +31 -11
  336. data/test/rubygems/test_gem_validator.rb +0 -1
  337. data/test/rubygems/test_gem_version.rb +11 -11
  338. data/test/rubygems/test_gem_version_option.rb +0 -1
  339. data/test/rubygems/test_remote_fetch_error.rb +0 -1
  340. data/test/rubygems/test_require.rb +67 -52
  341. data/util/CL2notes +1 -2
  342. data/util/ci +20 -12
  343. data/util/cops/deprecations.rb +52 -0
  344. data/util/create_certs.rb +6 -7
  345. data/util/create_certs.sh +27 -0
  346. data/util/create_encrypted_key.rb +4 -5
  347. data/util/patch_with_prs.rb +1 -1
  348. data/util/rubocop +8 -0
  349. data/util/update_bundled_ca_certificates.rb +12 -13
  350. data/util/update_changelog.rb +1 -1
  351. metadata +61 -51
  352. data/.autotest +0 -71
  353. data/.document +0 -5
  354. data/CONTRIBUTING.rdoc +0 -130
  355. data/CVE-2013-4287.txt +0 -35
  356. data/CVE-2013-4363.txt +0 -45
  357. data/CVE-2015-3900.txt +0 -40
  358. data/POLICIES.rdoc +0 -74
  359. data/test/rubygems/fix_openssl_warnings.rb +0 -13
@@ -9,7 +9,7 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
9
9
 
10
10
  attr_reader :sources
11
11
 
12
- def initialize set, name, version, sources, platform
12
+ def initialize(set, name, version, sources, platform)
13
13
  super()
14
14
 
15
15
  @name = name
@@ -27,10 +27,10 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
27
27
  # This is a null install as a locked specification is considered installed.
28
28
  # +options+ are ignored.
29
29
 
30
- def install options = {}
30
+ def install(options = {})
31
31
  destination = options[:install_dir] || Gem.dir
32
32
 
33
- if File.exist? File.join(destination, 'specifications', spec.spec_name) then
33
+ if File.exist? File.join(destination, 'specifications', spec.spec_name)
34
34
  yield nil
35
35
  return
36
36
  end
@@ -41,11 +41,11 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
41
41
  ##
42
42
  # Adds +dependency+ from the lockfile to this specification
43
43
 
44
- def add_dependency dependency # :nodoc:
44
+ def add_dependency(dependency) # :nodoc:
45
45
  @dependencies << dependency
46
46
  end
47
47
 
48
- def pretty_print q # :nodoc:
48
+ def pretty_print(q) # :nodoc:
49
49
  q.group 2, '[LockSpecification', ']' do
50
50
  q.breakable
51
51
  q.text "name: #{@name}"
@@ -53,12 +53,12 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
53
53
  q.breakable
54
54
  q.text "version: #{@version}"
55
55
 
56
- unless @platform == Gem::Platform::RUBY then
56
+ unless @platform == Gem::Platform::RUBY
57
57
  q.breakable
58
58
  q.text "platform: #{@platform}"
59
59
  end
60
60
 
61
- unless @dependencies.empty? then
61
+ unless @dependencies.empty?
62
62
  q.breakable
63
63
  q.text 'dependencies:'
64
64
  q.breakable
@@ -85,4 +85,3 @@ class Gem::Resolver::LockSpecification < Gem::Resolver::Specification
85
85
  end
86
86
 
87
87
  end
88
-
@@ -18,7 +18,7 @@ class Gem::Resolver::RequirementList
18
18
  @list = []
19
19
  end
20
20
 
21
- def initialize_copy other # :nodoc:
21
+ def initialize_copy(other) # :nodoc:
22
22
  @exact = @exact.dup
23
23
  @list = @list.dup
24
24
  end
@@ -31,7 +31,7 @@ class Gem::Resolver::Set
31
31
  # The find_all method must be implemented. It returns all Resolver
32
32
  # Specification objects matching the given DependencyRequest +req+.
33
33
 
34
- def find_all req
34
+ def find_all(req)
35
35
  raise NotImplementedError
36
36
  end
37
37
 
@@ -43,7 +43,7 @@ class Gem::Resolver::Set
43
43
  # When overridden, the #prefetch method should look up specifications
44
44
  # matching +reqs+.
45
45
 
46
- def prefetch reqs
46
+ def prefetch(reqs)
47
47
  end
48
48
 
49
49
  ##
@@ -16,7 +16,7 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
16
16
  @sets = {}
17
17
  end
18
18
 
19
- def find_all req # :nodoc:
19
+ def find_all(req) # :nodoc:
20
20
  if set = get_set(req.dependency.name)
21
21
  set.find_all req
22
22
  else
@@ -25,7 +25,7 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
25
25
  end
26
26
 
27
27
  # potentially no-op
28
- def prefetch reqs # :nodoc:
28
+ def prefetch(reqs) # :nodoc:
29
29
  reqs.each do |req|
30
30
  if set = get_set(req.dependency.name)
31
31
  set.prefetch reqs
@@ -33,11 +33,11 @@ class Gem::Resolver::SourceSet < Gem::Resolver::Set
33
33
  end
34
34
  end
35
35
 
36
- def add_source_gem name, source
36
+ def add_source_gem(name, source)
37
37
  @links[name] = source
38
38
  end
39
39
 
40
- private
40
+ private
41
41
 
42
42
  def get_set(name)
43
43
  link = @links[name]
@@ -45,4 +45,3 @@ private
45
45
  end
46
46
 
47
47
  end
48
-
@@ -10,7 +10,7 @@ class Gem::Resolver::SpecSpecification < Gem::Resolver::Specification
10
10
  # +spec+. The +source+ is either where the +spec+ came from, or should be
11
11
  # loaded from.
12
12
 
13
- def initialize set, spec, source = nil
13
+ def initialize(set, spec, source = nil)
14
14
  @set = set
15
15
  @source = source
16
16
  @spec = spec
@@ -54,4 +54,3 @@ class Gem::Resolver::SpecSpecification < Gem::Resolver::Specification
54
54
  end
55
55
 
56
56
  end
57
-
@@ -81,14 +81,10 @@ class Gem::Resolver::Specification
81
81
  # After installation #spec is updated to point to the just-installed
82
82
  # specification.
83
83
 
84
- def install options = {}
84
+ def install(options = {})
85
85
  require 'rubygems/installer'
86
86
 
87
- destination = options[:install_dir] || Gem.dir
88
-
89
- Gem.ensure_gem_subdirectories destination
90
-
91
- gem = source.download spec, destination
87
+ gem = download options
92
88
 
93
89
  installer = Gem::Installer.at gem, options
94
90
 
@@ -97,6 +93,14 @@ class Gem::Resolver::Specification
97
93
  @spec = installer.install
98
94
  end
99
95
 
96
+ def download(options)
97
+ dir = options[:install_dir] || Gem.dir
98
+
99
+ Gem.ensure_gem_subdirectories dir
100
+
101
+ source.download spec, dir
102
+ end
103
+
100
104
  ##
101
105
  # Returns true if this specification is installable on this platform.
102
106
 
@@ -108,4 +112,3 @@ class Gem::Resolver::Specification
108
112
  false
109
113
  end
110
114
  end
111
-
@@ -32,7 +32,7 @@ class Gem::Resolver::Stats
32
32
  @iterations += 1
33
33
  end
34
34
 
35
- PATTERN = "%20s: %d\n"
35
+ PATTERN = "%20s: %d\n".freeze
36
36
 
37
37
  def display
38
38
  $stdout.puts "=== Resolver Statistics ==="
@@ -32,7 +32,7 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
32
32
  # Adds a specification to the set with the given +name+ which has been
33
33
  # unpacked into the given +directory+.
34
34
 
35
- def add_vendor_gem name, directory # :nodoc:
35
+ def add_vendor_gem(name, directory) # :nodoc:
36
36
  gemspec = File.join directory, "#{name}.gemspec"
37
37
 
38
38
  spec = Gem::Specification.load gemspec
@@ -52,7 +52,7 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
52
52
  # Returns an Array of VendorSpecification objects matching the
53
53
  # DependencyRequest +req+.
54
54
 
55
- def find_all req
55
+ def find_all(req)
56
56
  @specs.values.select do |spec|
57
57
  req.match? spec
58
58
  end.map do |spec|
@@ -65,11 +65,11 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
65
65
  # Loads a spec with the given +name+. +version+, +platform+ and +source+ are
66
66
  # ignored.
67
67
 
68
- def load_spec name, version, platform, source # :nodoc:
68
+ def load_spec(name, version, platform, source) # :nodoc:
69
69
  @specs.fetch name
70
70
  end
71
71
 
72
- def pretty_print q # :nodoc:
72
+ def pretty_print(q) # :nodoc:
73
73
  q.group 2, '[VendorSet', ']' do
74
74
  next if @directories.empty?
75
75
  q.breakable
@@ -85,4 +85,3 @@ class Gem::Resolver::VendorSet < Gem::Resolver::Set
85
85
  end
86
86
 
87
87
  end
88
-
@@ -6,7 +6,7 @@
6
6
 
7
7
  class Gem::Resolver::VendorSpecification < Gem::Resolver::SpecSpecification
8
8
 
9
- def == other # :nodoc:
9
+ def ==(other) # :nodoc:
10
10
  self.class === other and
11
11
  @set == other.set and
12
12
  @spec == other.spec and
@@ -17,9 +17,8 @@ class Gem::Resolver::VendorSpecification < Gem::Resolver::SpecSpecification
17
17
  # This is a null install as this gem was unpacked into a directory.
18
18
  # +options+ are ignored.
19
19
 
20
- def install options = {}
20
+ def install(options = {})
21
21
  yield nil
22
22
  end
23
23
 
24
24
  end
25
-
@@ -59,7 +59,7 @@ class Gem::Resolver
59
59
  # uniform manner. If one of the +sets+ is itself a ComposedSet its sets are
60
60
  # flattened into the result ComposedSet.
61
61
 
62
- def self.compose_sets *sets
62
+ def self.compose_sets(*sets)
63
63
  sets.compact!
64
64
 
65
65
  sets = sets.map do |set|
@@ -87,7 +87,7 @@ class Gem::Resolver
87
87
  # Creates a Resolver that queries only against the already installed gems
88
88
  # for the +needed+ dependencies.
89
89
 
90
- def self.for_current_gems needed
90
+ def self.for_current_gems(needed)
91
91
  new needed, Gem::Resolver::CurrentSet.new
92
92
  end
93
93
 
@@ -99,7 +99,7 @@ class Gem::Resolver
99
99
  # satisfy the Dependencies. This defaults to IndexSet, which will query
100
100
  # rubygems.org.
101
101
 
102
- def initialize needed, set = nil
102
+ def initialize(needed, set = nil)
103
103
  @set = set || Gem::Resolver::IndexSet.new
104
104
  @needed = needed
105
105
 
@@ -112,19 +112,22 @@ class Gem::Resolver
112
112
  @stats = Gem::Resolver::Stats.new
113
113
  end
114
114
 
115
- def explain stage, *data # :nodoc:
115
+ def explain(stage, *data) # :nodoc:
116
116
  return unless DEBUG_RESOLVER
117
117
 
118
118
  d = data.map { |x| x.pretty_inspect }.join(", ")
119
119
  $stderr.printf "%10s %s\n", stage.to_s.upcase, d
120
120
  end
121
121
 
122
- def explain_list stage # :nodoc:
122
+ def explain_list(stage) # :nodoc:
123
123
  return unless DEBUG_RESOLVER
124
124
 
125
125
  data = yield
126
126
  $stderr.printf "%10s (%d entries)\n", stage.to_s.upcase, data.size
127
- PP.pp data, $stderr unless data.empty?
127
+ unless data.empty?
128
+ require 'pp'
129
+ PP.pp data, $stderr
130
+ end
128
131
  end
129
132
 
130
133
  ##
@@ -133,7 +136,7 @@ class Gem::Resolver
133
136
  #
134
137
  # Returns the Specification and the ActivationRequest
135
138
 
136
- def activation_request dep, possible # :nodoc:
139
+ def activation_request(dep, possible) # :nodoc:
137
140
  spec = possible.pop
138
141
 
139
142
  explain :activate, [spec.full_name, possible.size]
@@ -145,7 +148,7 @@ class Gem::Resolver
145
148
  return spec, activation_request
146
149
  end
147
150
 
148
- def requests s, act, reqs=[] # :nodoc:
151
+ def requests(s, act, reqs=[]) # :nodoc:
149
152
  return reqs if @ignore_dependencies
150
153
 
151
154
  s.fetch_development_dependencies if @development
@@ -171,7 +174,7 @@ class Gem::Resolver
171
174
  include Molinillo::UI
172
175
 
173
176
  def output
174
- @output ||= debug? ? $stdout : File.open(Gem::Util::NULL_DEVICE, 'w')
177
+ @output ||= debug? ? $stdout : File.open(IO::NULL, 'w')
175
178
  end
176
179
 
177
180
  def debug?
@@ -197,7 +200,7 @@ class Gem::Resolver
197
200
  # Extracts the specifications that may be able to fulfill +dependency+ and
198
201
  # returns those that match the local platform and all those that match.
199
202
 
200
- def find_possible dependency # :nodoc:
203
+ def find_possible(dependency) # :nodoc:
201
204
  all = @set.find_all dependency
202
205
 
203
206
  if (skip_dep_gems = skip_gems[dependency.name]) && !skip_dep_gems.empty?
@@ -216,7 +219,7 @@ class Gem::Resolver
216
219
  ##
217
220
  # Returns the gems in +specs+ that match the local platform.
218
221
 
219
- def select_local_platforms specs # :nodoc:
222
+ def select_local_platforms(specs) # :nodoc:
220
223
  specs.select do |spec|
221
224
  Gem::Platform.installable? spec
222
225
  end
@@ -314,11 +317,6 @@ class Gem::Resolver
314
317
 
315
318
  end
316
319
 
317
- ##
318
- # TODO remove in RubyGems 3
319
-
320
- Gem::DependencyResolver = Gem::Resolver # :nodoc:
321
-
322
320
  require 'rubygems/resolver/activation_request'
323
321
  require 'rubygems/resolver/conflict'
324
322
  require 'rubygems/resolver/dependency_request'
@@ -0,0 +1,183 @@
1
+ require 'base64'
2
+ require 'digest'
3
+ require 'openssl'
4
+
5
+ ##
6
+ # S3URISigner implements AWS SigV4 for S3 Source to avoid a dependency on the aws-sdk-* gems
7
+ # More on AWS SigV4: https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
8
+ class Gem::S3URISigner
9
+
10
+ class ConfigurationError < Gem::Exception
11
+
12
+ def initialize(message)
13
+ super message
14
+ end
15
+
16
+ def to_s # :nodoc:
17
+ "#{super}"
18
+ end
19
+
20
+ end
21
+
22
+ class InstanceProfileError < Gem::Exception
23
+
24
+ def initialize(message)
25
+ super message
26
+ end
27
+
28
+ def to_s # :nodoc:
29
+ "#{super}"
30
+ end
31
+
32
+ end
33
+
34
+ attr_accessor :uri
35
+
36
+ def initialize(uri)
37
+ @uri = uri
38
+ end
39
+
40
+ ##
41
+ # Signs S3 URI using query-params according to the reference: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
42
+ def sign(expiration = 86400)
43
+ s3_config = fetch_s3_config
44
+
45
+ current_time = Time.now.utc
46
+ date_time = current_time.strftime("%Y%m%dT%H%m%SZ")
47
+ date = date_time[0,8]
48
+
49
+ credential_info = "#{date}/#{s3_config.region}/s3/aws4_request"
50
+ canonical_host = "#{uri.host}.s3.#{s3_config.region}.amazonaws.com"
51
+
52
+ query_params = generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
53
+ canonical_request = generate_canonical_request(canonical_host, query_params)
54
+ string_to_sign = generate_string_to_sign(date_time, credential_info, canonical_request)
55
+ signature = generate_signature(s3_config, date, string_to_sign)
56
+
57
+ URI.parse("https://#{canonical_host}#{uri.path}?#{query_params}&X-Amz-Signature=#{signature}")
58
+ end
59
+
60
+ private
61
+
62
+ S3Config = Struct.new :access_key_id, :secret_access_key, :security_token, :region
63
+
64
+ def generate_canonical_query_params(s3_config, date_time, credential_info, expiration)
65
+ canonical_params = {}
66
+ canonical_params["X-Amz-Algorithm"] = "AWS4-HMAC-SHA256"
67
+ canonical_params["X-Amz-Credential"] = "#{s3_config.access_key_id}/#{credential_info}"
68
+ canonical_params["X-Amz-Date"] = date_time
69
+ canonical_params["X-Amz-Expires"] = expiration.to_s
70
+ canonical_params["X-Amz-SignedHeaders"] = "host"
71
+ canonical_params["X-Amz-Security-Token"] = s3_config.security_token if s3_config.security_token
72
+
73
+ # Sorting is required to generate proper signature
74
+ canonical_params.sort.to_h.map do |key, value|
75
+ "#{base64_uri_escape(key)}=#{base64_uri_escape(value)}"
76
+ end.join("&")
77
+ end
78
+
79
+ def generate_canonical_request(canonical_host, query_params)
80
+ [
81
+ "GET",
82
+ uri.path,
83
+ query_params,
84
+ "host:#{canonical_host}",
85
+ "", # empty params
86
+ "host",
87
+ "UNSIGNED-PAYLOAD",
88
+ ].join("\n")
89
+ end
90
+
91
+ def generate_string_to_sign(date_time, credential_info, canonical_request)
92
+ [
93
+ "AWS4-HMAC-SHA256",
94
+ date_time,
95
+ credential_info,
96
+ Digest::SHA256.hexdigest(canonical_request)
97
+ ].join("\n")
98
+ end
99
+
100
+ def generate_signature(s3_config, date, string_to_sign)
101
+ date_key = OpenSSL::HMAC.digest("sha256", "AWS4" + s3_config.secret_access_key, date)
102
+ date_region_key = OpenSSL::HMAC.digest("sha256", date_key, s3_config.region)
103
+ date_region_service_key = OpenSSL::HMAC.digest("sha256", date_region_key, "s3")
104
+ signing_key = OpenSSL::HMAC.digest("sha256", date_region_service_key, "aws4_request")
105
+ OpenSSL::HMAC.hexdigest("sha256", signing_key, string_to_sign)
106
+ end
107
+
108
+ ##
109
+ # Extracts S3 configuration for S3 bucket
110
+ def fetch_s3_config
111
+ return S3Config.new(uri.user, uri.password, nil, "us-east-1") if uri.user && uri.password
112
+
113
+ s3_source = Gem.configuration[:s3_source] || Gem.configuration["s3_source"]
114
+ host = uri.host
115
+ raise ConfigurationError.new("no s3_source key exists in .gemrc") unless s3_source
116
+
117
+ auth = s3_source[host] || s3_source[host.to_sym]
118
+ raise ConfigurationError.new("no key for host #{host} in s3_source in .gemrc") unless auth
119
+
120
+ provider = auth[:provider] || auth["provider"]
121
+ case provider
122
+ when "env"
123
+ id = ENV["AWS_ACCESS_KEY_ID"]
124
+ secret = ENV["AWS_SECRET_ACCESS_KEY"]
125
+ security_token = ENV["AWS_SESSION_TOKEN"]
126
+ when "instance_profile"
127
+ credentials = ec2_metadata_credentials_json
128
+ id = credentials["AccessKeyId"]
129
+ secret = credentials["SecretAccessKey"]
130
+ security_token = credentials["Token"]
131
+ else
132
+ id = auth[:id] || auth["id"]
133
+ secret = auth[:secret] || auth["secret"]
134
+ security_token = auth[:security_token] || auth["security_token"]
135
+ end
136
+
137
+ raise ConfigurationError.new("s3_source for #{host} missing id or secret") unless id && secret
138
+
139
+ region = auth[:region] || auth["region"] || "us-east-1"
140
+ S3Config.new(id, secret, security_token, region)
141
+ end
142
+
143
+ def base64_uri_escape(str)
144
+ str.gsub(/[\+\/=\n]/, BASE64_URI_TRANSLATE)
145
+ end
146
+
147
+ def ec2_metadata_credentials_json
148
+ require 'net/http'
149
+ require 'rubygems/request'
150
+ require 'rubygems/request/connection_pools'
151
+ require 'json'
152
+
153
+ iam_info = ec2_metadata_request(EC2_IAM_INFO)
154
+ # Expected format: arn:aws:iam::<id>:instance-profile/<role_name>
155
+ role_name = iam_info['InstanceProfileArn'].split('/').last
156
+ ec2_metadata_request(EC2_IAM_SECURITY_CREDENTIALS + role_name)
157
+ end
158
+
159
+ def ec2_metadata_request(url)
160
+ uri = URI(url)
161
+ @request_pool ||= create_request_pool(uri)
162
+ request = Gem::Request.new(uri, Net::HTTP::Get, nil, @request_pool)
163
+ response = request.fetch
164
+
165
+ case response
166
+ when Net::HTTPOK then
167
+ JSON.parse(response.body)
168
+ else
169
+ raise InstanceProfileError.new("Unable to fetch AWS metadata from #{uri}: #{response.message} #{response.code}")
170
+ end
171
+ end
172
+
173
+ def create_request_pool(uri)
174
+ proxy_uri = Gem::Request.proxy_uri(Gem::Request.get_proxy_from_env(uri.scheme))
175
+ certs = Gem::Request.get_cert_files
176
+ Gem::Request::ConnectionPools.new(proxy_uri, certs).pool_for(uri)
177
+ end
178
+
179
+ BASE64_URI_TRANSLATE = { "+" => "%2B", "/" => "%2F", "=" => "%3D", "\n" => "" }.freeze
180
+ EC2_IAM_INFO = "http://169.254.169.254/latest/meta-data/iam/info".freeze
181
+ EC2_IAM_SECURITY_CREDENTIALS = "http://169.254.169.254/latest/meta-data/iam/security-credentials/".freeze
182
+
183
+ end
@@ -7,7 +7,7 @@ module Gem
7
7
  # Psych.safe_load
8
8
 
9
9
  module SafeYAML
10
- WHITELISTED_CLASSES = %w(
10
+ PERMITTED_CLASSES = %w(
11
11
  Symbol
12
12
  Time
13
13
  Date
@@ -19,31 +19,39 @@ module Gem
19
19
  Gem::Version::Requirement
20
20
  YAML::Syck::DefaultKey
21
21
  Syck::DefaultKey
22
- )
22
+ ).freeze
23
23
 
24
- WHITELISTED_SYMBOLS = %w(
24
+ PERMITTED_SYMBOLS = %w(
25
25
  development
26
26
  runtime
27
- )
27
+ ).freeze
28
28
 
29
29
  if ::YAML.respond_to? :safe_load
30
- def self.safe_load input
31
- ::YAML.safe_load(input, WHITELISTED_CLASSES, WHITELISTED_SYMBOLS, true)
30
+ def self.safe_load(input)
31
+ if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
32
+ ::YAML.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases: true)
33
+ else
34
+ ::YAML.safe_load(input, PERMITTED_CLASSES, PERMITTED_SYMBOLS, true)
35
+ end
32
36
  end
33
37
 
34
- def self.load input
35
- ::YAML.safe_load(input, [::Symbol])
38
+ def self.load(input)
39
+ if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
40
+ ::YAML.safe_load(input, permitted_classes: [::Symbol])
41
+ else
42
+ ::YAML.safe_load(input, [::Symbol])
43
+ end
36
44
  end
37
45
  else
38
46
  unless Gem::Deprecate.skip
39
47
  warn "YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0)."
40
48
  end
41
49
 
42
- def self.safe_load input, *args
50
+ def self.safe_load(input, *args)
43
51
  ::YAML.load input
44
52
  end
45
53
 
46
- def self.load input
54
+ def self.load(input)
47
55
  ::YAML.load input
48
56
  end
49
57
  end
@@ -110,7 +110,6 @@ module Gem::Security
110
110
  'MediumSecurity' => MediumSecurity,
111
111
  'HighSecurity' => HighSecurity,
112
112
  # SigningPolicy is not intended for use by `gem -P` so do not list it
113
- }
113
+ }.freeze
114
114
 
115
115
  end
116
-