puppet 6.20.0-x64-mingw32 → 7.0.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.
- checksums.yaml +4 -4
- data/CODEOWNERS +16 -2
- data/Gemfile +0 -2
- data/Gemfile.lock +18 -24
- data/README.md +1 -1
- data/conf/fileserver.conf +5 -10
- data/ext/build_defaults.yaml +1 -1
- data/ext/osx/file_mapping.yaml +0 -5
- data/ext/project_data.yaml +1 -14
- data/ext/redhat/puppet.spec.erb +0 -1
- data/ext/windows/service/daemon.rb +6 -5
- data/install.rb +21 -17
- data/lib/puppet.rb +11 -20
- data/lib/puppet/application.rb +178 -108
- data/lib/puppet/application/agent.rb +0 -1
- data/lib/puppet/application/apply.rb +2 -3
- data/lib/puppet/application/device.rb +100 -105
- data/lib/puppet/application/filebucket.rb +13 -9
- data/lib/puppet/application/script.rb +0 -1
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/application_support.rb +0 -7
- data/lib/puppet/configurer.rb +30 -45
- data/lib/puppet/configurer/plugin_handler.rb +21 -19
- data/lib/puppet/defaults.rb +97 -167
- data/lib/puppet/environments.rb +59 -58
- data/lib/puppet/face/facts.rb +51 -51
- data/lib/puppet/face/help.rb +1 -1
- data/lib/puppet/face/plugin.rb +5 -8
- data/lib/puppet/ffi/windows.rb +12 -0
- data/lib/puppet/ffi/windows/api_types.rb +311 -0
- data/lib/puppet/ffi/windows/constants.rb +404 -0
- data/lib/puppet/ffi/windows/functions.rb +628 -0
- data/lib/puppet/ffi/windows/structs.rb +338 -0
- data/lib/puppet/file_serving/configuration.rb +0 -5
- data/lib/puppet/file_serving/configuration/parser.rb +3 -32
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_serving/mount.rb +1 -2
- data/lib/puppet/forge/repository.rb +0 -1
- data/lib/puppet/generate/models/type/type.rb +4 -1
- data/lib/puppet/http.rb +22 -13
- data/lib/puppet/http/client.rb +164 -114
- data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
- data/lib/puppet/http/errors.rb +16 -0
- data/lib/puppet/http/external_client.rb +5 -7
- data/lib/puppet/{network/http → http}/factory.rb +8 -11
- data/lib/puppet/{network/http → http}/pool.rb +61 -26
- data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
- data/lib/puppet/http/proxy.rb +137 -0
- data/lib/puppet/http/redirector.rb +4 -12
- data/lib/puppet/http/resolver.rb +5 -15
- data/lib/puppet/http/resolver/server_list.rb +6 -10
- data/lib/puppet/http/resolver/settings.rb +4 -7
- data/lib/puppet/http/resolver/srv.rb +7 -11
- data/lib/puppet/http/response.rb +36 -54
- data/lib/puppet/http/response_converter.rb +24 -0
- data/lib/puppet/http/response_net_http.rb +42 -0
- data/lib/puppet/http/retry_after_handler.rb +4 -13
- data/lib/puppet/http/service.rb +12 -26
- data/lib/puppet/http/service/ca.rb +11 -22
- data/lib/puppet/http/service/compiler.rb +22 -69
- data/lib/puppet/http/service/file_server.rb +18 -27
- data/lib/puppet/http/service/puppetserver.rb +26 -12
- data/lib/puppet/http/service/report.rb +8 -10
- data/lib/puppet/http/session.rb +11 -20
- data/lib/puppet/{network/http → http}/site.rb +1 -2
- data/lib/puppet/indirector/catalog/rest.rb +2 -4
- data/lib/puppet/indirector/facts/facter.rb +24 -3
- data/lib/puppet/indirector/facts/rest.rb +3 -22
- data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
- data/lib/puppet/indirector/file_content/rest.rb +2 -6
- data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
- data/lib/puppet/indirector/file_server.rb +1 -8
- data/lib/puppet/indirector/generic_http.rb +0 -11
- data/lib/puppet/indirector/node/rest.rb +2 -4
- data/lib/puppet/indirector/report/rest.rb +3 -8
- data/lib/puppet/indirector/request.rb +0 -101
- data/lib/puppet/indirector/rest.rb +12 -263
- data/lib/puppet/module_tool/applications.rb +0 -1
- data/lib/puppet/module_tool/applications/installer.rb +2 -48
- data/lib/puppet/module_tool/errors/shared.rb +2 -17
- data/lib/puppet/network/authconfig.rb +2 -96
- data/lib/puppet/network/authorization.rb +13 -35
- data/lib/puppet/network/http.rb +3 -3
- data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
- data/lib/puppet/network/http/api/master/v3.rb +11 -13
- data/lib/puppet/network/http/connection.rb +247 -316
- data/lib/puppet/network/http/handler.rb +0 -1
- data/lib/puppet/network/http_pool.rb +16 -34
- data/lib/puppet/node.rb +1 -30
- data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
- data/lib/puppet/pal/pal_impl.rb +3 -1
- data/lib/puppet/parser/ast/leaf.rb +2 -3
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
- data/lib/puppet/parser/compiler.rb +0 -198
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
- data/lib/puppet/parser/resource.rb +0 -69
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +3 -5
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +0 -5
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/issues.rb +0 -5
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
- data/lib/puppet/pops/model/ast.pp +0 -42
- data/lib/puppet/pops/model/ast.rb +0 -290
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +0 -45
- data/lib/puppet/pops/model/model_label_provider.rb +0 -5
- data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
- data/lib/puppet/pops/model/pn_transformer.rb +0 -16
- data/lib/puppet/pops/parser/egrammar.ra +0 -56
- data/lib/puppet/pops/parser/eparser.rb +1520 -1712
- data/lib/puppet/pops/parser/lexer2.rb +4 -4
- data/lib/puppet/pops/parser/parser_support.rb +0 -5
- data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
- data/lib/puppet/pops/types/type_calculator.rb +0 -7
- data/lib/puppet/pops/types/type_parser.rb +0 -4
- data/lib/puppet/pops/types/types.rb +0 -1
- data/lib/puppet/pops/validation/checker4_0.rb +9 -37
- data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
- data/lib/puppet/provider.rb +0 -13
- data/lib/puppet/provider/nameservice.rb +0 -18
- data/lib/puppet/provider/package/apt.rb +0 -4
- data/lib/puppet/provider/package/dpkg.rb +0 -10
- data/lib/puppet/provider/package/gem.rb +23 -3
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pkg.rb +0 -4
- data/lib/puppet/provider/package/portage.rb +1 -1
- data/lib/puppet/provider/package/puppet_gem.rb +1 -4
- data/lib/puppet/provider/service/smf.rb +191 -73
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/directoryservice.rb +0 -10
- data/lib/puppet/reference/configuration.rb +7 -6
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/resource.rb +1 -89
- data/lib/puppet/resource/catalog.rb +1 -14
- data/lib/puppet/resource/type.rb +3 -119
- data/lib/puppet/resource/type_collection.rb +3 -48
- data/lib/puppet/runtime.rb +1 -2
- data/lib/puppet/settings.rb +73 -66
- data/lib/puppet/settings/integer_setting.rb +17 -0
- data/lib/puppet/settings/port_setting.rb +15 -0
- data/lib/puppet/settings/priority_setting.rb +5 -4
- data/lib/puppet/ssl.rb +10 -6
- data/lib/puppet/ssl/base.rb +3 -5
- data/lib/puppet/ssl/certificate.rb +0 -6
- data/lib/puppet/ssl/certificate_request.rb +1 -12
- data/lib/puppet/ssl/certificate_signer.rb +6 -0
- data/lib/puppet/ssl/oids.rb +3 -1
- data/lib/puppet/ssl/ssl_provider.rb +17 -0
- data/lib/puppet/ssl/state_machine.rb +3 -1
- data/lib/puppet/ssl/verifier.rb +2 -0
- data/lib/puppet/test/test_helper.rb +1 -3
- data/lib/puppet/transaction.rb +1 -7
- data/lib/puppet/transaction/report.rb +2 -4
- data/lib/puppet/type.rb +0 -76
- data/lib/puppet/type/file.rb +5 -7
- data/lib/puppet/type/file/checksum.rb +1 -1
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/filebucket.rb +3 -3
- data/lib/puppet/type/package.rb +5 -13
- data/lib/puppet/util/autoload.rb +8 -1
- data/lib/puppet/util/execution.rb +0 -11
- data/lib/puppet/util/http_proxy.rb +2 -215
- data/lib/puppet/util/monkey_patches.rb +0 -46
- data/lib/puppet/util/posix.rb +5 -54
- data/lib/puppet/util/rdoc.rb +0 -7
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/run_mode.rb +9 -1
- data/lib/puppet/util/windows.rb +3 -8
- data/lib/puppet/util/windows/daemon.rb +360 -0
- data/lib/puppet/util/windows/error.rb +1 -0
- data/lib/puppet/util/windows/eventlog.rb +4 -9
- data/lib/puppet/util/windows/file.rb +8 -242
- data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
- data/lib/puppet/util/windows/process.rb +4 -226
- data/lib/puppet/util/windows/service.rb +9 -460
- data/lib/puppet/util/windows/string.rb +12 -13
- data/lib/puppet/util/yaml.rb +0 -22
- data/lib/puppet/vendor/require_vendored.rb +0 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509.rb +5 -1
- data/lib/puppet/x509/cert_provider.rb +29 -1
- data/locales/puppet.pot +587 -1312
- data/man/man5/puppet.conf.5 +39 -99
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +51 -36
- data/man/man8/puppet-filebucket.8 +4 -4
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +1 -58
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +0 -4
- data/spec/integration/application/agent_spec.rb +27 -138
- data/spec/integration/application/apply_spec.rb +1 -20
- data/spec/integration/application/filebucket_spec.rb +16 -16
- data/spec/integration/application/help_spec.rb +2 -0
- data/spec/integration/application/plugin_spec.rb +23 -1
- data/spec/integration/defaults_spec.rb +14 -3
- data/spec/integration/network/http_pool_spec.rb +3 -21
- data/spec/integration/parser/catalog_spec.rb +0 -38
- data/spec/integration/parser/node_spec.rb +0 -9
- data/spec/integration/parser/pcore_resource_spec.rb +0 -37
- data/spec/integration/resource/type_collection_spec.rb +6 -2
- data/spec/integration/transaction_spec.rb +9 -4
- data/spec/integration/type/file_spec.rb +5 -4
- data/spec/integration/util/windows/adsi_spec.rb +1 -3
- data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
- data/spec/integration/util/windows/registry_spec.rb +10 -0
- data/spec/integration/util/windows/security_spec.rb +1 -1
- data/spec/lib/puppet_spec/puppetserver.rb +1 -1
- data/spec/lib/puppet_spec/settings.rb +1 -0
- data/spec/spec_helper.rb +6 -1
- data/spec/unit/agent_spec.rb +6 -10
- data/spec/unit/application/agent_spec.rb +1 -0
- data/spec/unit/application/facts_spec.rb +35 -0
- data/spec/unit/application/filebucket_spec.rb +43 -39
- data/spec/unit/application/ssl_spec.rb +2 -2
- data/spec/unit/application_spec.rb +9 -51
- data/spec/unit/certificate_factory_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +6 -2
- data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
- data/spec/unit/configurer_spec.rb +12 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +2 -8
- data/spec/unit/context/trusted_information_spec.rb +2 -6
- data/spec/unit/defaults_spec.rb +72 -42
- data/spec/unit/environments_spec.rb +19 -99
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/face/node_spec.rb +11 -0
- data/spec/unit/face/plugin_spec.rb +73 -33
- data/spec/unit/file_bucket/file_spec.rb +1 -1
- data/spec/unit/file_serving/configuration/parser_spec.rb +15 -18
- data/spec/unit/file_serving/configuration_spec.rb +6 -12
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +4 -11
- data/spec/unit/forge/module_release_spec.rb +7 -2
- data/spec/unit/functions/camelcase_spec.rb +1 -1
- data/spec/unit/functions/capitalize_spec.rb +1 -1
- data/spec/unit/functions/downcase_spec.rb +1 -1
- data/spec/unit/functions/upcase_spec.rb +1 -1
- data/spec/unit/http/client_spec.rb +7 -8
- data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
- data/spec/unit/http/external_client_spec.rb +4 -4
- data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
- data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
- data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
- data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
- data/spec/unit/http/resolver_spec.rb +13 -13
- data/spec/unit/http/service/compiler_spec.rb +0 -62
- data/spec/unit/http/service/file_server_spec.rb +3 -3
- data/spec/unit/http/service/puppetserver_spec.rb +34 -4
- data/spec/unit/http/service_spec.rb +0 -1
- data/spec/unit/http/session_spec.rb +16 -14
- data/spec/unit/{network/http → http}/site_spec.rb +3 -3
- data/spec/unit/indirector/face_spec.rb +1 -0
- data/spec/unit/indirector/facts/facter_spec.rb +98 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +8 -26
- data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
- data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
- data/spec/unit/indirector/file_server_spec.rb +1 -15
- data/spec/unit/indirector/indirection_spec.rb +12 -8
- data/spec/unit/indirector/report/rest_spec.rb +2 -17
- data/spec/unit/indirector/request_spec.rb +0 -264
- data/spec/unit/indirector/rest_spec.rb +98 -752
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +0 -66
- data/spec/unit/network/authconfig_spec.rb +2 -129
- data/spec/unit/network/authorization_spec.rb +2 -55
- data/spec/unit/network/formats_spec.rb +4 -4
- data/spec/unit/network/http/api/indirected_routes_spec.rb +5 -92
- data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
- data/spec/unit/network/http/api_spec.rb +10 -0
- data/spec/unit/network/http/connection_spec.rb +19 -41
- data/spec/unit/network/http/handler_spec.rb +0 -1
- data/spec/unit/network/http_pool_spec.rb +0 -4
- data/spec/unit/node/environment_spec.rb +33 -21
- data/spec/unit/node_spec.rb +2 -54
- data/spec/unit/parser/compiler_spec.rb +19 -3
- data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
- data/spec/unit/parser/resource_spec.rb +8 -14
- data/spec/unit/parser/templatewrapper_spec.rb +3 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
- data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
- data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
- data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
- data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
- data/spec/unit/pops/types/type_factory_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +61 -46
- data/spec/unit/pops/visitor_spec.rb +1 -1
- data/spec/unit/property_spec.rb +0 -1
- data/spec/unit/provider/nameservice_spec.rb +64 -122
- data/spec/unit/provider/package/apt_spec.rb +8 -4
- data/spec/unit/provider/package/base_spec.rb +5 -6
- data/spec/unit/provider/package/dpkg_spec.rb +0 -48
- data/spec/unit/provider/package/gem_spec.rb +32 -0
- data/spec/unit/provider/package/pacman_spec.rb +12 -18
- data/spec/unit/provider/package/pip_spec.rb +11 -6
- data/spec/unit/provider/package/pkgdmg_spec.rb +4 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
- data/spec/unit/provider/service/smf_spec.rb +401 -165
- data/spec/unit/provider/service/windows_spec.rb +0 -1
- data/spec/unit/provider/user/aix_spec.rb +0 -5
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +0 -2
- data/spec/unit/provider/user/useradd_spec.rb +0 -1
- data/spec/unit/provider_spec.rb +8 -18
- data/spec/unit/resource/type_collection_spec.rb +2 -22
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +10 -67
- data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
- data/spec/unit/settings/integer_setting_spec.rb +42 -0
- data/spec/unit/settings/port_setting_spec.rb +31 -0
- data/spec/unit/settings/priority_setting_spec.rb +4 -4
- data/spec/unit/settings_spec.rb +23 -13
- data/spec/unit/ssl/base_spec.rb +37 -3
- data/spec/unit/ssl/certificate_request_spec.rb +15 -45
- data/spec/unit/ssl/certificate_spec.rb +2 -11
- data/spec/unit/ssl/ssl_provider_spec.rb +2 -5
- data/spec/unit/ssl/state_machine_spec.rb +0 -1
- data/spec/unit/ssl/verifier_spec.rb +0 -21
- data/spec/unit/transaction/additional_resource_generator_spec.rb +7 -3
- data/spec/unit/transaction/event_manager_spec.rb +11 -14
- data/spec/unit/transaction/report_spec.rb +0 -2
- data/spec/unit/transaction/resource_harness_spec.rb +2 -2
- data/spec/unit/transaction_spec.rb +48 -91
- data/spec/unit/type/file/checksum_spec.rb +6 -6
- data/spec/unit/type/file/content_spec.rb +2 -1
- data/spec/unit/type/file/ensure_spec.rb +1 -1
- data/spec/unit/type/file/mode_spec.rb +1 -1
- data/spec/unit/type/file/selinux_spec.rb +2 -0
- data/spec/unit/type/file/source_spec.rb +0 -1
- data/spec/unit/type/file_spec.rb +18 -6
- data/spec/unit/type/group_spec.rb +6 -13
- data/spec/unit/type/package_spec.rb +1 -1
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +1 -0
- data/spec/unit/type_spec.rb +22 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +1 -5
- data/spec/unit/util/backups_spec.rb +2 -3
- data/spec/unit/util/execution_spec.rb +11 -44
- data/spec/unit/util/inifile_spec.rb +14 -6
- data/spec/unit/util/log_spec.rb +7 -8
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/monkey_patches_spec.rb +0 -6
- data/spec/unit/util/posix_spec.rb +15 -363
- data/spec/unit/util/run_mode_spec.rb +21 -121
- data/spec/unit/util/selinux_spec.rb +52 -76
- data/spec/unit/util/storage_spec.rb +1 -3
- data/spec/unit/util/suidmanager_spec.rb +41 -44
- data/spec/unit/util/windows/string_spec.rb +1 -3
- data/spec/unit/util/yaml_spec.rb +0 -54
- data/spec/unit/util_spec.rb +6 -31
- metadata +40 -233
- data/conf/auth.conf +0 -150
- data/lib/puppet/application/cert.rb +0 -76
- data/lib/puppet/application/key.rb +0 -4
- data/lib/puppet/application/man.rb +0 -4
- data/lib/puppet/application/status.rb +0 -4
- data/lib/puppet/face/key.rb +0 -16
- data/lib/puppet/face/man.rb +0 -145
- data/lib/puppet/face/module/build.rb +0 -14
- data/lib/puppet/face/module/generate.rb +0 -14
- data/lib/puppet/face/module/search.rb +0 -103
- data/lib/puppet/face/status.rb +0 -51
- data/lib/puppet/ffi/posix.rb +0 -10
- data/lib/puppet/ffi/posix/constants.rb +0 -14
- data/lib/puppet/ffi/posix/functions.rb +0 -24
- data/lib/puppet/indirector/certificate/file.rb +0 -9
- data/lib/puppet/indirector/certificate/rest.rb +0 -18
- data/lib/puppet/indirector/certificate_request/file.rb +0 -9
- data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
- data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
- data/lib/puppet/indirector/file_content/http.rb +0 -22
- data/lib/puppet/indirector/key/file.rb +0 -46
- data/lib/puppet/indirector/key/memory.rb +0 -7
- data/lib/puppet/indirector/ssl_file.rb +0 -162
- data/lib/puppet/indirector/status.rb +0 -3
- data/lib/puppet/indirector/status/local.rb +0 -12
- data/lib/puppet/indirector/status/rest.rb +0 -27
- data/lib/puppet/module_tool/applications/searcher.rb +0 -29
- data/lib/puppet/network/auth_config_parser.rb +0 -90
- data/lib/puppet/network/authstore.rb +0 -283
- data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
- data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
- data/lib/puppet/network/http/base_pool.rb +0 -36
- data/lib/puppet/network/http/compression.rb +0 -127
- data/lib/puppet/network/http/connection_adapter.rb +0 -184
- data/lib/puppet/network/http/nocache_pool.rb +0 -28
- data/lib/puppet/network/rest_controller.rb +0 -2
- data/lib/puppet/network/rights.rb +0 -210
- data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
- data/lib/puppet/parser/environment_compiler.rb +0 -202
- data/lib/puppet/pops/types/enumeration.rb +0 -16
- data/lib/puppet/resource/capability_finder.rb +0 -154
- data/lib/puppet/rest/errors.rb +0 -15
- data/lib/puppet/rest/response.rb +0 -35
- data/lib/puppet/rest/route.rb +0 -85
- data/lib/puppet/rest/routes.rb +0 -135
- data/lib/puppet/settings/alias_setting.rb +0 -37
- data/lib/puppet/ssl/host.rb +0 -505
- data/lib/puppet/ssl/key.rb +0 -61
- data/lib/puppet/ssl/validator.rb +0 -61
- data/lib/puppet/ssl/validator/default_validator.rb +0 -209
- data/lib/puppet/ssl/validator/no_validator.rb +0 -22
- data/lib/puppet/ssl/verifier_adapter.rb +0 -58
- data/lib/puppet/status.rb +0 -40
- data/lib/puppet/util/connection.rb +0 -88
- data/lib/puppet/util/fact_dif.rb +0 -62
- data/lib/puppet/util/ssl.rb +0 -83
- data/lib/puppet/util/windows/api_types.rb +0 -309
- data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
- data/lib/puppet/vendor/load_pathspec.rb +0 -1
- data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
- data/lib/puppet/vendor/pathspec/LICENSE +0 -201
- data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/pathspec/README.md +0 -53
- data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
- data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
- data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
- data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
- data/man/man8/puppet-key.8 +0 -126
- data/man/man8/puppet-man.8 +0 -76
- data/man/man8/puppet-status.8 +0 -108
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +0 -91
- data/spec/integration/network/authconfig_spec.rb +0 -256
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
- data/spec/unit/application/man_spec.rb +0 -52
- data/spec/unit/capability_spec.rb +0 -414
- data/spec/unit/face/key_spec.rb +0 -9
- data/spec/unit/face/module/search_spec.rb +0 -231
- data/spec/unit/face/status_spec.rb +0 -9
- data/spec/unit/indirector/certificate/file_spec.rb +0 -14
- data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
- data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
- data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
- data/spec/unit/indirector/key/file_spec.rb +0 -78
- data/spec/unit/indirector/ssl_file_spec.rb +0 -305
- data/spec/unit/indirector/status/local_spec.rb +0 -10
- data/spec/unit/indirector/status/rest_spec.rb +0 -50
- data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
- data/spec/unit/network/auth_config_parser_spec.rb +0 -115
- data/spec/unit/network/authstore_spec.rb +0 -422
- data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
- data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
- data/spec/unit/network/http/compression_spec.rb +0 -240
- data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
- data/spec/unit/network/http_spec.rb +0 -9
- data/spec/unit/network/rights_spec.rb +0 -439
- data/spec/unit/parser/environment_compiler_spec.rb +0 -730
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +0 -20
- data/spec/unit/pops/types/enumeration_spec.rb +0 -51
- data/spec/unit/resource/capability_finder_spec.rb +0 -148
- data/spec/unit/rest/route_spec.rb +0 -132
- data/spec/unit/ssl/host_spec.rb +0 -645
- data/spec/unit/ssl/key_spec.rb +0 -173
- data/spec/unit/ssl/validator_spec.rb +0 -278
- data/spec/unit/status_spec.rb +0 -45
- data/spec/unit/util/ssl_spec.rb +0 -91
data/lib/puppet/environments.rb
CHANGED
@@ -346,6 +346,12 @@ module Puppet::Environments
|
|
346
346
|
@loader = loader
|
347
347
|
@cache_expiration_service = Puppet::Environments::Cached.cache_expiration_service
|
348
348
|
@cache = {}
|
349
|
+
|
350
|
+
# Holds expiration times in sorted order - next to expire is first
|
351
|
+
@expirations = SortedSet.new
|
352
|
+
|
353
|
+
# Infinity since it there are no entries, this is a cache of the first to expire time
|
354
|
+
@next_expiration = END_OF_TIME
|
349
355
|
end
|
350
356
|
|
351
357
|
# @!macro loader_list
|
@@ -373,6 +379,7 @@ module Puppet::Environments
|
|
373
379
|
elsif (result = @loader.get(name))
|
374
380
|
# environment loaded, cache it
|
375
381
|
cache_entry = entry(result)
|
382
|
+
@cache_expiration_service.created(result)
|
376
383
|
add_entry(name, cache_entry)
|
377
384
|
result
|
378
385
|
end
|
@@ -382,36 +389,28 @@ module Puppet::Environments
|
|
382
389
|
def add_entry(name, cache_entry)
|
383
390
|
Puppet.debug {"Caching environment '#{name}' #{cache_entry.label}"}
|
384
391
|
@cache[name] = cache_entry
|
385
|
-
|
392
|
+
expires = cache_entry.expires
|
393
|
+
@expirations.add(expires)
|
394
|
+
if @next_expiration > expires
|
395
|
+
@next_expiration = expires
|
396
|
+
end
|
386
397
|
end
|
387
398
|
private :add_entry
|
388
399
|
|
389
|
-
def clear_entry(name, entry)
|
390
|
-
@cache.delete(name)
|
391
|
-
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
392
|
-
@cache_expiration_service.evicted(name.to_sym)
|
393
|
-
Puppet::GettextConfig.delete_text_domain(name)
|
394
|
-
Puppet.settings.clear_environment_settings(name)
|
395
|
-
end
|
396
|
-
private :clear_entry
|
397
|
-
|
398
400
|
# Clears the cache of the environment with the given name.
|
399
401
|
# (The intention is that this could be used from a MANUAL cache eviction command (TBD)
|
400
402
|
def clear(name)
|
401
|
-
|
402
|
-
|
403
|
+
@cache.delete(name)
|
404
|
+
Puppet::GettextConfig.delete_text_domain(name)
|
403
405
|
end
|
404
406
|
|
405
407
|
# Clears all cached environments.
|
406
408
|
# (The intention is that this could be used from a MANUAL cache eviction command (TBD)
|
407
|
-
def clear_all
|
409
|
+
def clear_all()
|
408
410
|
super
|
409
|
-
|
410
|
-
@cache.each_pair do |name, entry|
|
411
|
-
clear_entry(name, entry)
|
412
|
-
end
|
413
|
-
|
414
411
|
@cache = {}
|
412
|
+
@expirations.clear
|
413
|
+
@next_expiration = END_OF_TIME
|
415
414
|
Puppet::GettextConfig.delete_environment_text_domains
|
416
415
|
end
|
417
416
|
|
@@ -420,24 +419,18 @@ module Puppet::Environments
|
|
420
419
|
#
|
421
420
|
def clear_all_expired()
|
422
421
|
t = Time.now
|
423
|
-
|
424
|
-
@cache.
|
425
|
-
|
422
|
+
return if t < @next_expiration && ! @cache.any? {|name, _| @cache_expiration_service.expired?(name.to_sym) }
|
423
|
+
to_expire = @cache.select { |name, entry| entry.expires < t || @cache_expiration_service.expired?(name.to_sym) }
|
424
|
+
to_expire.each do |name, entry|
|
425
|
+
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
426
|
+
@cache_expiration_service.evicted(name.to_sym)
|
427
|
+
clear(name)
|
428
|
+
@expirations.delete(entry.expires)
|
429
|
+
Puppet.settings.clear_environment_settings(name)
|
426
430
|
end
|
431
|
+
@next_expiration = @expirations.first || END_OF_TIME
|
427
432
|
end
|
428
433
|
|
429
|
-
# Clear an environment if it is expired, either by exceeding its time to live, or
|
430
|
-
# through an explicit eviction determined by the cache expiration service.
|
431
|
-
#
|
432
|
-
def clear_if_expired(name, entry, t = Time.now)
|
433
|
-
return unless entry
|
434
|
-
|
435
|
-
if entry.expired?(t) || @cache_expiration_service.expired?(name.to_sym)
|
436
|
-
clear_entry(name, entry)
|
437
|
-
end
|
438
|
-
end
|
439
|
-
private :clear_if_expired
|
440
|
-
|
441
434
|
# This implementation evicts the cache, and always gets the current
|
442
435
|
# configuration of the environment
|
443
436
|
#
|
@@ -447,7 +440,7 @@ module Puppet::Environments
|
|
447
440
|
#
|
448
441
|
# @!macro loader_get_conf
|
449
442
|
def get_conf(name)
|
450
|
-
|
443
|
+
evict_if_expired(name)
|
451
444
|
@loader.get_conf(name)
|
452
445
|
end
|
453
446
|
|
@@ -466,11 +459,18 @@ module Puppet::Environments
|
|
466
459
|
when Float::INFINITY
|
467
460
|
Entry.new(env) # Entry that never expires (avoids syscall to get time)
|
468
461
|
else
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
462
|
+
MRUEntry.new(env, ttl) # Entry that expires in ttl from when it was last touched
|
463
|
+
end
|
464
|
+
end
|
465
|
+
|
466
|
+
# Evicts the entry if it has expired
|
467
|
+
# Also clears caches in Settings that may prevent the entry from being updated
|
468
|
+
def evict_if_expired(name)
|
469
|
+
if (result = @cache[name]) && (result.expired? || @cache_expiration_service.expired?(name.to_sym))
|
470
|
+
Puppet.debug {"Evicting cache entry for environment '#{name}'"}
|
471
|
+
@cache_expiration_service.evicted(name.to_sym)
|
472
|
+
clear(name)
|
473
|
+
Puppet.settings.clear_environment_settings(name)
|
474
474
|
end
|
475
475
|
end
|
476
476
|
|
@@ -485,57 +485,58 @@ module Puppet::Environments
|
|
485
485
|
def touch
|
486
486
|
end
|
487
487
|
|
488
|
-
def expired?
|
488
|
+
def expired?
|
489
489
|
false
|
490
490
|
end
|
491
491
|
|
492
492
|
def label
|
493
493
|
""
|
494
494
|
end
|
495
|
+
|
496
|
+
def expires
|
497
|
+
END_OF_TIME
|
498
|
+
end
|
495
499
|
end
|
496
500
|
|
497
501
|
# Always evicting entry
|
498
502
|
class NotCachedEntry < Entry
|
499
|
-
def expired?
|
503
|
+
def expired?
|
500
504
|
true
|
501
505
|
end
|
502
506
|
|
503
507
|
def label
|
504
508
|
"(ttl = 0 sec)"
|
505
509
|
end
|
510
|
+
|
511
|
+
def expires
|
512
|
+
START_OF_TIME
|
513
|
+
end
|
506
514
|
end
|
507
515
|
|
508
|
-
# Policy that expires
|
509
|
-
class
|
516
|
+
# Policy that expires if it hasn't been touched within ttl_seconds
|
517
|
+
class MRUEntry < Entry
|
510
518
|
def initialize(value, ttl_seconds)
|
511
519
|
super(value)
|
512
520
|
@ttl = Time.now + ttl_seconds
|
513
521
|
@ttl_seconds = ttl_seconds
|
514
|
-
end
|
515
522
|
|
516
|
-
|
517
|
-
now > @ttl
|
523
|
+
touch
|
518
524
|
end
|
519
525
|
|
520
|
-
def
|
521
|
-
|
526
|
+
def touch
|
527
|
+
@ttl = Time.now + @ttl_seconds
|
522
528
|
end
|
523
|
-
end
|
524
|
-
|
525
|
-
# Policy that expires if it hasn't been touched within ttl_seconds
|
526
|
-
class MRUEntry < TTLEntry
|
527
|
-
def initialize(value, ttl_seconds)
|
528
|
-
super(value, ttl_seconds)
|
529
529
|
|
530
|
-
|
530
|
+
def expired?
|
531
|
+
Time.now > @ttl
|
531
532
|
end
|
532
533
|
|
533
|
-
def
|
534
|
-
@ttl
|
534
|
+
def expires
|
535
|
+
@ttl
|
535
536
|
end
|
536
537
|
|
537
538
|
def label
|
538
|
-
"(
|
539
|
+
"(ttl = #{@ttl_seconds} sec)"
|
539
540
|
end
|
540
541
|
end
|
541
542
|
end
|
data/lib/puppet/face/facts.rb
CHANGED
@@ -1,29 +1,5 @@
|
|
1
1
|
require 'puppet/indirector/face'
|
2
2
|
require 'puppet/node/facts'
|
3
|
-
require 'puppet/util/fact_dif'
|
4
|
-
|
5
|
-
EXCLUDE_LIST = %w[facterversion
|
6
|
-
swapfree_mb swapsize_mb
|
7
|
-
load_averages\.*
|
8
|
-
memory\.swap\.available_bytes memory\.swap\.capacity memory\.swap\.total_bytes
|
9
|
-
memory\.swap\.used_bytes memory\.swap\.available
|
10
|
-
memory\.system\.available memory\.system\.available_bytes memory\.system\.capacity memory\.swap\.used
|
11
|
-
memory\.system\.total_bytes memory\.system\.used memory\.system\.used_bytes
|
12
|
-
memoryfree memoryfree_mb memorysize_mb
|
13
|
-
mountpoints\..* mtu_.* mountpoints\..*\.capacity
|
14
|
-
networking\.interfaces\..*\.mtu networking\.mtu partitions\..*\.filesystem
|
15
|
-
partitions\..*\.size_bytes partitions\..*\.mount partitions\..*\.uuid
|
16
|
-
disks\..*\.size_bytes
|
17
|
-
hypervisors\.lpar\.partition_number hypervisors\.xen\.privileged hypervisors\.zone\..* hypervisors\.ldom\..*
|
18
|
-
processors\.speed
|
19
|
-
ldom_.*
|
20
|
-
boardassettag dmi\.board\.asset_tag
|
21
|
-
blockdevice_.*_vendor blockdevice_.*_size
|
22
|
-
system_uptime\.days system_uptime\.hours system_uptime\.seconds system_uptime\.uptime
|
23
|
-
uptime_days uptime_hours uptime_seconds
|
24
|
-
system_profiler\.uptime
|
25
|
-
sp_uptime
|
26
|
-
uptime]
|
27
3
|
|
28
4
|
Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
29
5
|
copyright "Puppet Inc.", 2011
|
@@ -55,7 +31,6 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
55
31
|
|
56
32
|
$ puppet facts find
|
57
33
|
EOT
|
58
|
-
find.default = true
|
59
34
|
|
60
35
|
deactivate_action(:destroy)
|
61
36
|
deactivate_action(:search)
|
@@ -68,16 +43,12 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
68
43
|
EOT
|
69
44
|
returns "Nothing."
|
70
45
|
notes <<-'EOT'
|
71
|
-
This action requires that the
|
46
|
+
This action requires that the Puppet Server's `auth.conf` file
|
72
47
|
allow `PUT` or `save` access to the `/puppet/v3/facts` API endpoint.
|
73
48
|
|
74
49
|
For details on configuring Puppet Server's `auth.conf`, see:
|
75
50
|
|
76
51
|
<https://puppet.com/docs/puppetserver/latest/config_file_auth.html>
|
77
|
-
|
78
|
-
For legacy Rack-based Puppet Masters, see:
|
79
|
-
|
80
|
-
<https://puppet.com/docs/puppet/latest/config_file_auth.html>
|
81
52
|
EOT
|
82
53
|
examples <<-'EOT'
|
83
54
|
Upload facts:
|
@@ -112,39 +83,68 @@ Puppet::Indirector::Face.define(:facts, '0.0.1') do
|
|
112
83
|
end
|
113
84
|
end
|
114
85
|
|
115
|
-
action(:
|
116
|
-
summary _("
|
86
|
+
action(:show) do
|
87
|
+
summary _("Retrieve current node's facts.")
|
88
|
+
arguments _("[<facts>]")
|
117
89
|
description <<-'EOT'
|
118
|
-
|
90
|
+
Reads facts from the local system using `facter` terminus.
|
91
|
+
A query can be provided to retrieve just a specific fact or a set of facts.
|
119
92
|
EOT
|
120
|
-
returns "
|
93
|
+
returns "The output of facter with added puppet specific facts."
|
121
94
|
notes <<-'EOT'
|
95
|
+
|
122
96
|
EOT
|
123
97
|
examples <<-'EOT'
|
124
|
-
|
125
|
-
|
98
|
+
retrieve facts:
|
99
|
+
|
100
|
+
$ puppet facts show os
|
126
101
|
EOT
|
102
|
+
default true
|
127
103
|
|
128
|
-
|
104
|
+
option("--config-file " + _("<path>")) do
|
105
|
+
default_to { nil }
|
106
|
+
summary _("The location of the config file for Facter.")
|
107
|
+
end
|
108
|
+
|
109
|
+
option("--custom-dir " + _("<path>")) do
|
110
|
+
default_to { nil }
|
111
|
+
summary _("The path to a directory that contains custom facts.")
|
112
|
+
end
|
113
|
+
|
114
|
+
option("--external-dir " + _("<path>")) do
|
115
|
+
default_to { nil }
|
116
|
+
summary _("The path to a directory that contains external facts.")
|
117
|
+
end
|
118
|
+
|
119
|
+
option("--no-block") do
|
120
|
+
summary _("Disable fact blocking mechanism.")
|
121
|
+
end
|
122
|
+
|
123
|
+
option("--no-cache") do
|
124
|
+
summary _("Disable fact caching mechanism.")
|
125
|
+
end
|
126
|
+
|
127
|
+
option("--show-legacy") do
|
128
|
+
summary _("Show legacy facts when querying all facts.")
|
129
|
+
end
|
129
130
|
|
130
131
|
when_invoked do |*args|
|
132
|
+
options = args.pop
|
133
|
+
|
131
134
|
Puppet.settings.preferred_run_mode = :agent
|
132
135
|
Puppet::Node::Facts.indirection.terminus_class = :facter
|
133
136
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
else
|
145
|
-
Puppet.warning _("Already using Facter 4. To use `puppet facts diff` remove facterng from the .conf file or run `puppet config set facterng false`.")
|
146
|
-
exit 0
|
147
|
-
end
|
137
|
+
|
138
|
+
options[:user_query] = args
|
139
|
+
options[:resolve_options] = true
|
140
|
+
result = Puppet::Node::Facts.indirection.find(Puppet.settings[:certname], options)
|
141
|
+
|
142
|
+
result.values
|
143
|
+
end
|
144
|
+
|
145
|
+
when_rendering :console do |result|
|
146
|
+
Puppet::Util::Json.dump(result, :pretty => true)
|
148
147
|
end
|
149
148
|
end
|
150
149
|
end
|
150
|
+
|
data/lib/puppet/face/help.rb
CHANGED
@@ -222,7 +222,7 @@ Puppet::Face.define(:help, '0.0.1') do
|
|
222
222
|
#private :horribly_extract_summary_from
|
223
223
|
|
224
224
|
def exclude_from_docs?(appname)
|
225
|
-
%w{face_base indirection_base
|
225
|
+
%w{face_base indirection_base report status}.include? appname
|
226
226
|
end
|
227
227
|
# This should absolutely be a private method, but for some reason it appears
|
228
228
|
# that you can't use the 'private' keyword inside of a Face definition.
|
data/lib/puppet/face/plugin.rb
CHANGED
@@ -41,14 +41,11 @@ 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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
ensure
|
50
|
-
pool.close
|
51
|
-
end
|
44
|
+
begin
|
45
|
+
handler = Puppet::Configurer::PluginHandler.new
|
46
|
+
handler.download_plugins(remote_environment_for_plugins)
|
47
|
+
ensure
|
48
|
+
Puppet.runtime[:http].close
|
52
49
|
end
|
53
50
|
end
|
54
51
|
|
@@ -0,0 +1,311 @@
|
|
1
|
+
require 'puppet/ffi/windows'
|
2
|
+
require 'puppet/util/windows/string'
|
3
|
+
|
4
|
+
module Puppet::FFI::Windows
|
5
|
+
module APITypes
|
6
|
+
module ::FFI
|
7
|
+
WIN32_FALSE = 0
|
8
|
+
|
9
|
+
# standard Win32 error codes
|
10
|
+
ERROR_SUCCESS = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
module ::FFI::Library
|
14
|
+
# Wrapper method for attach_function + private
|
15
|
+
def attach_function_private(*args)
|
16
|
+
attach_function(*args)
|
17
|
+
private args[0]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class ::FFI::Pointer
|
22
|
+
NULL_HANDLE = 0
|
23
|
+
WCHAR_NULL = "\0\0".encode('UTF-16LE').freeze
|
24
|
+
|
25
|
+
def self.from_string_to_wide_string(str, &block)
|
26
|
+
str = Puppet::Util::Windows::String.wide_string(str)
|
27
|
+
FFI::MemoryPointer.from_wide_string(str, &block)
|
28
|
+
|
29
|
+
# ptr has already had free called, so nothing to return
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def read_win32_bool
|
34
|
+
# BOOL is always a 32-bit integer in Win32
|
35
|
+
# some Win32 APIs return 1 for true, while others are non-0
|
36
|
+
read_int32 != FFI::WIN32_FALSE
|
37
|
+
end
|
38
|
+
|
39
|
+
alias_method :read_dword, :read_uint32
|
40
|
+
alias_method :read_win32_ulong, :read_uint32
|
41
|
+
alias_method :read_qword, :read_uint64
|
42
|
+
|
43
|
+
alias_method :read_hresult, :read_int32
|
44
|
+
|
45
|
+
def read_handle
|
46
|
+
type_size == 4 ? read_uint32 : read_uint64
|
47
|
+
end
|
48
|
+
|
49
|
+
alias_method :read_wchar, :read_uint16
|
50
|
+
alias_method :read_word, :read_uint16
|
51
|
+
alias_method :read_array_of_wchar, :read_array_of_uint16
|
52
|
+
|
53
|
+
def read_wide_string(char_length, dst_encoding = Encoding::UTF_8, strip = false, encode_options = {})
|
54
|
+
# char_length is number of wide chars (typically excluding NULLs), *not* bytes
|
55
|
+
str = get_bytes(0, char_length * 2).force_encoding('UTF-16LE')
|
56
|
+
|
57
|
+
if strip
|
58
|
+
i = str.index(WCHAR_NULL)
|
59
|
+
str = str[0, i] if i
|
60
|
+
end
|
61
|
+
|
62
|
+
str.encode(dst_encoding, str.encoding, **encode_options)
|
63
|
+
rescue EncodingError => e
|
64
|
+
Puppet.debug { "Unable to convert value #{str.nil? ? 'nil' : str.dump} to encoding #{dst_encoding} due to #{e.inspect}" }
|
65
|
+
raise
|
66
|
+
end
|
67
|
+
|
68
|
+
# @param max_char_length [Integer] Maximum number of wide chars to return (typically excluding NULLs), *not* bytes
|
69
|
+
# @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
|
70
|
+
# null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
|
71
|
+
# null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
|
72
|
+
# @param encode_options [Hash] Accepts the same option hash that may be passed to String#encode in Ruby
|
73
|
+
def read_arbitrary_wide_string_up_to(max_char_length = 512, null_terminator = :single_null, encode_options = {})
|
74
|
+
idx = case null_terminator
|
75
|
+
when :single_null
|
76
|
+
# find index of wide null between 0 and max (exclusive)
|
77
|
+
(0...max_char_length).find do |i|
|
78
|
+
get_uint16(i * 2) == 0
|
79
|
+
end
|
80
|
+
when :double_null
|
81
|
+
# find index of double-wide null between 0 and max - 1 (exclusive)
|
82
|
+
(0...max_char_length - 1).find do |i|
|
83
|
+
get_uint32(i * 2) == 0
|
84
|
+
end
|
85
|
+
else
|
86
|
+
raise _("Unable to read wide strings with %{null_terminator} terminal nulls") % { null_terminator: null_terminator }
|
87
|
+
end
|
88
|
+
|
89
|
+
read_wide_string(idx || max_char_length, Encoding::UTF_8, false, encode_options)
|
90
|
+
end
|
91
|
+
|
92
|
+
def read_win32_local_pointer(&block)
|
93
|
+
ptr = read_pointer
|
94
|
+
begin
|
95
|
+
yield ptr
|
96
|
+
ensure
|
97
|
+
if !ptr.null? && FFI::WIN32::LocalFree(ptr.address) != FFI::Pointer::NULL_HANDLE
|
98
|
+
Puppet.debug "LocalFree memory leak"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# ptr has already had LocalFree called, so nothing to return
|
103
|
+
nil
|
104
|
+
end
|
105
|
+
|
106
|
+
def read_com_memory_pointer(&block)
|
107
|
+
ptr = read_pointer
|
108
|
+
begin
|
109
|
+
yield ptr
|
110
|
+
ensure
|
111
|
+
FFI::WIN32::CoTaskMemFree(ptr) unless ptr.null?
|
112
|
+
end
|
113
|
+
|
114
|
+
# ptr has already had CoTaskMemFree called, so nothing to return
|
115
|
+
nil
|
116
|
+
end
|
117
|
+
|
118
|
+
alias_method :write_dword, :write_uint32
|
119
|
+
alias_method :write_word, :write_uint16
|
120
|
+
end
|
121
|
+
|
122
|
+
class FFI::MemoryPointer
|
123
|
+
# Return a MemoryPointer that points to wide string. This is analogous to the
|
124
|
+
# FFI::MemoryPointer.from_string method.
|
125
|
+
def self.from_wide_string(wstr)
|
126
|
+
ptr = FFI::MemoryPointer.new(:uchar, wstr.bytesize + 2)
|
127
|
+
ptr.put_array_of_uchar(0, wstr.bytes.to_a)
|
128
|
+
ptr.put_uint16(wstr.bytesize, 0)
|
129
|
+
|
130
|
+
yield ptr if block_given?
|
131
|
+
|
132
|
+
ptr
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# FFI Types
|
137
|
+
# https://github.com/ffi/ffi/wiki/Types
|
138
|
+
|
139
|
+
# Windows - Common Data Types
|
140
|
+
# https://msdn.microsoft.com/en-us/library/cc230309.aspx
|
141
|
+
|
142
|
+
# Windows Data Types
|
143
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
|
144
|
+
|
145
|
+
FFI.typedef :uint16, :word
|
146
|
+
FFI.typedef :uint32, :dword
|
147
|
+
# uintptr_t is defined in an FFI conf as platform specific, either
|
148
|
+
# ulong_long on x64 or just ulong on x86
|
149
|
+
FFI.typedef :uintptr_t, :handle
|
150
|
+
FFI.typedef :uintptr_t, :hwnd
|
151
|
+
|
152
|
+
# buffer_inout is similar to pointer (platform specific), but optimized for buffers
|
153
|
+
FFI.typedef :buffer_inout, :lpwstr
|
154
|
+
# buffer_in is similar to pointer (platform specific), but optimized for CONST read only buffers
|
155
|
+
FFI.typedef :buffer_in, :lpcwstr
|
156
|
+
FFI.typedef :buffer_in, :lpcolestr
|
157
|
+
|
158
|
+
# string is also similar to pointer, but should be used for const char *
|
159
|
+
# NOTE that this is not wide, useful only for A suffixed functions
|
160
|
+
FFI.typedef :string, :lpcstr
|
161
|
+
|
162
|
+
# pointer in FFI is platform specific
|
163
|
+
# NOTE: for API calls with reserved lpvoid parameters, pass a FFI::Pointer::NULL
|
164
|
+
FFI.typedef :pointer, :lpcvoid
|
165
|
+
FFI.typedef :pointer, :lpvoid
|
166
|
+
FFI.typedef :pointer, :lpword
|
167
|
+
FFI.typedef :pointer, :lpbyte
|
168
|
+
FFI.typedef :pointer, :lpdword
|
169
|
+
FFI.typedef :pointer, :pdword
|
170
|
+
FFI.typedef :pointer, :phandle
|
171
|
+
FFI.typedef :pointer, :ulong_ptr
|
172
|
+
FFI.typedef :pointer, :pbool
|
173
|
+
FFI.typedef :pointer, :lpunknown
|
174
|
+
|
175
|
+
# any time LONG / ULONG is in a win32 API definition DO NOT USE platform specific width
|
176
|
+
# which is what FFI uses by default
|
177
|
+
# instead create new aliases for these very special cases
|
178
|
+
# NOTE: not a good idea to redefine FFI :ulong since other typedefs may rely on it
|
179
|
+
FFI.typedef :uint32, :win32_ulong
|
180
|
+
FFI.typedef :int32, :win32_long
|
181
|
+
# FFI bool can be only 1 byte at times,
|
182
|
+
# Win32 BOOL is a signed int, and is always 4 bytes, even on x64
|
183
|
+
# https://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
|
184
|
+
FFI.typedef :int32, :win32_bool
|
185
|
+
|
186
|
+
# BOOLEAN (unlike BOOL) is a BYTE - typedef unsigned char BYTE;
|
187
|
+
FFI.typedef :uchar, :boolean
|
188
|
+
|
189
|
+
# Same as a LONG, a 32-bit signed integer
|
190
|
+
FFI.typedef :int32, :hresult
|
191
|
+
|
192
|
+
# NOTE: FFI already defines (u)short as a 16-bit (un)signed like this:
|
193
|
+
# FFI.typedef :uint16, :ushort
|
194
|
+
# FFI.typedef :int16, :short
|
195
|
+
|
196
|
+
# 8 bits per byte
|
197
|
+
FFI.typedef :uchar, :byte
|
198
|
+
FFI.typedef :uint16, :wchar
|
199
|
+
|
200
|
+
# Definitions for data types used in LSA structures and functions
|
201
|
+
# https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/
|
202
|
+
# https://docs.microsoft.com/sr-latn-rs/windows/win32/secmgmt/management-data-types
|
203
|
+
FFI.typedef :pointer, :pwstr
|
204
|
+
FFI.typedef :pointer, :pulong
|
205
|
+
FFI.typedef :pointer, :lsa_handle
|
206
|
+
FFI.typedef :pointer, :plsa_handle
|
207
|
+
FFI.typedef :pointer, :psid
|
208
|
+
FFI.typedef :pointer, :pvoid
|
209
|
+
FFI.typedef :pointer, :plsa_unicode_string
|
210
|
+
FFI.typedef :pointer, :plsa_object_attributes
|
211
|
+
FFI.typedef :uint32, :ntstatus
|
212
|
+
FFI.typedef :dword, :access_mask
|
213
|
+
|
214
|
+
module ::FFI::WIN32
|
215
|
+
extend ::FFI::Library
|
216
|
+
|
217
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
|
218
|
+
# typedef struct _GUID {
|
219
|
+
# DWORD Data1;
|
220
|
+
# WORD Data2;
|
221
|
+
# WORD Data3;
|
222
|
+
# BYTE Data4[8];
|
223
|
+
# } GUID;
|
224
|
+
class GUID < FFI::Struct
|
225
|
+
layout :Data1, :dword,
|
226
|
+
:Data2, :word,
|
227
|
+
:Data3, :word,
|
228
|
+
:Data4, [:byte, 8]
|
229
|
+
|
230
|
+
def self.[](s)
|
231
|
+
raise _('Bad GUID format.') unless s =~ /^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
|
232
|
+
|
233
|
+
new.tap do |guid|
|
234
|
+
guid[:Data1] = s[0, 8].to_i(16)
|
235
|
+
guid[:Data2] = s[9, 4].to_i(16)
|
236
|
+
guid[:Data3] = s[14, 4].to_i(16)
|
237
|
+
guid[:Data4][0] = s[19, 2].to_i(16)
|
238
|
+
guid[:Data4][1] = s[21, 2].to_i(16)
|
239
|
+
s[24, 12].split('').each_slice(2).with_index do |a, i|
|
240
|
+
guid[:Data4][i + 2] = a.join('').to_i(16)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def ==(other) Windows.memcmp(other, self, size) == 0 end
|
246
|
+
end
|
247
|
+
|
248
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
|
249
|
+
# typedef struct _SYSTEMTIME {
|
250
|
+
# WORD wYear;
|
251
|
+
# WORD wMonth;
|
252
|
+
# WORD wDayOfWeek;
|
253
|
+
# WORD wDay;
|
254
|
+
# WORD wHour;
|
255
|
+
# WORD wMinute;
|
256
|
+
# WORD wSecond;
|
257
|
+
# WORD wMilliseconds;
|
258
|
+
# } SYSTEMTIME, *PSYSTEMTIME;
|
259
|
+
class SYSTEMTIME < FFI::Struct
|
260
|
+
layout :wYear, :word,
|
261
|
+
:wMonth, :word,
|
262
|
+
:wDayOfWeek, :word,
|
263
|
+
:wDay, :word,
|
264
|
+
:wHour, :word,
|
265
|
+
:wMinute, :word,
|
266
|
+
:wSecond, :word,
|
267
|
+
:wMilliseconds, :word
|
268
|
+
|
269
|
+
def to_local_time
|
270
|
+
Time.local(self[:wYear], self[:wMonth], self[:wDay],
|
271
|
+
self[:wHour], self[:wMinute], self[:wSecond], self[:wMilliseconds] * 1000)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
|
276
|
+
# Contains a 64-bit value representing the number of 100-nanosecond
|
277
|
+
# intervals since January 1, 1601 (UTC).
|
278
|
+
# typedef struct _FILETIME {
|
279
|
+
# DWORD dwLowDateTime;
|
280
|
+
# DWORD dwHighDateTime;
|
281
|
+
# } FILETIME, *PFILETIME;
|
282
|
+
class FILETIME < FFI::Struct
|
283
|
+
layout :dwLowDateTime, :dword,
|
284
|
+
:dwHighDateTime, :dword
|
285
|
+
end
|
286
|
+
|
287
|
+
ffi_convention :stdcall
|
288
|
+
|
289
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
|
290
|
+
# HLOCAL WINAPI LocalFree(
|
291
|
+
# _In_ HLOCAL hMem
|
292
|
+
# );
|
293
|
+
ffi_lib :kernel32
|
294
|
+
attach_function :LocalFree, [:handle], :handle
|
295
|
+
|
296
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
|
297
|
+
# BOOL WINAPI CloseHandle(
|
298
|
+
# _In_ HANDLE hObject
|
299
|
+
# );
|
300
|
+
ffi_lib :kernel32
|
301
|
+
attach_function_private :CloseHandle, [:handle], :win32_bool
|
302
|
+
|
303
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
|
304
|
+
# void CoTaskMemFree(
|
305
|
+
# _In_opt_ LPVOID pv
|
306
|
+
# );
|
307
|
+
ffi_lib :ole32
|
308
|
+
attach_function :CoTaskMemFree, [:lpvoid], :void
|
309
|
+
end
|
310
|
+
end
|
311
|
+
end
|