puppet 6.19.0-x86-mingw32 → 7.3.0-x86-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 +2 -16
- data/Gemfile +3 -4
- data/Gemfile.lock +33 -28
- 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 +2 -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 +182 -104
- data/lib/puppet/application/agent.rb +1 -0
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +101 -104
- data/lib/puppet/application/filebucket.rb +15 -11
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +44 -36
- data/lib/puppet/configurer/plugin_handler.rb +21 -19
- data/lib/puppet/defaults.rb +71 -170
- data/lib/puppet/environments.rb +44 -75
- data/lib/puppet/face/config.rb +10 -0
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +80 -6
- data/lib/puppet/face/help.rb +1 -1
- data/lib/puppet/face/node/clean.rb +8 -0
- data/lib/puppet/face/plugin.rb +5 -8
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- 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 +6 -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/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- 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/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +24 -3
- data/lib/puppet/indirector/facts/json.rb +27 -0
- data/lib/puppet/indirector/facts/rest.rb +3 -22
- data/lib/puppet/indirector/facts/yaml.rb +3 -58
- 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/json.rb +5 -1
- data/lib/puppet/indirector/node/json.rb +8 -0
- data/lib/puppet/indirector/node/rest.rb +2 -4
- data/lib/puppet/indirector/report/json.rb +34 -0
- 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 +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/authconfig.rb +2 -96
- data/lib/puppet/network/authorization.rb +13 -35
- data/lib/puppet/network/formats.rb +69 -1
- 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 +73 -18
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- 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 +5 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
- 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 +4 -0
- 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 +8 -5
- 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 +88 -48
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/base_setting.rb +26 -2
- 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/type/user.rb +1 -1
- data/lib/puppet/util/autoload.rb +1 -8
- 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 +54 -5
- data/lib/puppet/util/rdoc.rb +0 -7
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -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 +629 -1314
- 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 +58 -9
- data/man/man8/puppet-filebucket.8 +6 -6
- 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 +4 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +4 -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/integration/application/agent/cached_deferred_catalog.json +91 -0
- 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 +4 -0
- data/spec/integration/application/agent_spec.rb +151 -14
- data/spec/integration/application/apply_spec.rb +20 -1
- 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 +7 -10
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
- 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 +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/type/file_spec.rb +5 -4
- data/spec/integration/util/windows/adsi_spec.rb +3 -1
- data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
- data/spec/integration/util/windows/registry_spec.rb +0 -10
- 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 +7 -1
- data/spec/spec_helper.rb +3 -4
- data/spec/unit/agent_spec.rb +8 -8
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/facts_spec.rb +35 -0
- data/spec/unit/application/filebucket_spec.rb +41 -41
- data/spec/unit/application/ssl_spec.rb +2 -2
- data/spec/unit/application_spec.rb +51 -9
- 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 +8 -2
- data/spec/unit/context/trusted_information_spec.rb +2 -6
- data/spec/unit/defaults_spec.rb +26 -32
- data/spec/unit/environments_spec.rb +96 -22
- data/spec/unit/face/config_spec.rb +27 -32
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/face/node_spec.rb +14 -13
- 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 +22 -19
- 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 +11 -4
- data/spec/unit/forge/module_release_spec.rb +2 -7
- 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/inline_epp_spec.rb +26 -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 +49 -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 +1 -2
- 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 +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +104 -1
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- 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 +8 -12
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
- data/spec/unit/indirector/report/rest_spec.rb +2 -17
- data/spec/unit/indirector/report/yaml_spec.rb +72 -8
- 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 +66 -0
- data/spec/unit/network/authconfig_spec.rb +2 -132
- data/spec/unit/network/authorization_spec.rb +2 -55
- data/spec/unit/network/formats_spec.rb +45 -4
- data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -101
- 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 -6
- 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 +3 -19
- data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- 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 +1 -0
- data/spec/unit/provider/nameservice_spec.rb +66 -122
- data/spec/unit/provider/package/apt_spec.rb +4 -8
- data/spec/unit/provider/package/base_spec.rb +6 -5
- 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 +18 -12
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- 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 +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +1 -0
- data/spec/unit/provider_spec.rb +6 -20
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- 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 +11 -66
- 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 +560 -228
- data/spec/unit/ssl/base_spec.rb +36 -4
- 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 +14 -8
- 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 +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- 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 +57 -82
- data/spec/unit/type/file/checksum_spec.rb +6 -6
- data/spec/unit/type/file/content_spec.rb +1 -2
- 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 +0 -2
- data/spec/unit/type/file/source_spec.rb +0 -1
- data/spec/unit/type/file_spec.rb +12 -12
- data/spec/unit/type/group_spec.rb +13 -6
- 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 +0 -1
- 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 +5 -1
- data/spec/unit/util/backups_spec.rb +1 -4
- data/spec/unit/util/execution_spec.rb +15 -40
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- 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 +363 -15
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +21 -121
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- 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 +13 -24
- metadata +66 -226
- 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/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/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/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/integration/application/config_spec.rb +0 -74
- 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/catalog_spec.rb +0 -6
- data/spec/unit/face/key_spec.rb +0 -9
- data/spec/unit/face/module/search_spec.rb +0 -231
- data/spec/unit/face/module_spec.rb +0 -3
- 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 -79
- 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/types/enumeration_spec.rb +0 -51
- data/spec/unit/resource/capability_finder_spec.rb +0 -143
- data/spec/unit/rest/route_spec.rb +0 -132
- data/spec/unit/ssl/host_spec.rb +0 -650
- 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
@@ -0,0 +1,414 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ffi'
|
4
|
+
require 'puppet/ffi/windows'
|
5
|
+
require 'puppet/util/windows/string'
|
6
|
+
|
7
|
+
module Process
|
8
|
+
extend FFI::Library
|
9
|
+
extend Puppet::Util::Windows::String
|
10
|
+
|
11
|
+
extend Puppet::FFI::Windows::APITypes
|
12
|
+
extend Puppet::FFI::Windows::Functions
|
13
|
+
extend Puppet::FFI::Windows::Structs
|
14
|
+
|
15
|
+
include Puppet::FFI::Windows::Constants
|
16
|
+
include Puppet::FFI::Windows::Structs
|
17
|
+
|
18
|
+
ProcessInfo = Struct.new(
|
19
|
+
'ProcessInfo',
|
20
|
+
:process_handle,
|
21
|
+
:thread_handle,
|
22
|
+
:process_id,
|
23
|
+
:thread_id
|
24
|
+
)
|
25
|
+
|
26
|
+
private_constant :ProcessInfo
|
27
|
+
|
28
|
+
# Disable popups. This mostly affects the Process.kill method.
|
29
|
+
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX)
|
30
|
+
|
31
|
+
class << self
|
32
|
+
|
33
|
+
private :SetHandleInformation, :SetErrorMode, :CreateProcessW, :OpenProcess,
|
34
|
+
:SetPriorityClass, :CreateProcessWithLogonW, :get_osfhandle, :get_errno
|
35
|
+
|
36
|
+
# Process.create(key => value, ...) => ProcessInfo
|
37
|
+
#
|
38
|
+
# This is a wrapper for the CreateProcess() function. It executes a process,
|
39
|
+
# returning a ProcessInfo struct. It accepts a hash as an argument.
|
40
|
+
# There are several primary keys:
|
41
|
+
#
|
42
|
+
# * command_line (this or app_name must be present)
|
43
|
+
# * app_name (default: nil)
|
44
|
+
# * inherit (default: false)
|
45
|
+
# * process_inherit (default: false)
|
46
|
+
# * thread_inherit (default: false)
|
47
|
+
# * creation_flags (default: 0)
|
48
|
+
# * cwd (default: Dir.pwd)
|
49
|
+
# * startup_info (default: nil)
|
50
|
+
# * environment (default: nil)
|
51
|
+
# * close_handles (default: true)
|
52
|
+
# * with_logon (default: nil)
|
53
|
+
# * domain (default: nil)
|
54
|
+
# * password (default: nil, mandatory if with_logon)
|
55
|
+
#
|
56
|
+
# Of these, the 'command_line' or 'app_name' must be specified or an
|
57
|
+
# error is raised. Both may be set individually, but 'command_line' should
|
58
|
+
# be preferred if only one of them is set because it does not (necessarily)
|
59
|
+
# require an explicit path or extension to work.
|
60
|
+
#
|
61
|
+
# The 'domain' and 'password' options are only relevent in the context
|
62
|
+
# of 'with_logon'. If 'with_logon' is set, then the 'password' option is
|
63
|
+
# mandatory.
|
64
|
+
#
|
65
|
+
# The startup_info key takes a hash. Its keys are attributes that are
|
66
|
+
# part of the StartupInfo struct, and are generally only meaningful for
|
67
|
+
# GUI or console processes. See the documentation on CreateProcess()
|
68
|
+
# and the StartupInfo struct on MSDN for more information.
|
69
|
+
#
|
70
|
+
# * desktop
|
71
|
+
# * title
|
72
|
+
# * x
|
73
|
+
# * y
|
74
|
+
# * x_size
|
75
|
+
# * y_size
|
76
|
+
# * x_count_chars
|
77
|
+
# * y_count_chars
|
78
|
+
# * fill_attribute
|
79
|
+
# * sw_flags
|
80
|
+
# * startf_flags
|
81
|
+
# * stdin
|
82
|
+
# * stdout
|
83
|
+
# * stderr
|
84
|
+
#
|
85
|
+
# Note that the 'stdin', 'stdout' and 'stderr' options can be either Ruby
|
86
|
+
# IO objects or file descriptors (i.e. a fileno). However, StringIO objects
|
87
|
+
# are not currently supported. Unfortunately, setting these is not currently
|
88
|
+
# an option for JRuby.
|
89
|
+
#
|
90
|
+
# If 'stdin', 'stdout' or 'stderr' are specified, then the +inherit+ value
|
91
|
+
# is automatically set to true and the Process::STARTF_USESTDHANDLES flag is
|
92
|
+
# automatically OR'd to the +startf_flags+ value.
|
93
|
+
#
|
94
|
+
# The ProcessInfo struct contains the following members:
|
95
|
+
#
|
96
|
+
# * process_handle - The handle to the newly created process.
|
97
|
+
# * thread_handle - The handle to the primary thread of the process.
|
98
|
+
# * process_id - Process ID.
|
99
|
+
# * thread_id - Thread ID.
|
100
|
+
#
|
101
|
+
# If the 'close_handles' option is set to true (the default) then the
|
102
|
+
# process_handle and the thread_handle are automatically closed for you
|
103
|
+
# before the ProcessInfo struct is returned.
|
104
|
+
#
|
105
|
+
# If the 'with_logon' option is set, then the process runs the specified
|
106
|
+
# executable file in the security context of the specified credentials.
|
107
|
+
|
108
|
+
VALID_KEYS = %i[
|
109
|
+
app_name command_line inherit creation_flags cwd environment
|
110
|
+
startup_info thread_inherit process_inherit close_handles with_logon
|
111
|
+
domain password
|
112
|
+
].freeze
|
113
|
+
|
114
|
+
VALID_SI_KEYS = %i[
|
115
|
+
startf_flags desktop title x y x_size y_size x_count_chars
|
116
|
+
y_count_chars fill_attribute sw_flags stdin stdout stderr
|
117
|
+
].freeze
|
118
|
+
|
119
|
+
private_constant :VALID_KEYS, :VALID_SI_KEYS
|
120
|
+
|
121
|
+
def create(args)
|
122
|
+
# Validate that args is a Hash
|
123
|
+
validate_args(args)
|
124
|
+
|
125
|
+
initialize_defaults
|
126
|
+
|
127
|
+
# Validate the keys, and convert symbols and case to lowercase strings.
|
128
|
+
validate_keys(args)
|
129
|
+
|
130
|
+
# If the startup_info key is present, validate its subkeys
|
131
|
+
validate_startup_info if hash[:startup_info]
|
132
|
+
|
133
|
+
# validates that 'app_name' or 'command_line' is set
|
134
|
+
validate_command_line
|
135
|
+
|
136
|
+
if hash[:app_name] && !hash[:command_line]
|
137
|
+
hash[:command_line] = hash[:app_name]
|
138
|
+
hash[:app_name] = nil
|
139
|
+
end
|
140
|
+
|
141
|
+
# Setup stdin, stdout and stderr handlers
|
142
|
+
setup_std_handlers
|
143
|
+
|
144
|
+
if logon
|
145
|
+
create_process_with_logon
|
146
|
+
else
|
147
|
+
create_process
|
148
|
+
end
|
149
|
+
|
150
|
+
# Automatically close the process and thread handles in the
|
151
|
+
# PROCESS_INFORMATION struct unless explicitly told not to.
|
152
|
+
if hash[:close_handles]
|
153
|
+
FFI::WIN32.CloseHandle(procinfo[:hProcess])
|
154
|
+
FFI::WIN32.CloseHandle(procinfo[:hThread])
|
155
|
+
end
|
156
|
+
|
157
|
+
ProcessInfo.new(
|
158
|
+
procinfo[:hProcess],
|
159
|
+
procinfo[:hThread],
|
160
|
+
procinfo[:dwProcessId],
|
161
|
+
procinfo[:dwThreadId]
|
162
|
+
)
|
163
|
+
end
|
164
|
+
|
165
|
+
remove_method :setpriority
|
166
|
+
|
167
|
+
# Sets the priority class for the specified process id +int+.
|
168
|
+
#
|
169
|
+
# The +kind+ parameter is ignored but present for API compatibility.
|
170
|
+
# You can only retrieve process information, not process group or user
|
171
|
+
# information, so it is effectively always Process::PRIO_PROCESS.
|
172
|
+
#
|
173
|
+
# Possible +int_priority+ values are:
|
174
|
+
#
|
175
|
+
# * Process::NORMAL_PRIORITY_CLASS
|
176
|
+
# * Process::IDLE_PRIORITY_CLASS
|
177
|
+
# * Process::HIGH_PRIORITY_CLASS
|
178
|
+
# * Process::REALTIME_PRIORITY_CLASS
|
179
|
+
# * Process::BELOW_NORMAL_PRIORITY_CLASS
|
180
|
+
# * Process::ABOVE_NORMAL_PRIORITY_CLASS
|
181
|
+
|
182
|
+
def setpriority(kind, int, int_priority)
|
183
|
+
raise TypeError unless kind.is_a?(Integer)
|
184
|
+
raise TypeError unless int.is_a?(Integer)
|
185
|
+
raise TypeError unless int_priority.is_a?(Integer)
|
186
|
+
|
187
|
+
int = Process.pid if int == 0
|
188
|
+
handle = OpenProcess(PROCESS_SET_INFORMATION, 0 , int)
|
189
|
+
|
190
|
+
if handle == 0
|
191
|
+
raise SystemCallError, FFI.errno, "OpenProcess"
|
192
|
+
end
|
193
|
+
|
194
|
+
begin
|
195
|
+
result = SetPriorityClass(handle, int_priority)
|
196
|
+
raise SystemCallError, FFI.errno, "SetPriorityClass" unless result
|
197
|
+
ensure
|
198
|
+
FFI::WIN32.CloseHandle(handle)
|
199
|
+
end
|
200
|
+
|
201
|
+
return 0
|
202
|
+
end
|
203
|
+
|
204
|
+
private
|
205
|
+
|
206
|
+
def initialize_defaults
|
207
|
+
@hash = {
|
208
|
+
app_name: nil,
|
209
|
+
creation_flags: 0,
|
210
|
+
close_handles: true
|
211
|
+
}
|
212
|
+
@si_hash = nil
|
213
|
+
@procinfo = nil
|
214
|
+
end
|
215
|
+
|
216
|
+
def validate_args(args)
|
217
|
+
raise TypeError, 'hash keyword arguments expected' unless args.is_a?(Hash)
|
218
|
+
end
|
219
|
+
|
220
|
+
def validate_keys(args)
|
221
|
+
args.each do |key, val|
|
222
|
+
key = key.to_s.to_sym
|
223
|
+
raise ArgumentError, "invalid key '#{key}'" unless VALID_KEYS.include?(key)
|
224
|
+
|
225
|
+
hash[key] = val
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
def validate_startup_info
|
230
|
+
hash[:startup_info].each do |key, val|
|
231
|
+
key = key.to_s.to_sym
|
232
|
+
raise ArgumentError, "invalid startup_info key '#{key}'" unless VALID_SI_KEYS.include?(key)
|
233
|
+
|
234
|
+
si_hash[key] = val
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def validate_command_line
|
239
|
+
raise ArgumentError, 'command_line or app_name must be specified' unless hash[:app_name] || hash[:command_line]
|
240
|
+
end
|
241
|
+
|
242
|
+
def procinfo
|
243
|
+
@procinfo ||= PROCESS_INFORMATION.new
|
244
|
+
end
|
245
|
+
|
246
|
+
def hash
|
247
|
+
@hash ||= {}
|
248
|
+
end
|
249
|
+
|
250
|
+
def si_hash
|
251
|
+
@si_hash ||= {}
|
252
|
+
end
|
253
|
+
|
254
|
+
def app
|
255
|
+
wide_string(hash[:app_name])
|
256
|
+
end
|
257
|
+
|
258
|
+
def cmd
|
259
|
+
wide_string(hash[:command_line])
|
260
|
+
end
|
261
|
+
|
262
|
+
def cwd
|
263
|
+
wide_string(hash[:cwd])
|
264
|
+
end
|
265
|
+
|
266
|
+
def password
|
267
|
+
wide_string(hash[:password])
|
268
|
+
end
|
269
|
+
|
270
|
+
def logon
|
271
|
+
wide_string(hash[:with_logon])
|
272
|
+
end
|
273
|
+
|
274
|
+
def domain
|
275
|
+
wide_string(hash[:domain])
|
276
|
+
end
|
277
|
+
|
278
|
+
def env
|
279
|
+
env = hash[:environment]
|
280
|
+
return unless env
|
281
|
+
|
282
|
+
env = env.split(File::PATH_SEPARATOR) unless env.respond_to?(:join)
|
283
|
+
env = env.map { |e| e + 0.chr }.join('') + 0.chr
|
284
|
+
env = wide_string(env) if hash[:with_logon]
|
285
|
+
env
|
286
|
+
end
|
287
|
+
|
288
|
+
def process_security
|
289
|
+
return unless hash[:process_inherit]
|
290
|
+
|
291
|
+
process_security = SECURITY_ATTRIBUTES.new
|
292
|
+
process_security[:nLength] = SECURITY_ATTRIBUTES.size
|
293
|
+
process_security[:bInheritHandle] = 1
|
294
|
+
process_security
|
295
|
+
end
|
296
|
+
|
297
|
+
def thread_security
|
298
|
+
return unless hash[:thread_inherit]
|
299
|
+
|
300
|
+
thread_security = SECURITY_ATTRIBUTES.new
|
301
|
+
thread_security[:nLength] = SECURITY_ATTRIBUTES.size
|
302
|
+
thread_security[:bInheritHandle] = 1
|
303
|
+
thread_security
|
304
|
+
end
|
305
|
+
|
306
|
+
# Automatically handle stdin, stdout and stderr as either IO objects
|
307
|
+
# or file descriptors. This won't work for StringIO, however. It also
|
308
|
+
# will not work on JRuby because of the way it handles internal file
|
309
|
+
# descriptors.
|
310
|
+
def setup_std_handlers
|
311
|
+
%i[stdin stdout stderr].each do |io|
|
312
|
+
next unless si_hash[io]
|
313
|
+
|
314
|
+
handle = if si_hash[io].respond_to?(:fileno)
|
315
|
+
get_osfhandle(si_hash[io].fileno)
|
316
|
+
else
|
317
|
+
get_osfhandle(si_hash[io])
|
318
|
+
end
|
319
|
+
|
320
|
+
if handle == INVALID_HANDLE_VALUE
|
321
|
+
ptr = FFI::MemoryPointer.new(:int)
|
322
|
+
|
323
|
+
errno = if get_errno(ptr).zero?
|
324
|
+
ptr.read_int
|
325
|
+
else
|
326
|
+
FFI.errno
|
327
|
+
end
|
328
|
+
|
329
|
+
raise SystemCallError.new('get_osfhandle', errno)
|
330
|
+
end
|
331
|
+
|
332
|
+
# Most implementations of Ruby on Windows create inheritable
|
333
|
+
# handles by default, but some do not. RF bug #26988.
|
334
|
+
bool = SetHandleInformation(
|
335
|
+
handle,
|
336
|
+
HANDLE_FLAG_INHERIT,
|
337
|
+
HANDLE_FLAG_INHERIT
|
338
|
+
)
|
339
|
+
|
340
|
+
raise SystemCallError.new('SetHandleInformation', FFI.errno) unless bool
|
341
|
+
|
342
|
+
si_hash[io] = handle
|
343
|
+
si_hash[:startf_flags] ||= 0
|
344
|
+
si_hash[:startf_flags] |= STARTF_USESTDHANDLES
|
345
|
+
hash[:inherit] = true
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
def startinfo
|
350
|
+
startinfo = STARTUPINFO.new
|
351
|
+
|
352
|
+
return startinfo if si_hash.empty?
|
353
|
+
|
354
|
+
startinfo[:cb] = startinfo.size
|
355
|
+
startinfo[:lpDesktop] = si_hash[:desktop] if si_hash[:desktop]
|
356
|
+
startinfo[:lpTitle] = si_hash[:title] if si_hash[:title]
|
357
|
+
startinfo[:dwX] = si_hash[:x] if si_hash[:x]
|
358
|
+
startinfo[:dwY] = si_hash[:y] if si_hash[:y]
|
359
|
+
startinfo[:dwXSize] = si_hash[:x_size] if si_hash[:x_size]
|
360
|
+
startinfo[:dwYSize] = si_hash[:y_size] if si_hash[:y_size]
|
361
|
+
startinfo[:dwXCountChars] = si_hash[:x_count_chars] if si_hash[:x_count_chars]
|
362
|
+
startinfo[:dwYCountChars] = si_hash[:y_count_chars] if si_hash[:y_count_chars]
|
363
|
+
startinfo[:dwFillAttribute] = si_hash[:fill_attribute] if si_hash[:fill_attribute]
|
364
|
+
startinfo[:dwFlags] = si_hash[:startf_flags] if si_hash[:startf_flags]
|
365
|
+
startinfo[:wShowWindow] = si_hash[:sw_flags] if si_hash[:sw_flags]
|
366
|
+
startinfo[:cbReserved2] = 0
|
367
|
+
startinfo[:hStdInput] = si_hash[:stdin] if si_hash[:stdin]
|
368
|
+
startinfo[:hStdOutput] = si_hash[:stdout] if si_hash[:stdout]
|
369
|
+
startinfo[:hStdError] = si_hash[:stderr] if si_hash[:stderr]
|
370
|
+
startinfo
|
371
|
+
end
|
372
|
+
|
373
|
+
def create_process_with_logon
|
374
|
+
raise ArgumentError, 'password must be specified if with_logon is used' unless password
|
375
|
+
|
376
|
+
hash[:creation_flags] |= CREATE_UNICODE_ENVIRONMENT
|
377
|
+
|
378
|
+
bool = CreateProcessWithLogonW(
|
379
|
+
logon, # User
|
380
|
+
domain, # Domain
|
381
|
+
password, # Password
|
382
|
+
LOGON_WITH_PROFILE, # Logon flags
|
383
|
+
app, # App name
|
384
|
+
cmd, # Command line
|
385
|
+
hash[:creation_flags], # Creation flags
|
386
|
+
env, # Environment
|
387
|
+
cwd, # Working directory
|
388
|
+
startinfo, # Startup Info
|
389
|
+
procinfo # Process Info
|
390
|
+
)
|
391
|
+
|
392
|
+
raise SystemCallError.new('CreateProcessWithLogonW', FFI.errno) unless bool
|
393
|
+
end
|
394
|
+
|
395
|
+
def create_process
|
396
|
+
inherit = hash[:inherit] ? 1 : 0
|
397
|
+
|
398
|
+
bool = CreateProcessW(
|
399
|
+
app, # App name
|
400
|
+
cmd, # Command line
|
401
|
+
process_security, # Process attributes
|
402
|
+
thread_security, # Thread attributes
|
403
|
+
inherit, # Inherit handles?
|
404
|
+
hash[:creation_flags], # Creation flags
|
405
|
+
env, # Environment
|
406
|
+
cwd, # Working directory
|
407
|
+
startinfo, # Startup Info
|
408
|
+
procinfo # Process Info
|
409
|
+
)
|
410
|
+
|
411
|
+
raise SystemCallError.new('CreateProcess', FFI.errno) unless bool
|
412
|
+
end
|
413
|
+
end
|
414
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require 'puppet/util/windows'
|
2
|
-
require '
|
3
|
-
require 'ffi'
|
1
|
+
require 'puppet/util/windows/monkey_patches/process'
|
2
|
+
require 'puppet/ffi/windows'
|
4
3
|
|
5
4
|
module Puppet::Util::Windows::Process
|
5
|
+
extend Puppet::FFI::Windows::Functions
|
6
|
+
include Puppet::FFI::Windows::Structs
|
6
7
|
extend Puppet::Util::Windows::String
|
7
|
-
extend FFI::Library
|
8
8
|
|
9
9
|
WAIT_TIMEOUT = 0x102
|
10
10
|
WAIT_INTERVAL = 200
|
@@ -361,226 +361,4 @@ module Puppet::Util::Windows::Process
|
|
361
361
|
end
|
362
362
|
module_function :supports_elevated_security?
|
363
363
|
|
364
|
-
ABOVE_NORMAL_PRIORITY_CLASS = 0x0008000
|
365
|
-
BELOW_NORMAL_PRIORITY_CLASS = 0x0004000
|
366
|
-
HIGH_PRIORITY_CLASS = 0x0000080
|
367
|
-
IDLE_PRIORITY_CLASS = 0x0000040
|
368
|
-
NORMAL_PRIORITY_CLASS = 0x0000020
|
369
|
-
REALTIME_PRIORITY_CLASS = 0x0000010
|
370
|
-
|
371
|
-
ffi_convention :stdcall
|
372
|
-
|
373
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx
|
374
|
-
# DWORD WINAPI WaitForSingleObject(
|
375
|
-
# _In_ HANDLE hHandle,
|
376
|
-
# _In_ DWORD dwMilliseconds
|
377
|
-
# );
|
378
|
-
ffi_lib :kernel32
|
379
|
-
attach_function_private :WaitForSingleObject,
|
380
|
-
[:handle, :dword], :dword
|
381
|
-
|
382
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms683189(v=vs.85).aspx
|
383
|
-
# BOOL WINAPI GetExitCodeProcess(
|
384
|
-
# _In_ HANDLE hProcess,
|
385
|
-
# _Out_ LPDWORD lpExitCode
|
386
|
-
# );
|
387
|
-
ffi_lib :kernel32
|
388
|
-
attach_function_private :GetExitCodeProcess,
|
389
|
-
[:handle, :lpdword], :win32_bool
|
390
|
-
|
391
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms683179(v=vs.85).aspx
|
392
|
-
# HANDLE WINAPI GetCurrentProcess(void);
|
393
|
-
ffi_lib :kernel32
|
394
|
-
attach_function_private :GetCurrentProcess, [], :handle
|
395
|
-
|
396
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms683187(v=vs.85).aspx
|
397
|
-
# LPTCH GetEnvironmentStrings(void);
|
398
|
-
ffi_lib :kernel32
|
399
|
-
attach_function_private :GetEnvironmentStringsW, [], :pointer
|
400
|
-
|
401
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms683151(v=vs.85).aspx
|
402
|
-
# BOOL FreeEnvironmentStrings(
|
403
|
-
# _In_ LPTCH lpszEnvironmentBlock
|
404
|
-
# );
|
405
|
-
ffi_lib :kernel32
|
406
|
-
attach_function_private :FreeEnvironmentStringsW,
|
407
|
-
[:pointer], :win32_bool
|
408
|
-
|
409
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms686206(v=vs.85).aspx
|
410
|
-
# BOOL WINAPI SetEnvironmentVariableW(
|
411
|
-
# _In_ LPCTSTR lpName,
|
412
|
-
# _In_opt_ LPCTSTR lpValue
|
413
|
-
# );
|
414
|
-
ffi_lib :kernel32
|
415
|
-
attach_function_private :SetEnvironmentVariableW,
|
416
|
-
[:lpcwstr, :lpcwstr], :win32_bool
|
417
|
-
|
418
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms684320(v=vs.85).aspx
|
419
|
-
# HANDLE WINAPI OpenProcess(
|
420
|
-
# _In_ DWORD DesiredAccess,
|
421
|
-
# _In_ BOOL InheritHandle,
|
422
|
-
# _In_ DWORD ProcessId
|
423
|
-
# );
|
424
|
-
ffi_lib :kernel32
|
425
|
-
attach_function_private :OpenProcess,
|
426
|
-
[:dword, :win32_bool, :dword], :handle
|
427
|
-
|
428
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa379295(v=vs.85).aspx
|
429
|
-
# BOOL WINAPI OpenProcessToken(
|
430
|
-
# _In_ HANDLE ProcessHandle,
|
431
|
-
# _In_ DWORD DesiredAccess,
|
432
|
-
# _Out_ PHANDLE TokenHandle
|
433
|
-
# );
|
434
|
-
ffi_lib :advapi32
|
435
|
-
attach_function_private :OpenProcessToken,
|
436
|
-
[:handle, :dword, :phandle], :win32_bool
|
437
|
-
|
438
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-queryfullprocessimagenamew
|
439
|
-
# BOOL WINAPI QueryFullProcessImageName(
|
440
|
-
# _In_ HANDLE hProcess,
|
441
|
-
# _In_ DWORD dwFlags,
|
442
|
-
# _Out_ LPWSTR lpExeName,
|
443
|
-
# _In_ PDWORD lpdwSize,
|
444
|
-
# );
|
445
|
-
ffi_lib :kernel32
|
446
|
-
attach_function_private :QueryFullProcessImageNameW,
|
447
|
-
[:handle, :dword, :lpwstr, :pdword], :win32_bool
|
448
|
-
|
449
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa379261(v=vs.85).aspx
|
450
|
-
# typedef struct _LUID {
|
451
|
-
# DWORD LowPart;
|
452
|
-
# LONG HighPart;
|
453
|
-
# } LUID, *PLUID;
|
454
|
-
class LUID < FFI::Struct
|
455
|
-
layout :LowPart, :dword,
|
456
|
-
:HighPart, :win32_long
|
457
|
-
end
|
458
|
-
|
459
|
-
# https://msdn.microsoft.com/en-us/library/Windows/desktop/aa379180(v=vs.85).aspx
|
460
|
-
# BOOL WINAPI LookupPrivilegeValue(
|
461
|
-
# _In_opt_ LPCTSTR lpSystemName,
|
462
|
-
# _In_ LPCTSTR lpName,
|
463
|
-
# _Out_ PLUID lpLuid
|
464
|
-
# );
|
465
|
-
ffi_lib :advapi32
|
466
|
-
attach_function_private :LookupPrivilegeValueW,
|
467
|
-
[:lpcwstr, :lpcwstr, :pointer], :win32_bool
|
468
|
-
|
469
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa379626(v=vs.85).aspx
|
470
|
-
TOKEN_INFORMATION_CLASS = enum(
|
471
|
-
:TokenUser, 1,
|
472
|
-
:TokenGroups,
|
473
|
-
:TokenPrivileges,
|
474
|
-
:TokenOwner,
|
475
|
-
:TokenPrimaryGroup,
|
476
|
-
:TokenDefaultDacl,
|
477
|
-
:TokenSource,
|
478
|
-
:TokenType,
|
479
|
-
:TokenImpersonationLevel,
|
480
|
-
:TokenStatistics,
|
481
|
-
:TokenRestrictedSids,
|
482
|
-
:TokenSessionId,
|
483
|
-
:TokenGroupsAndPrivileges,
|
484
|
-
:TokenSessionReference,
|
485
|
-
:TokenSandBoxInert,
|
486
|
-
:TokenAuditPolicy,
|
487
|
-
:TokenOrigin,
|
488
|
-
:TokenElevationType,
|
489
|
-
:TokenLinkedToken,
|
490
|
-
:TokenElevation,
|
491
|
-
:TokenHasRestrictions,
|
492
|
-
:TokenAccessInformation,
|
493
|
-
:TokenVirtualizationAllowed,
|
494
|
-
:TokenVirtualizationEnabled,
|
495
|
-
:TokenIntegrityLevel,
|
496
|
-
:TokenUIAccess,
|
497
|
-
:TokenMandatoryPolicy,
|
498
|
-
:TokenLogonSid,
|
499
|
-
:TokenIsAppContainer,
|
500
|
-
:TokenCapabilities,
|
501
|
-
:TokenAppContainerSid,
|
502
|
-
:TokenAppContainerNumber,
|
503
|
-
:TokenUserClaimAttributes,
|
504
|
-
:TokenDeviceClaimAttributes,
|
505
|
-
:TokenRestrictedUserClaimAttributes,
|
506
|
-
:TokenRestrictedDeviceClaimAttributes,
|
507
|
-
:TokenDeviceGroups,
|
508
|
-
:TokenRestrictedDeviceGroups,
|
509
|
-
:TokenSecurityAttributes,
|
510
|
-
:TokenIsRestricted,
|
511
|
-
:MaxTokenInfoClass
|
512
|
-
)
|
513
|
-
|
514
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa379263(v=vs.85).aspx
|
515
|
-
# typedef struct _LUID_AND_ATTRIBUTES {
|
516
|
-
# LUID Luid;
|
517
|
-
# DWORD Attributes;
|
518
|
-
# } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
|
519
|
-
class LUID_AND_ATTRIBUTES < FFI::Struct
|
520
|
-
layout :Luid, LUID,
|
521
|
-
:Attributes, :dword
|
522
|
-
end
|
523
|
-
|
524
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa379630(v=vs.85).aspx
|
525
|
-
# typedef struct _TOKEN_PRIVILEGES {
|
526
|
-
# DWORD PrivilegeCount;
|
527
|
-
# LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
|
528
|
-
# } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
|
529
|
-
class TOKEN_PRIVILEGES < FFI::Struct
|
530
|
-
layout :PrivilegeCount, :dword,
|
531
|
-
:Privileges, [LUID_AND_ATTRIBUTES, 1] # placeholder for offset
|
532
|
-
end
|
533
|
-
|
534
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/bb530717(v=vs.85).aspx
|
535
|
-
# typedef struct _TOKEN_ELEVATION {
|
536
|
-
# DWORD TokenIsElevated;
|
537
|
-
# } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
|
538
|
-
class TOKEN_ELEVATION < FFI::Struct
|
539
|
-
layout :TokenIsElevated, :dword
|
540
|
-
end
|
541
|
-
|
542
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa446671(v=vs.85).aspx
|
543
|
-
# BOOL WINAPI GetTokenInformation(
|
544
|
-
# _In_ HANDLE TokenHandle,
|
545
|
-
# _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
|
546
|
-
# _Out_opt_ LPVOID TokenInformation,
|
547
|
-
# _In_ DWORD TokenInformationLength,
|
548
|
-
# _Out_ PDWORD ReturnLength
|
549
|
-
# );
|
550
|
-
ffi_lib :advapi32
|
551
|
-
attach_function_private :GetTokenInformation,
|
552
|
-
[:handle, TOKEN_INFORMATION_CLASS, :lpvoid, :dword, :pdword ], :win32_bool
|
553
|
-
|
554
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724834%28v=vs.85%29.aspx
|
555
|
-
# typedef struct _OSVERSIONINFO {
|
556
|
-
# DWORD dwOSVersionInfoSize;
|
557
|
-
# DWORD dwMajorVersion;
|
558
|
-
# DWORD dwMinorVersion;
|
559
|
-
# DWORD dwBuildNumber;
|
560
|
-
# DWORD dwPlatformId;
|
561
|
-
# TCHAR szCSDVersion[128];
|
562
|
-
# } OSVERSIONINFO;
|
563
|
-
class OSVERSIONINFO < FFI::Struct
|
564
|
-
layout(
|
565
|
-
:dwOSVersionInfoSize, :dword,
|
566
|
-
:dwMajorVersion, :dword,
|
567
|
-
:dwMinorVersion, :dword,
|
568
|
-
:dwBuildNumber, :dword,
|
569
|
-
:dwPlatformId, :dword,
|
570
|
-
:szCSDVersion, [:wchar, 128]
|
571
|
-
)
|
572
|
-
end
|
573
|
-
|
574
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx
|
575
|
-
# BOOL WINAPI GetVersionEx(
|
576
|
-
# _Inout_ LPOSVERSIONINFO lpVersionInfo
|
577
|
-
# );
|
578
|
-
ffi_lib :kernel32
|
579
|
-
attach_function_private :GetVersionExW,
|
580
|
-
[:pointer], :win32_bool
|
581
|
-
|
582
|
-
# https://msdn.microsoft.com/en-us/library/windows/desktop/dd318123(v=vs.85).aspx
|
583
|
-
# LANGID GetSystemDefaultUILanguage(void);
|
584
|
-
ffi_lib :kernel32
|
585
|
-
attach_function_private :GetSystemDefaultUILanguage, [], :word
|
586
364
|
end
|