rubygems-update 3.5.3 → 3.7.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1410 -686
- data/CODE_OF_CONDUCT.md +79 -28
- data/CONTRIBUTING.md +4 -226
- data/Manifest.txt +107 -83
- data/README.md +16 -11
- data/SECURITY.md +7 -0
- data/bundler/CHANGELOG.md +1525 -931
- data/bundler/README.md +9 -9
- data/bundler/bundler.gemspec +2 -2
- data/bundler/lib/bundler/build_metadata.rb +10 -11
- data/bundler/lib/bundler/checksum.rb +22 -12
- data/bundler/lib/bundler/cli/add.rb +3 -1
- data/bundler/lib/bundler/cli/binstubs.rb +1 -1
- data/bundler/lib/bundler/cli/check.rb +3 -3
- data/bundler/lib/bundler/cli/common.rb +1 -1
- data/bundler/lib/bundler/cli/config.rb +2 -2
- data/bundler/lib/bundler/cli/console.rb +8 -10
- data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
- data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
- data/bundler/lib/bundler/cli/doctor.rb +27 -151
- data/bundler/lib/bundler/cli/exec.rb +1 -0
- data/bundler/lib/bundler/cli/fund.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +74 -46
- data/bundler/lib/bundler/cli/info.rb +6 -6
- data/bundler/lib/bundler/cli/inject.rb +3 -3
- data/bundler/lib/bundler/cli/install.rb +19 -10
- data/bundler/lib/bundler/cli/issue.rb +3 -3
- data/bundler/lib/bundler/cli/lock.rb +32 -11
- data/bundler/lib/bundler/cli/outdated.rb +23 -23
- data/bundler/lib/bundler/cli/plugin.rb +3 -2
- data/bundler/lib/bundler/cli/pristine.rb +1 -1
- data/bundler/lib/bundler/cli/show.rb +3 -3
- data/bundler/lib/bundler/cli/update.rb +3 -3
- data/bundler/lib/bundler/cli.rb +75 -145
- data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
- data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
- data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +6 -16
- data/bundler/lib/bundler/compact_index_client.rb +52 -85
- data/bundler/lib/bundler/constants.rb +8 -1
- data/bundler/lib/bundler/current_ruby.rb +48 -34
- data/bundler/lib/bundler/definition.rb +501 -328
- data/bundler/lib/bundler/dependency.rb +93 -47
- data/bundler/lib/bundler/dsl.rb +147 -103
- data/bundler/lib/bundler/endpoint_specification.rb +30 -3
- data/bundler/lib/bundler/env.rb +1 -1
- data/bundler/lib/bundler/environment_preserver.rb +5 -23
- data/bundler/lib/bundler/errors.rb +53 -5
- data/bundler/lib/bundler/feature_flag.rb +18 -18
- data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
- data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
- data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
- data/bundler/lib/bundler/fetcher.rb +63 -26
- data/bundler/lib/bundler/force_platform.rb +0 -2
- data/bundler/lib/bundler/friendly_errors.rb +3 -2
- data/bundler/lib/bundler/gem_helper.rb +1 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
- data/bundler/lib/bundler/index.rb +7 -2
- data/bundler/lib/bundler/injector.rb +14 -16
- data/bundler/lib/bundler/inline.rb +42 -17
- data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
- data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
- data/bundler/lib/bundler/installer/standalone.rb +2 -5
- data/bundler/lib/bundler/installer.rb +22 -45
- data/bundler/lib/bundler/lazy_specification.rb +121 -48
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/lockfile_parser.rb +36 -9
- data/bundler/lib/bundler/man/bundle-add.1 +44 -27
- data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
- data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
- data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
- data/bundler/lib/bundler/man/bundle-check.1 +7 -5
- data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
- data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
- data/bundler/lib/bundler/man/bundle-config.1 +180 -138
- data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
- data/bundler/lib/bundler/man/bundle-console.1 +4 -6
- data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
- data/bundler/lib/bundler/man/bundle-doctor.1 +46 -7
- data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
- data/bundler/lib/bundler/man/bundle-env.1 +9 -0
- data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
- data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
- data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/bundler/lib/bundler/man/bundle-gem.1 +69 -28
- data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -6
- data/bundler/lib/bundler/man/bundle-help.1 +3 -3
- data/bundler/lib/bundler/man/bundle-info.1 +7 -4
- data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
- data/bundler/lib/bundler/man/bundle-init.1 +5 -5
- data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
- data/bundler/lib/bundler/man/bundle-inject.1 +13 -5
- data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
- data/bundler/lib/bundler/man/bundle-install.1 +20 -17
- data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
- data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
- data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
- data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/bundler/lib/bundler/man/bundle-list.1 +3 -3
- data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
- data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
- data/bundler/lib/bundler/man/bundle-open.1 +4 -4
- data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
- data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
- data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
- data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
- data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
- data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +7 -4
- data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
- data/bundler/lib/bundler/man/bundle-update.1 +17 -11
- data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
- data/bundler/lib/bundler/man/bundle-version.1 +3 -3
- data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
- data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
- data/bundler/lib/bundler/man/bundle.1 +3 -3
- data/bundler/lib/bundler/man/gemfile.5 +7 -5
- data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
- data/bundler/lib/bundler/man/index.txt +4 -0
- data/bundler/lib/bundler/match_metadata.rb +13 -0
- data/bundler/lib/bundler/match_platform.rb +31 -12
- data/bundler/lib/bundler/materialization.rb +59 -0
- data/bundler/lib/bundler/mirror.rb +3 -3
- data/bundler/lib/bundler/plugin/api/source.rb +5 -4
- data/bundler/lib/bundler/plugin/events.rb +24 -0
- data/bundler/lib/bundler/plugin/index.rb +5 -1
- data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
- data/bundler/lib/bundler/plugin/installer.rb +37 -17
- data/bundler/lib/bundler/plugin/source_list.rb +4 -4
- data/bundler/lib/bundler/plugin.rb +21 -2
- data/bundler/lib/bundler/process_lock.rb +10 -14
- data/bundler/lib/bundler/remote_specification.rb +6 -1
- data/bundler/lib/bundler/resolver/base.rb +14 -3
- data/bundler/lib/bundler/resolver/candidate.rb +18 -27
- data/bundler/lib/bundler/resolver/package.rb +20 -3
- data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
- data/bundler/lib/bundler/resolver/strategy.rb +40 -0
- data/bundler/lib/bundler/resolver.rb +114 -52
- data/bundler/lib/bundler/retry.rb +1 -1
- data/bundler/lib/bundler/ruby_dsl.rb +12 -3
- data/bundler/lib/bundler/ruby_version.rb +7 -1
- data/bundler/lib/bundler/rubygems_ext.rb +303 -150
- data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
- data/bundler/lib/bundler/rubygems_integration.rb +40 -73
- data/bundler/lib/bundler/runtime.rb +48 -35
- data/bundler/lib/bundler/self_manager.rb +36 -26
- data/bundler/lib/bundler/settings/validator.rb +0 -23
- data/bundler/lib/bundler/settings.rb +36 -27
- data/bundler/lib/bundler/setup.rb +6 -0
- data/bundler/lib/bundler/shared_helpers.rb +45 -25
- data/bundler/lib/bundler/source/gemspec.rb +1 -4
- data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
- data/bundler/lib/bundler/source/git.rb +113 -41
- data/bundler/lib/bundler/source/metadata.rb +4 -3
- data/bundler/lib/bundler/source/path.rb +14 -18
- data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
- data/bundler/lib/bundler/source/rubygems.rb +54 -48
- data/bundler/lib/bundler/source.rb +2 -0
- data/bundler/lib/bundler/source_list.rb +54 -12
- data/bundler/lib/bundler/source_map.rb +1 -1
- data/bundler/lib/bundler/spec_set.rb +227 -103
- data/bundler/lib/bundler/stub_specification.rb +29 -2
- data/bundler/lib/bundler/templates/Executable +0 -11
- data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
- data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
- data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +17 -15
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
- data/bundler/lib/bundler/ui/shell.rb +26 -4
- data/bundler/lib/bundler/ui/silent.rb +12 -1
- data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
- data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
- data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
- data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
- data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
- data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
- data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
- data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
- data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
- data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
- data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
- data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
- data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
- data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
- data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
- data/bundler/lib/bundler/vendored_net_http.rb +20 -5
- data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
- data/bundler/lib/bundler/vendored_timeout.rb +7 -3
- data/bundler/lib/bundler/vendored_uri.rb +18 -1
- data/bundler/lib/bundler/version.rb +10 -2
- data/bundler/lib/bundler/worker.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +12 -7
- data/bundler/lib/bundler.rb +101 -61
- data/{bundler → doc/bundler}/UPGRADING.md +132 -127
- data/doc/rubygems/CONTRIBUTING.md +227 -0
- data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
- data/exe/update_rubygems +1 -1
- data/lib/rubygems/basic_specification.rb +50 -10
- data/lib/rubygems/bundler_version_finder.rb +1 -1
- data/lib/rubygems/command.rb +1 -4
- data/lib/rubygems/command_manager.rb +5 -6
- data/lib/rubygems/commands/build_command.rb +2 -11
- data/lib/rubygems/commands/cleanup_command.rb +3 -13
- data/lib/rubygems/commands/contents_command.rb +17 -10
- data/lib/rubygems/commands/environment_command.rb +5 -0
- data/lib/rubygems/commands/exec_command.rb +18 -11
- data/lib/rubygems/commands/fetch_command.rb +14 -0
- data/lib/rubygems/commands/help_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +0 -4
- data/lib/rubygems/commands/pristine_command.rb +29 -19
- data/lib/rubygems/commands/push_command.rb +31 -6
- data/lib/rubygems/commands/rdoc_command.rb +3 -10
- data/lib/rubygems/commands/rebuild_command.rb +262 -0
- data/lib/rubygems/commands/setup_command.rb +13 -18
- data/lib/rubygems/commands/sources_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +9 -4
- data/lib/rubygems/commands/unpack_command.rb +0 -6
- data/lib/rubygems/commands/update_command.rb +13 -22
- data/lib/rubygems/config_file.rb +45 -16
- data/lib/rubygems/core_ext/kernel_require.rb +15 -3
- data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
- data/lib/rubygems/defaults.rb +7 -7
- data/lib/rubygems/dependency.rb +12 -16
- data/lib/rubygems/dependency_list.rb +1 -1
- data/lib/rubygems/deprecate.rb +79 -77
- data/lib/rubygems/errors.rb +2 -1
- data/lib/rubygems/exceptions.rb +2 -9
- data/lib/rubygems/ext/builder.rb +21 -8
- data/lib/rubygems/ext/cargo_builder.rb +16 -26
- data/lib/rubygems/ext/cmake_builder.rb +7 -2
- data/lib/rubygems/ext/configure_builder.rb +7 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
- data/lib/rubygems/ext/rake_builder.rb +7 -4
- data/lib/rubygems/gem_runner.rb +9 -0
- data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +11 -4
- data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
- data/lib/rubygems/gemcutter_utilities.rb +52 -26
- data/lib/rubygems/gemspec_helpers.rb +19 -0
- data/lib/rubygems/install_update_options.rb +5 -0
- data/lib/rubygems/installer.rb +76 -90
- data/lib/rubygems/local_remote_options.rb +8 -8
- data/lib/rubygems/package/tar_header.rb +31 -4
- data/lib/rubygems/package/tar_reader/entry.rb +1 -5
- data/lib/rubygems/package/tar_writer.rb +5 -4
- data/lib/rubygems/package.rb +13 -8
- data/lib/rubygems/platform.rb +148 -43
- data/lib/rubygems/psych_tree.rb +4 -0
- data/lib/rubygems/query_utils.rb +2 -2
- data/lib/rubygems/rdoc.rb +16 -3
- data/lib/rubygems/remote_fetcher.rb +6 -7
- data/lib/rubygems/request.rb +5 -5
- data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
- data/lib/rubygems/request_set.rb +4 -7
- data/lib/rubygems/requirement.rb +16 -12
- data/lib/rubygems/resolver/activation_request.rb +1 -1
- data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
- data/lib/rubygems/resolver/api_set.rb +13 -8
- data/lib/rubygems/resolver/best_set.rb +1 -29
- data/lib/rubygems/resolver/composed_set.rb +3 -3
- data/lib/rubygems/resolver/git_set.rb +0 -1
- data/lib/rubygems/resolver/index_set.rb +2 -2
- data/lib/rubygems/resolver/source_set.rb +1 -1
- data/lib/rubygems/resolver/spec_specification.rb +7 -0
- data/lib/rubygems/resolver.rb +8 -8
- data/lib/rubygems/s3_uri_signer.rb +8 -6
- data/lib/rubygems/safe_marshal/reader.rb +31 -14
- data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
- data/lib/rubygems/safe_yaml.rb +10 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +22 -17
- data/lib/rubygems/source/installed.rb +3 -1
- data/lib/rubygems/source/local.rb +8 -4
- data/lib/rubygems/source/specific_file.rb +5 -3
- data/lib/rubygems/source.rb +37 -29
- data/lib/rubygems/source_list.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +47 -15
- data/lib/rubygems/specification.rb +110 -183
- data/lib/rubygems/specification_policy.rb +33 -13
- data/lib/rubygems/specification_record.rb +212 -0
- data/lib/rubygems/stub_specification.rb +32 -10
- data/lib/rubygems/target_rbconfig.rb +50 -0
- data/lib/rubygems/uninstaller.rb +42 -22
- data/lib/rubygems/uri.rb +6 -6
- data/lib/rubygems/uri_formatter.rb +2 -1
- data/lib/rubygems/util/licenses.rb +118 -1
- data/lib/rubygems/util.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
- data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
- data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
- data/lib/rubygems/vendor/net-http/COPYING +56 -0
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +149 -70
- data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
- data/lib/rubygems/vendor/optparse/COPYING +56 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
- data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
- data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
- data/lib/rubygems/vendor/resolv/COPYING +56 -0
- data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +165 -69
- data/lib/rubygems/vendor/securerandom/COPYING +56 -0
- data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/rubygems/vendor/timeout/COPYING +56 -0
- data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
- data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
- data/lib/rubygems/vendor/uri/COPYING +56 -0
- data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
- data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
- data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
- data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
- data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
- data/lib/rubygems/vendored_molinillo.rb +3 -0
- data/lib/rubygems/vendored_net_http.rb +5 -0
- data/lib/rubygems/vendored_optparse.rb +3 -0
- data/lib/rubygems/vendored_securerandom.rb +3 -0
- data/lib/rubygems/vendored_timeout.rb +5 -0
- data/lib/rubygems/vendored_tsort.rb +3 -0
- data/lib/rubygems/version.rb +26 -9
- data/lib/rubygems/yaml_serializer.rb +12 -7
- data/lib/rubygems.rb +160 -53
- data/rubygems-update.gemspec +11 -6
- data/setup.rb +1 -1
- metadata +124 -96
- data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
- data/bundler/lib/bundler/gem_helpers.rb +0 -127
- data/bundler/lib/bundler/templates/Executable.bundler +0 -109
- data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
- data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
- data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
- data/bundler/lib/bundler/vendor/thor/.document +0 -1
- data/bundler/lib/bundler/vendor/tsort/.document +0 -1
- data/bundler/lib/bundler/vendor/uri/.document +0 -1
- data/lib/rubygems/net/http.rb +0 -3
- data/lib/rubygems/net-http/.document +0 -1
- data/lib/rubygems/net-http/LICENSE.txt +0 -22
- data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
- data/lib/rubygems/net-protocol/.document +0 -1
- data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
- data/lib/rubygems/optparse/.document +0 -1
- data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
- data/lib/rubygems/optparse.rb +0 -3
- data/lib/rubygems/resolv/.document +0 -1
- data/lib/rubygems/resolv/LICENSE.txt +0 -22
- data/lib/rubygems/resolver/molinillo/.document +0 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
- data/lib/rubygems/resolver/molinillo.rb +0 -3
- data/lib/rubygems/shellwords.rb +0 -3
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
- data/lib/rubygems/timeout/.document +0 -1
- data/lib/rubygems/timeout/LICENSE.txt +0 -22
- data/lib/rubygems/timeout.rb +0 -3
- data/lib/rubygems/tsort/.document +0 -1
- data/lib/rubygems/tsort/LICENSE.txt +0 -22
- data/lib/rubygems/tsort.rb +0 -3
- /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
- /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
- /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
- /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
- /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
- /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
- /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
- /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
- /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
- /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
- /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -3,11 +3,7 @@
|
|
3
3
|
require 'socket'
|
4
4
|
require_relative '../../timeout/lib/timeout'
|
5
5
|
require 'io/wait'
|
6
|
-
|
7
|
-
begin
|
8
|
-
require 'securerandom'
|
9
|
-
rescue LoadError
|
10
|
-
end
|
6
|
+
require_relative '../../../vendored_securerandom'
|
11
7
|
|
12
8
|
# Gem::Resolv is a thread-aware DNS resolver library written in Ruby. Gem::Resolv can
|
13
9
|
# handle multiple DNS requests concurrently without blocking the entire Ruby
|
@@ -37,7 +33,7 @@ end
|
|
37
33
|
|
38
34
|
class Gem::Resolv
|
39
35
|
|
40
|
-
VERSION = "0.
|
36
|
+
VERSION = "0.6.2"
|
41
37
|
|
42
38
|
##
|
43
39
|
# Looks up the first IP address for +name+.
|
@@ -83,9 +79,22 @@ class Gem::Resolv
|
|
83
79
|
|
84
80
|
##
|
85
81
|
# Creates a new Gem::Resolv using +resolvers+.
|
82
|
+
#
|
83
|
+
# If +resolvers+ is not given, a hash, or +nil+, uses a Hosts resolver and
|
84
|
+
# and a DNS resolver. If +resolvers+ is a hash, uses the hash as
|
85
|
+
# configuration for the DNS resolver.
|
86
|
+
|
87
|
+
def initialize(resolvers=(arg_not_set = true; nil), use_ipv6: (keyword_not_set = true; nil))
|
88
|
+
if !keyword_not_set && !arg_not_set
|
89
|
+
warn "Support for separate use_ipv6 keyword is deprecated, as it is ignored if an argument is provided. Do not provide a positional argument if using the use_ipv6 keyword argument.", uplevel: 1
|
90
|
+
end
|
86
91
|
|
87
|
-
|
88
|
-
|
92
|
+
@resolvers = case resolvers
|
93
|
+
when Hash, nil
|
94
|
+
[Hosts.new, DNS.new(DNS::Config.default_config_hash.merge(resolvers || {}))]
|
95
|
+
else
|
96
|
+
resolvers
|
97
|
+
end
|
89
98
|
end
|
90
99
|
|
91
100
|
##
|
@@ -164,13 +173,16 @@ class Gem::Resolv
|
|
164
173
|
|
165
174
|
class ResolvTimeout < Gem::Timeout::Error; end
|
166
175
|
|
176
|
+
WINDOWS = /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM || ::RbConfig::CONFIG['host_os'] =~ /mswin/
|
177
|
+
private_constant :WINDOWS
|
178
|
+
|
167
179
|
##
|
168
180
|
# Gem::Resolv::Hosts is a hostname resolver that uses the system hosts file.
|
169
181
|
|
170
182
|
class Hosts
|
171
|
-
if
|
183
|
+
if WINDOWS
|
172
184
|
begin
|
173
|
-
require 'win32/resolv'
|
185
|
+
require 'win32/resolv' unless defined?(Win32::Resolv)
|
174
186
|
DefaultFileName = Win32::Resolv.get_hosts_path || IO::NULL
|
175
187
|
rescue LoadError
|
176
188
|
end
|
@@ -194,17 +206,10 @@ class Gem::Resolv
|
|
194
206
|
File.open(@filename, 'rb') {|f|
|
195
207
|
f.each {|line|
|
196
208
|
line.sub!(/#.*/, '')
|
197
|
-
addr,
|
209
|
+
addr, *hostnames = line.split(/\s+/)
|
198
210
|
next unless addr
|
199
|
-
@addr2name[addr]
|
200
|
-
@
|
201
|
-
@addr2name[addr].concat(aliases)
|
202
|
-
@name2addr[hostname] = [] unless @name2addr.include? hostname
|
203
|
-
@name2addr[hostname] << addr
|
204
|
-
aliases.each {|n|
|
205
|
-
@name2addr[n] = [] unless @name2addr.include? n
|
206
|
-
@name2addr[n] << addr
|
207
|
-
}
|
211
|
+
(@addr2name[addr] ||= []).concat(hostnames)
|
212
|
+
hostnames.each {|hostname| (@name2addr[hostname] ||= []) << addr}
|
208
213
|
}
|
209
214
|
}
|
210
215
|
@name2addr.each {|name, arr| arr.reverse!}
|
@@ -403,13 +408,15 @@ class Gem::Resolv
|
|
403
408
|
# be a Gem::Resolv::IPv4 or Gem::Resolv::IPv6
|
404
409
|
|
405
410
|
def each_address(name)
|
406
|
-
each_resource(name, Resource::IN::A) {|resource| yield resource.address}
|
407
411
|
if use_ipv6?
|
408
412
|
each_resource(name, Resource::IN::AAAA) {|resource| yield resource.address}
|
409
413
|
end
|
414
|
+
each_resource(name, Resource::IN::A) {|resource| yield resource.address}
|
410
415
|
end
|
411
416
|
|
412
417
|
def use_ipv6? # :nodoc:
|
418
|
+
@config.lazy_initialize unless @config.instance_variable_get(:@initialized)
|
419
|
+
|
413
420
|
use_ipv6 = @config.use_ipv6?
|
414
421
|
unless use_ipv6.nil?
|
415
422
|
return use_ipv6
|
@@ -520,35 +527,40 @@ class Gem::Resolv
|
|
520
527
|
|
521
528
|
def fetch_resource(name, typeclass)
|
522
529
|
lazy_initialize
|
523
|
-
|
524
|
-
|
530
|
+
truncated = {}
|
531
|
+
requesters = {}
|
532
|
+
udp_requester = begin
|
533
|
+
make_udp_requester
|
525
534
|
rescue Errno::EACCES
|
526
535
|
# fall back to TCP
|
527
536
|
end
|
528
537
|
senders = {}
|
538
|
+
|
529
539
|
begin
|
530
|
-
@config.resolv(name)
|
531
|
-
requester ||= make_tcp_requester(nameserver, port)
|
540
|
+
@config.resolv(name) do |candidate, tout, nameserver, port|
|
532
541
|
msg = Message.new
|
533
542
|
msg.rd = 1
|
534
543
|
msg.add_question(candidate, typeclass)
|
535
|
-
|
544
|
+
|
545
|
+
requester = requesters.fetch([nameserver, port]) do
|
546
|
+
if !truncated[candidate] && udp_requester
|
547
|
+
udp_requester
|
548
|
+
else
|
549
|
+
requesters[[nameserver, port]] = make_tcp_requester(nameserver, port)
|
550
|
+
end
|
551
|
+
end
|
552
|
+
|
553
|
+
unless sender = senders[[candidate, requester, nameserver, port]]
|
536
554
|
sender = requester.sender(msg, candidate, nameserver, port)
|
537
555
|
next if !sender
|
538
|
-
senders[[candidate, nameserver, port]] = sender
|
556
|
+
senders[[candidate, requester, nameserver, port]] = sender
|
539
557
|
end
|
540
558
|
reply, reply_name = requester.request(sender, tout)
|
541
559
|
case reply.rcode
|
542
560
|
when RCode::NoError
|
543
561
|
if reply.tc == 1 and not Requester::TCP === requester
|
544
|
-
requester.close
|
545
562
|
# Retry via TCP:
|
546
|
-
|
547
|
-
senders = {}
|
548
|
-
# This will use TCP for all remaining candidates (assuming the
|
549
|
-
# current candidate does not already respond successfully via
|
550
|
-
# TCP). This makes sense because we already know the full
|
551
|
-
# response will not fit in an untruncated UDP packet.
|
563
|
+
truncated[candidate] = true
|
552
564
|
redo
|
553
565
|
else
|
554
566
|
yield(reply, reply_name)
|
@@ -559,9 +571,10 @@ class Gem::Resolv
|
|
559
571
|
else
|
560
572
|
raise Config::OtherResolvError.new(reply_name.to_s)
|
561
573
|
end
|
562
|
-
|
574
|
+
end
|
563
575
|
ensure
|
564
|
-
|
576
|
+
udp_requester&.close
|
577
|
+
requesters.each_value { |requester| requester&.close }
|
565
578
|
end
|
566
579
|
end
|
567
580
|
|
@@ -576,6 +589,11 @@ class Gem::Resolv
|
|
576
589
|
|
577
590
|
def make_tcp_requester(host, port) # :nodoc:
|
578
591
|
return Requester::TCP.new(host, port)
|
592
|
+
rescue Errno::ECONNREFUSED
|
593
|
+
# Treat a refused TCP connection attempt to a nameserver like a timeout,
|
594
|
+
# as Gem::Resolv::DNS::Config#resolv considers ResolvTimeout exceptions as a
|
595
|
+
# hint to try the next nameserver:
|
596
|
+
raise ResolvTimeout
|
579
597
|
end
|
580
598
|
|
581
599
|
def extract_resources(msg, name, typeclass) # :nodoc:
|
@@ -609,16 +627,10 @@ class Gem::Resolv
|
|
609
627
|
}
|
610
628
|
end
|
611
629
|
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
rescue NotImplementedError
|
617
|
-
rand(arg)
|
618
|
-
end
|
619
|
-
end
|
620
|
-
else
|
621
|
-
def self.random(arg) # :nodoc:
|
630
|
+
def self.random(arg) # :nodoc:
|
631
|
+
begin
|
632
|
+
Gem::SecureRandom.random_number(arg)
|
633
|
+
rescue NotImplementedError
|
622
634
|
rand(arg)
|
623
635
|
end
|
624
636
|
end
|
@@ -650,8 +662,20 @@ class Gem::Resolv
|
|
650
662
|
}
|
651
663
|
end
|
652
664
|
|
653
|
-
|
654
|
-
|
665
|
+
case RUBY_PLATFORM
|
666
|
+
when *[
|
667
|
+
# https://www.rfc-editor.org/rfc/rfc6056.txt
|
668
|
+
# Appendix A. Survey of the Algorithms in Use by Some Popular Implementations
|
669
|
+
/freebsd/, /linux/, /netbsd/, /openbsd/, /solaris/,
|
670
|
+
/darwin/, # the same as FreeBSD
|
671
|
+
] then
|
672
|
+
def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
|
673
|
+
udpsock.bind(bind_host, 0)
|
674
|
+
end
|
675
|
+
else
|
676
|
+
# Sequential port assignment
|
677
|
+
def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
|
678
|
+
# Ephemeral port number range recommended by RFC 6056
|
655
679
|
port = random(1024..65535)
|
656
680
|
udpsock.bind(bind_host, port)
|
657
681
|
rescue Errno::EADDRINUSE, # POSIX
|
@@ -974,13 +998,13 @@ class Gem::Resolv
|
|
974
998
|
next unless keyword
|
975
999
|
case keyword
|
976
1000
|
when 'nameserver'
|
977
|
-
nameserver.concat(args)
|
1001
|
+
nameserver.concat(args.each(&:freeze))
|
978
1002
|
when 'domain'
|
979
1003
|
next if args.empty?
|
980
|
-
search = [args[0]]
|
1004
|
+
search = [args[0].freeze]
|
981
1005
|
when 'search'
|
982
1006
|
next if args.empty?
|
983
|
-
search = args
|
1007
|
+
search = args.each(&:freeze)
|
984
1008
|
when 'options'
|
985
1009
|
args.each {|arg|
|
986
1010
|
case arg
|
@@ -991,22 +1015,22 @@ class Gem::Resolv
|
|
991
1015
|
end
|
992
1016
|
}
|
993
1017
|
}
|
994
|
-
return { :nameserver => nameserver, :search => search, :ndots => ndots }
|
1018
|
+
return { :nameserver => nameserver.freeze, :search => search.freeze, :ndots => ndots.freeze }.freeze
|
995
1019
|
end
|
996
1020
|
|
997
1021
|
def Config.default_config_hash(filename="/etc/resolv.conf")
|
998
1022
|
if File.exist? filename
|
999
|
-
|
1023
|
+
Config.parse_resolv_conf(filename)
|
1024
|
+
elsif WINDOWS
|
1025
|
+
require 'win32/resolv' unless defined?(Win32::Resolv)
|
1026
|
+
search, nameserver = Win32::Resolv.get_resolv_info
|
1027
|
+
config_hash = {}
|
1028
|
+
config_hash[:nameserver] = nameserver if nameserver
|
1029
|
+
config_hash[:search] = [search].flatten if search
|
1030
|
+
config_hash
|
1000
1031
|
else
|
1001
|
-
|
1002
|
-
require 'win32/resolv'
|
1003
|
-
search, nameserver = Win32::Resolv.get_resolv_info
|
1004
|
-
config_hash = {}
|
1005
|
-
config_hash[:nameserver] = nameserver if nameserver
|
1006
|
-
config_hash[:search] = [search].flatten if search
|
1007
|
-
end
|
1032
|
+
{}
|
1008
1033
|
end
|
1009
|
-
config_hash || {}
|
1010
1034
|
end
|
1011
1035
|
|
1012
1036
|
def lazy_initialize
|
@@ -1655,6 +1679,7 @@ class Gem::Resolv
|
|
1655
1679
|
prev_index = @index
|
1656
1680
|
save_index = nil
|
1657
1681
|
d = []
|
1682
|
+
size = -1
|
1658
1683
|
while true
|
1659
1684
|
raise DecodeError.new("limit exceeded") if @limit <= @index
|
1660
1685
|
case @data.getbyte(@index)
|
@@ -1675,7 +1700,10 @@ class Gem::Resolv
|
|
1675
1700
|
end
|
1676
1701
|
@index = idx
|
1677
1702
|
else
|
1678
|
-
|
1703
|
+
l = self.get_label
|
1704
|
+
d << l
|
1705
|
+
size += 1 + l.string.bytesize
|
1706
|
+
raise DecodeError.new("name label data exceed 255 octets") if size > 255
|
1679
1707
|
end
|
1680
1708
|
end
|
1681
1709
|
end
|
@@ -1807,7 +1835,6 @@ class Gem::Resolv
|
|
1807
1835
|
end
|
1808
1836
|
end
|
1809
1837
|
|
1810
|
-
|
1811
1838
|
##
|
1812
1839
|
# Base class for SvcParam. [RFC9460]
|
1813
1840
|
|
@@ -2102,7 +2129,14 @@ class Gem::Resolv
|
|
2102
2129
|
|
2103
2130
|
attr_reader :ttl
|
2104
2131
|
|
2105
|
-
ClassHash =
|
2132
|
+
ClassHash = Module.new do
|
2133
|
+
module_function
|
2134
|
+
|
2135
|
+
def []=(type_class_value, klass)
|
2136
|
+
type_value, class_value = type_class_value
|
2137
|
+
Resource.const_set(:"Type#{type_value}_Class#{class_value}", klass)
|
2138
|
+
end
|
2139
|
+
end
|
2106
2140
|
|
2107
2141
|
def encode_rdata(msg) # :nodoc:
|
2108
2142
|
raise NotImplementedError.new
|
@@ -2140,7 +2174,9 @@ class Gem::Resolv
|
|
2140
2174
|
end
|
2141
2175
|
|
2142
2176
|
def self.get_class(type_value, class_value) # :nodoc:
|
2143
|
-
|
2177
|
+
cache = :"Type#{type_value}_Class#{class_value}"
|
2178
|
+
|
2179
|
+
return (const_defined?(cache) && const_get(cache)) ||
|
2144
2180
|
Generic.create(type_value, class_value)
|
2145
2181
|
end
|
2146
2182
|
|
@@ -2506,7 +2542,6 @@ class Gem::Resolv
|
|
2506
2542
|
|
2507
2543
|
attr_reader :altitude
|
2508
2544
|
|
2509
|
-
|
2510
2545
|
def encode_rdata(msg) # :nodoc:
|
2511
2546
|
msg.put_bytes(@version)
|
2512
2547
|
msg.put_bytes(@ssize.scalar)
|
@@ -2544,8 +2579,70 @@ class Gem::Resolv
|
|
2544
2579
|
TypeValue = 255 # :nodoc:
|
2545
2580
|
end
|
2546
2581
|
|
2582
|
+
##
|
2583
|
+
# CAA resource record defined in RFC 8659
|
2584
|
+
#
|
2585
|
+
# These records identify certificate authority allowed to issue
|
2586
|
+
# certificates for the given domain.
|
2587
|
+
|
2588
|
+
class CAA < Resource
|
2589
|
+
TypeValue = 257
|
2590
|
+
|
2591
|
+
##
|
2592
|
+
# Creates a new CAA for +flags+, +tag+ and +value+.
|
2593
|
+
|
2594
|
+
def initialize(flags, tag, value)
|
2595
|
+
unless (0..255) === flags
|
2596
|
+
raise ArgumentError.new('flags must be an Integer between 0 and 255')
|
2597
|
+
end
|
2598
|
+
unless (1..15) === tag.bytesize
|
2599
|
+
raise ArgumentError.new('length of tag must be between 1 and 15')
|
2600
|
+
end
|
2601
|
+
|
2602
|
+
@flags = flags
|
2603
|
+
@tag = tag
|
2604
|
+
@value = value
|
2605
|
+
end
|
2606
|
+
|
2607
|
+
##
|
2608
|
+
# Flags for this property:
|
2609
|
+
# - Bit 0 : 0 = not critical, 1 = critical
|
2610
|
+
|
2611
|
+
attr_reader :flags
|
2612
|
+
|
2613
|
+
##
|
2614
|
+
# Property tag ("issue", "issuewild", "iodef"...).
|
2615
|
+
|
2616
|
+
attr_reader :tag
|
2617
|
+
|
2618
|
+
##
|
2619
|
+
# Property value.
|
2620
|
+
|
2621
|
+
attr_reader :value
|
2622
|
+
|
2623
|
+
##
|
2624
|
+
# Whether the critical flag is set on this property.
|
2625
|
+
|
2626
|
+
def critical?
|
2627
|
+
flags & 0x80 != 0
|
2628
|
+
end
|
2629
|
+
|
2630
|
+
def encode_rdata(msg) # :nodoc:
|
2631
|
+
msg.put_pack('C', @flags)
|
2632
|
+
msg.put_string(@tag)
|
2633
|
+
msg.put_bytes(@value)
|
2634
|
+
end
|
2635
|
+
|
2636
|
+
def self.decode_rdata(msg) # :nodoc:
|
2637
|
+
flags, = msg.get_unpack('C')
|
2638
|
+
tag = msg.get_string
|
2639
|
+
value = msg.get_bytes
|
2640
|
+
self.new flags, tag, value
|
2641
|
+
end
|
2642
|
+
end
|
2643
|
+
|
2547
2644
|
ClassInsensitiveTypes = [ # :nodoc:
|
2548
|
-
NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, LOC, ANY
|
2645
|
+
NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, LOC, ANY, CAA
|
2549
2646
|
]
|
2550
2647
|
|
2551
2648
|
##
|
@@ -2771,7 +2868,7 @@ class Gem::Resolv
|
|
2771
2868
|
attr_reader :target
|
2772
2869
|
|
2773
2870
|
##
|
2774
|
-
# The service
|
2871
|
+
# The service parameters for the target host.
|
2775
2872
|
|
2776
2873
|
attr_reader :params
|
2777
2874
|
|
@@ -3384,4 +3481,3 @@ class Gem::Resolv
|
|
3384
3481
|
AddressRegex = /(?:#{IPv4::Regex})|(?:#{IPv6::Regex})/
|
3385
3482
|
|
3386
3483
|
end
|
3387
|
-
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a. place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b. use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c. give non-standard binaries non-standard names, with
|
21
|
+
instructions on where to get the original software distribution.
|
22
|
+
|
23
|
+
d. make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or binary form,
|
26
|
+
provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a. distribute the binaries and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b. accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c. give non-standard binaries non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d. make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under these terms.
|
43
|
+
|
44
|
+
For the list of those files and their copying conditions, see the
|
45
|
+
file LEGAL.
|
46
|
+
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
48
|
+
output from the software do not automatically fall under the
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
51
|
+
software.
|
52
|
+
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
56
|
+
PURPOSE.
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# -*- coding: us-ascii -*-
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'random/formatter'
|
5
|
+
|
6
|
+
# == Secure random number generator interface.
|
7
|
+
#
|
8
|
+
# This library is an interface to secure random number generators which are
|
9
|
+
# suitable for generating session keys in HTTP cookies, etc.
|
10
|
+
#
|
11
|
+
# You can use this library in your application by requiring it:
|
12
|
+
#
|
13
|
+
# require 'rubygems/vendor/securerandom/lib/securerandom'
|
14
|
+
#
|
15
|
+
# It supports the following secure random number generators:
|
16
|
+
#
|
17
|
+
# * openssl
|
18
|
+
# * /dev/urandom
|
19
|
+
# * Win32
|
20
|
+
#
|
21
|
+
# Gem::SecureRandom is extended by the Random::Formatter module which
|
22
|
+
# defines the following methods:
|
23
|
+
#
|
24
|
+
# * alphanumeric
|
25
|
+
# * base64
|
26
|
+
# * choose
|
27
|
+
# * gen_random
|
28
|
+
# * hex
|
29
|
+
# * rand
|
30
|
+
# * random_bytes
|
31
|
+
# * random_number
|
32
|
+
# * urlsafe_base64
|
33
|
+
# * uuid
|
34
|
+
#
|
35
|
+
# These methods are usable as class methods of Gem::SecureRandom such as
|
36
|
+
# +Gem::SecureRandom.hex+.
|
37
|
+
#
|
38
|
+
# If a secure random number generator is not available,
|
39
|
+
# +NotImplementedError+ is raised.
|
40
|
+
|
41
|
+
module Gem::SecureRandom
|
42
|
+
|
43
|
+
# The version
|
44
|
+
VERSION = "0.4.1"
|
45
|
+
|
46
|
+
class << self
|
47
|
+
# Returns a random binary string containing +size+ bytes.
|
48
|
+
#
|
49
|
+
# See Random.bytes
|
50
|
+
def bytes(n)
|
51
|
+
return gen_random(n)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Compatibility methods for Ruby 3.2, we can remove this after dropping to support Ruby 3.2
|
55
|
+
def alphanumeric(n = nil, chars: ALPHANUMERIC)
|
56
|
+
n = 16 if n.nil?
|
57
|
+
choose(chars, n)
|
58
|
+
end if RUBY_VERSION < '3.3'
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
# :stopdoc:
|
63
|
+
|
64
|
+
# Implementation using OpenSSL
|
65
|
+
def gen_random_openssl(n)
|
66
|
+
return OpenSSL::Random.random_bytes(n)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Implementation using system random device
|
70
|
+
def gen_random_urandom(n)
|
71
|
+
ret = Random.urandom(n)
|
72
|
+
unless ret
|
73
|
+
raise NotImplementedError, "No random device"
|
74
|
+
end
|
75
|
+
unless ret.length == n
|
76
|
+
raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes"
|
77
|
+
end
|
78
|
+
ret
|
79
|
+
end
|
80
|
+
|
81
|
+
begin
|
82
|
+
# Check if Random.urandom is available
|
83
|
+
Random.urandom(1)
|
84
|
+
alias gen_random gen_random_urandom
|
85
|
+
rescue RuntimeError
|
86
|
+
begin
|
87
|
+
require 'openssl'
|
88
|
+
rescue NoMethodError
|
89
|
+
raise NotImplementedError, "No random device"
|
90
|
+
else
|
91
|
+
alias gen_random gen_random_openssl
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# :startdoc:
|
96
|
+
|
97
|
+
# Generate random data bytes for Random::Formatter
|
98
|
+
public :gen_random
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
Gem::SecureRandom.extend(Random::Formatter)
|
@@ -0,0 +1,56 @@
|
|
1
|
+
Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
|
2
|
+
You can redistribute it and/or modify it under either the terms of the
|
3
|
+
2-clause BSDL (see the file BSDL), or the conditions below:
|
4
|
+
|
5
|
+
1. You may make and give away verbatim copies of the source form of the
|
6
|
+
software without restriction, provided that you duplicate all of the
|
7
|
+
original copyright notices and associated disclaimers.
|
8
|
+
|
9
|
+
2. You may modify your copy of the software in any way, provided that
|
10
|
+
you do at least ONE of the following:
|
11
|
+
|
12
|
+
a. place your modifications in the Public Domain or otherwise
|
13
|
+
make them Freely Available, such as by posting said
|
14
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
15
|
+
the author to include your modifications in the software.
|
16
|
+
|
17
|
+
b. use the modified software only within your corporation or
|
18
|
+
organization.
|
19
|
+
|
20
|
+
c. give non-standard binaries non-standard names, with
|
21
|
+
instructions on where to get the original software distribution.
|
22
|
+
|
23
|
+
d. make other distribution arrangements with the author.
|
24
|
+
|
25
|
+
3. You may distribute the software in object code or binary form,
|
26
|
+
provided that you do at least ONE of the following:
|
27
|
+
|
28
|
+
a. distribute the binaries and library files of the software,
|
29
|
+
together with instructions (in the manual page or equivalent)
|
30
|
+
on where to get the original distribution.
|
31
|
+
|
32
|
+
b. accompany the distribution with the machine-readable source of
|
33
|
+
the software.
|
34
|
+
|
35
|
+
c. give non-standard binaries non-standard names, with
|
36
|
+
instructions on where to get the original software distribution.
|
37
|
+
|
38
|
+
d. make other distribution arrangements with the author.
|
39
|
+
|
40
|
+
4. You may modify and include the part of the software into any other
|
41
|
+
software (possibly commercial). But some files in the distribution
|
42
|
+
are not written by the author, so that they are not under these terms.
|
43
|
+
|
44
|
+
For the list of those files and their copying conditions, see the
|
45
|
+
file LEGAL.
|
46
|
+
|
47
|
+
5. The scripts and library files supplied as input to or produced as
|
48
|
+
output from the software do not automatically fall under the
|
49
|
+
copyright of the software, but belong to whomever generated them,
|
50
|
+
and may be sold commercially, and may be aggregated with this
|
51
|
+
software.
|
52
|
+
|
53
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
54
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
55
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
56
|
+
PURPOSE.
|
@@ -3,8 +3,8 @@
|
|
3
3
|
#
|
4
4
|
# == Synopsis
|
5
5
|
#
|
6
|
-
# require 'rubygems/timeout/lib/timeout'
|
7
|
-
# status = Gem::Timeout
|
6
|
+
# require 'rubygems/vendor/timeout/lib/timeout'
|
7
|
+
# status = Gem::Timeout.timeout(5) {
|
8
8
|
# # Something that should be interrupted if it takes more than 5 seconds...
|
9
9
|
# }
|
10
10
|
#
|
@@ -13,28 +13,25 @@
|
|
13
13
|
# Gem::Timeout provides a way to auto-terminate a potentially long-running
|
14
14
|
# operation if it hasn't finished in a fixed amount of time.
|
15
15
|
#
|
16
|
-
# Previous versions didn't use a module for namespacing, however
|
17
|
-
# #timeout is provided for backwards compatibility. You
|
18
|
-
# should prefer Gem::Timeout.timeout instead.
|
19
|
-
#
|
20
16
|
# == Copyright
|
21
17
|
#
|
22
18
|
# Copyright:: (C) 2000 Network Applied Communication Laboratory, Inc.
|
23
19
|
# Copyright:: (C) 2000 Information-technology Promotion Agency, Japan
|
24
20
|
|
25
21
|
module Gem::Timeout
|
26
|
-
|
22
|
+
# The version
|
23
|
+
VERSION = "0.4.3"
|
27
24
|
|
28
25
|
# Internal error raised to when a timeout is triggered.
|
29
26
|
class ExitException < Exception
|
30
|
-
def exception(*)
|
27
|
+
def exception(*) # :nodoc:
|
31
28
|
self
|
32
29
|
end
|
33
30
|
end
|
34
31
|
|
35
32
|
# Raised by Gem::Timeout.timeout when the block times out.
|
36
33
|
class Error < RuntimeError
|
37
|
-
def self.handle_timeout(message)
|
34
|
+
def self.handle_timeout(message) # :nodoc:
|
38
35
|
exc = ExitException.new(message)
|
39
36
|
|
40
37
|
begin
|
@@ -144,9 +141,10 @@ module Gem::Timeout
|
|
144
141
|
# Perform an operation in a block, raising an error if it takes longer than
|
145
142
|
# +sec+ seconds to complete.
|
146
143
|
#
|
147
|
-
# +sec+:: Number of seconds to wait for the block to terminate. Any number
|
148
|
-
# may be used, including Floats to specify fractional seconds. A
|
144
|
+
# +sec+:: Number of seconds to wait for the block to terminate. Any non-negative number
|
145
|
+
# or nil may be used, including Floats to specify fractional seconds. A
|
149
146
|
# value of 0 or +nil+ will execute the block without any timeout.
|
147
|
+
# Any negative number will raise an ArgumentError.
|
150
148
|
# +klass+:: Exception Class to raise if the block fails to terminate
|
151
149
|
# in +sec+ seconds. Omitting will use the default, Gem::Timeout::Error
|
152
150
|
# +message+:: Error message to raise with Exception Class.
|
@@ -168,6 +166,7 @@ module Gem::Timeout
|
|
168
166
|
# a module method, so you can call it directly as Gem::Timeout.timeout().
|
169
167
|
def timeout(sec, klass = nil, message = nil, &block) #:yield: +sec+
|
170
168
|
return yield(sec) if sec == nil or sec.zero?
|
169
|
+
raise ArgumentError, "Timeout sec must be a non-negative number" if 0 > sec
|
171
170
|
|
172
171
|
message ||= "execution expired"
|
173
172
|
|