puppet 6.16.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/Gemfile +5 -3
- data/Gemfile.lock +31 -33
- data/README.md +4 -5
- data/Rakefile +4 -12
- 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/agent.rb +2 -2
- data/lib/puppet/agent/locker.rb +0 -7
- data/lib/puppet/application.rb +172 -98
- data/lib/puppet/application/agent.rb +22 -6
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/device.rb +100 -104
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/filebucket.rb +15 -11
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/application/ssl.rb +1 -1
- data/lib/puppet/configurer.rb +66 -31
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/configurer/plugin_handler.rb +21 -19
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +166 -169
- data/lib/puppet/environments.rb +41 -15
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +56 -16
- data/lib/puppet/face/epp.rb +12 -2
- data/lib/puppet/face/facts.rb +66 -6
- data/lib/puppet/face/help.rb +1 -1
- data/lib/puppet/face/node.rb +3 -3
- data/lib/puppet/face/node/clean.rb +2 -2
- data/lib/puppet/face/plugin.rb +5 -8
- data/lib/puppet/feature/base.rb +1 -1
- 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_bucket/dipper.rb +1 -1
- 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 +13 -1
- data/lib/puppet/file_serving/metadata.rb +4 -1
- data/lib/puppet/file_serving/mount.rb +1 -2
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_serving/terminus_selector.rb +7 -8
- data/lib/puppet/file_system/file_impl.rb +4 -4
- data/lib/puppet/file_system/uniquefile.rb +8 -16
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/cache.rb +1 -1
- data/lib/puppet/forge/repository.rb +3 -8
- data/lib/puppet/functions/epp.rb +1 -0
- data/lib/puppet/functions/inline_epp.rb +1 -0
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/new.rb +8 -3
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/generate/models/type/type.rb +4 -1
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/http.rb +23 -13
- data/lib/puppet/http/client.rb +170 -115
- 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 +13 -19
- data/lib/puppet/http/resolver.rb +10 -23
- data/lib/puppet/http/resolver/server_list.rb +23 -45
- data/lib/puppet/http/resolver/settings.rb +7 -10
- data/lib/puppet/http/resolver/srv.rb +11 -15
- data/lib/puppet/http/response.rb +49 -48
- 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 +15 -27
- data/lib/puppet/http/service/ca.rb +11 -22
- data/lib/puppet/http/service/compiler.rb +23 -70
- data/lib/puppet/http/service/file_server.rb +19 -28
- data/lib/puppet/http/service/puppetserver.rb +53 -0
- data/lib/puppet/http/service/report.rb +8 -10
- data/lib/puppet/http/session.rb +16 -24
- data/lib/puppet/{network/http → http}/site.rb +1 -2
- data/lib/puppet/indirector.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +1 -1
- data/lib/puppet/indirector/catalog/rest.rb +2 -4
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/fact_search.rb +60 -0
- data/lib/puppet/indirector/facts/facter.rb +27 -6
- 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 +4 -59
- data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
- data/lib/puppet/indirector/file_content/rest.rb +3 -7
- data/lib/puppet/indirector/file_metadata/http.rb +25 -5
- data/lib/puppet/indirector/file_metadata/rest.rb +5 -11
- data/lib/puppet/indirector/file_server.rb +1 -8
- data/lib/puppet/indirector/generic_http.rb +0 -11
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/json.rb +5 -1
- data/lib/puppet/indirector/msgpack.rb +1 -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/processor.rb +2 -2
- data/lib/puppet/indirector/report/rest.rb +3 -8
- data/lib/puppet/indirector/request.rb +2 -103
- data/lib/puppet/indirector/rest.rb +12 -263
- data/lib/puppet/indirector/yaml.rb +1 -1
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/module_tool/applications.rb +0 -1
- data/lib/puppet/network/authconfig.rb +2 -96
- data/lib/puppet/network/authorization.rb +13 -35
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/formats.rb +2 -1
- data/lib/puppet/network/http.rb +3 -3
- data/lib/puppet/network/http/api/indirected_routes.rb +3 -21
- data/lib/puppet/network/http/api/master/v3.rb +11 -13
- data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
- data/lib/puppet/network/http/connection.rb +247 -316
- data/lib/puppet/network/http/handler.rb +0 -1
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/network/http_pool.rb +16 -34
- data/lib/puppet/node.rb +1 -30
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/node/facts.rb +17 -0
- data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
- data/lib/puppet/pal/pal_impl.rb +93 -14
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/ast/leaf.rb +5 -5
- data/lib/puppet/parser/ast/pops_bridge.rb +0 -42
- data/lib/puppet/parser/compiler.rb +1 -199
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/resource.rb +3 -71
- data/lib/puppet/parser/resource/param.rb +6 -0
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -13
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
- 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/loader/ruby_legacy_function_instantiator.rb +6 -8
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/model/ast.pp +0 -42
- data/lib/puppet/pops/model/ast.rb +0 -290
- 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 -22
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/types/p_meta_type.rb +1 -1
- data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
- 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 +28 -42
- data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -1
- data/lib/puppet/provider.rb +0 -13
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +0 -18
- data/lib/puppet/provider/package/apt.rb +34 -0
- data/lib/puppet/provider/package/aptitude.rb +1 -1
- data/lib/puppet/provider/package/dpkg.rb +1 -11
- data/lib/puppet/provider/package/gem.rb +27 -5
- data/lib/puppet/provider/package/pip.rb +0 -1
- data/lib/puppet/provider/package/pip2.rb +17 -0
- 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 +6 -4
- data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
- data/lib/puppet/provider/package/yum.rb +2 -1
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/service/smf.rb +191 -73
- data/lib/puppet/provider/service/windows.rb +23 -7
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +0 -10
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +11 -4
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/reference/configuration.rb +2 -0
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/reports/http.rb +2 -0
- data/lib/puppet/resource.rb +3 -90
- data/lib/puppet/resource/catalog.rb +1 -14
- data/lib/puppet/resource/type.rb +5 -112
- data/lib/puppet/resource/type_collection.rb +3 -48
- data/lib/puppet/runtime.rb +1 -2
- data/lib/puppet/settings.rb +84 -35
- 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_context.rb +2 -2
- data/lib/puppet/ssl/ssl_provider.rb +37 -1
- data/lib/puppet/ssl/state_machine.rb +3 -1
- data/lib/puppet/ssl/verifier.rb +2 -0
- data/lib/puppet/test/test_helper.rb +19 -16
- data/lib/puppet/transaction.rb +3 -9
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +10 -8
- data/lib/puppet/trusted_external.rb +29 -1
- data/lib/puppet/type.rb +9 -77
- data/lib/puppet/type/file.rb +45 -22
- data/lib/puppet/type/file/checksum.rb +5 -5
- data/lib/puppet/type/file/source.rb +33 -13
- data/lib/puppet/type/filebucket.rb +4 -4
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +5 -13
- data/lib/puppet/type/service.rb +53 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +41 -3
- data/lib/puppet/util/autoload.rb +9 -7
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/checksums.rb +19 -4
- data/lib/puppet/util/execution.rb +2 -13
- data/lib/puppet/util/fileparsing.rb +2 -2
- data/lib/puppet/util/http_proxy.rb +2 -215
- data/lib/puppet/util/monkey_patches.rb +0 -46
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/rdoc.rb +0 -7
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/rubygems.rb +5 -1
- data/lib/puppet/util/run_mode.rb +14 -2
- data/lib/puppet/util/windows.rb +3 -7
- 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 +5 -15
- 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/principal.rb +8 -6
- data/lib/puppet/util/windows/process.rb +4 -226
- data/lib/puppet/util/windows/registry.rb +11 -11
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/service.rb +52 -486
- data/lib/puppet/util/windows/string.rb +12 -13
- data/lib/puppet/util/windows/user.rb +242 -8
- 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 +713 -1380
- data/man/man5/puppet.conf.5 +84 -98
- data/man/man8/puppet-agent.8 +7 -4
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +6 -6
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +55 -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 +2 -2
- data/man/man8/puppet-module.8 +1 -58
- data/man/man8/puppet-node.8 +7 -4
- 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 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
- data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
- data/spec/integration/application/agent_spec.rb +157 -59
- data/spec/integration/application/apply_spec.rb +150 -150
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +78 -29
- data/spec/integration/application/help_spec.rb +44 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +76 -4
- data/spec/integration/configurer_spec.rb +14 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/defaults_spec.rb +33 -5
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/environments/setting_hooks_spec.rb +1 -1
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/network/http_pool_spec.rb +29 -30
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/parser/catalog_spec.rb +0 -38
- data/spec/integration/parser/compiler_spec.rb +11 -0
- data/spec/integration/parser/node_spec.rb +0 -9
- data/spec/integration/parser/pcore_resource_spec.rb +0 -37
- data/spec/integration/type/file_spec.rb +6 -5
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/adsi_spec.rb +2 -2
- data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/registry_spec.rb +7 -7
- data/spec/integration/util/windows/security_spec.rb +1 -1
- data/spec/integration/util/windows/user_spec.rb +47 -5
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +9 -1
- data/spec/lib/puppet_spec/settings.rb +7 -1
- data/spec/shared_contexts/types_setup.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/unit/agent_spec.rb +0 -2
- data/spec/unit/application/agent_spec.rb +3 -4
- data/spec/unit/application/config_spec.rb +224 -4
- data/spec/unit/application/doc_spec.rb +2 -2
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +74 -8
- data/spec/unit/application/filebucket_spec.rb +41 -39
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +17 -4
- data/spec/unit/application_spec.rb +9 -4
- data/spec/unit/certificate_factory_spec.rb +1 -1
- data/spec/unit/configurer/downloader_spec.rb +14 -0
- data/spec/unit/configurer/fact_handler_spec.rb +4 -4
- data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
- data/spec/unit/configurer_spec.rb +96 -44
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/context/trusted_information_spec.rb +12 -10
- data/spec/unit/defaults_spec.rb +77 -28
- data/spec/unit/environments_spec.rb +96 -32
- data/spec/unit/face/config_spec.rb +65 -12
- data/spec/unit/face/facts_spec.rb +4 -0
- data/spec/unit/face/node_spec.rb +2 -2
- 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 +14 -18
- data/spec/unit/file_serving/configuration_spec.rb +6 -12
- data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/file_system_spec.rb +1 -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/inline_epp_spec.rb +26 -1
- data/spec/unit/functions/upcase_spec.rb +1 -1
- data/spec/unit/http/client_spec.rb +71 -17
- 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 +34 -15
- data/spec/unit/http/response_spec.rb +6 -0
- data/spec/unit/http/service/ca_spec.rb +2 -3
- data/spec/unit/http/service/compiler_spec.rb +51 -65
- data/spec/unit/http/service/file_server_spec.rb +5 -6
- data/spec/unit/http/service/puppetserver_spec.rb +112 -0
- data/spec/unit/http/service/report_spec.rb +2 -3
- data/spec/unit/http/service_spec.rb +1 -3
- data/spec/unit/http/session_spec.rb +24 -35
- data/spec/unit/{network/http → http}/site_spec.rb +3 -3
- data/spec/unit/indirector/catalog/json_spec.rb +1 -1
- data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
- data/spec/unit/indirector/facts/facter_spec.rb +97 -0
- data/spec/unit/indirector/facts/json_spec.rb +255 -0
- data/spec/unit/indirector/facts/rest_spec.rb +1 -1
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
- data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
- data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
- 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/json_spec.rb +8 -8
- data/spec/unit/indirector/msgpack_spec.rb +8 -8
- data/spec/unit/indirector/node/json_spec.rb +33 -0
- data/spec/unit/indirector/node/rest_spec.rb +1 -1
- 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 +3 -267
- data/spec/unit/indirector/rest_spec.rb +98 -752
- data/spec/unit/indirector/yaml_spec.rb +7 -7
- data/spec/unit/interface_spec.rb +3 -3
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/authconfig_spec.rb +2 -132
- data/spec/unit/network/authorization_spec.rb +2 -55
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/network/formats_spec.rb +4 -4
- data/spec/unit/network/http/api/indirected_routes_spec.rb +3 -98
- data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
- 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 +61 -73
- 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 +51 -22
- data/spec/unit/node_spec.rb +2 -54
- data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
- data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
- data/spec/unit/parser/scope_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -8
- data/spec/unit/pops/loaders/loaders_spec.rb +77 -22
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- 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 +7 -17
- 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/provider/exec_spec.rb +4 -3
- data/spec/unit/provider/nameservice_spec.rb +0 -57
- data/spec/unit/provider/package/apt_spec.rb +77 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/dpkg_spec.rb +22 -55
- data/spec/unit/provider/package/gem_spec.rb +32 -0
- data/spec/unit/provider/package/openbsd_spec.rb +2 -0
- data/spec/unit/provider/package/pip2_spec.rb +36 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +6 -2
- data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
- data/spec/unit/provider/package/yum_spec.rb +31 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/base_spec.rb +2 -4
- data/spec/unit/provider/service/bsd_spec.rb +5 -1
- data/spec/unit/provider/service/daemontools_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +3 -5
- data/spec/unit/provider/service/freebsd_spec.rb +1 -1
- data/spec/unit/provider/service/gentoo_spec.rb +4 -5
- data/spec/unit/provider/service/init_spec.rb +45 -5
- data/spec/unit/provider/service/launchd_spec.rb +5 -6
- data/spec/unit/provider/service/openrc_spec.rb +4 -5
- data/spec/unit/provider/service/openwrt_spec.rb +1 -1
- data/spec/unit/provider/service/redhat_spec.rb +1 -1
- data/spec/unit/provider/service/runit_spec.rb +2 -1
- data/spec/unit/provider/service/smf_spec.rb +402 -166
- data/spec/unit/provider/service/src_spec.rb +3 -5
- data/spec/unit/provider/service/systemd_spec.rb +3 -6
- data/spec/unit/provider/service/upstart_spec.rb +4 -5
- data/spec/unit/provider/service/windows_spec.rb +50 -15
- data/spec/unit/provider/user/openbsd_spec.rb +1 -0
- data/spec/unit/provider/user/useradd_spec.rb +22 -16
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/provider_spec.rb +0 -12
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/resource/type_collection_spec.rb +2 -22
- data/spec/unit/resource_spec.rb +3 -59
- 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 +586 -239
- data/spec/unit/ssl/base_spec.rb +36 -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 +78 -49
- data/spec/unit/ssl/state_machine_spec.rb +0 -1
- data/spec/unit/ssl/verifier_spec.rb +0 -21
- data/spec/unit/test/test_helper_spec.rb +17 -0
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/transaction/report_spec.rb +3 -3
- data/spec/unit/transaction/resource_harness_spec.rb +2 -2
- data/spec/unit/transaction_spec.rb +45 -79
- data/spec/unit/type/file/checksum_spec.rb +6 -6
- data/spec/unit/type/file/content_spec.rb +1 -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/source_spec.rb +4 -5
- data/spec/unit/type/file_spec.rb +134 -102
- data/spec/unit/type/filebucket_spec.rb +1 -1
- data/spec/unit/type/package_spec.rb +1 -1
- data/spec/unit/type/service_spec.rb +209 -0
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/type_spec.rb +70 -0
- data/spec/unit/util/backups_spec.rb +0 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/checksums_spec.rb +16 -0
- data/spec/unit/util/command_line_spec.rb +11 -6
- data/spec/unit/util/execution_spec.rb +0 -29
- data/spec/unit/util/monkey_patches_spec.rb +0 -6
- data/spec/unit/util/rubygems_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -127
- data/spec/unit/util/windows/api_types_spec.rb +104 -40
- data/spec/unit/util/windows/service_spec.rb +4 -4
- 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 +3 -21
- data/spec/unit/x509/cert_provider_spec.rb +1 -1
- metadata +76 -270
- 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 -85
- 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 -182
- 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 -64
- data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -20
- data/lib/puppet/parser/environment_compiler.rb +0 -199
- 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 -282
- 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/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/network/authconfig_spec.rb +0 -256
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/integration/test/test_helper_spec.rb +0 -31
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- 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/man_spec.rb +0 -25
- 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/man_spec.rb +0 -31
- 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 -723
- 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
@@ -41,6 +41,7 @@ module Puppet::Util::Windows::SID
|
|
41
41
|
# = 8 + max sub identifiers (15) * 4
|
42
42
|
MAXIMUM_SID_BYTE_LENGTH = 68
|
43
43
|
|
44
|
+
ERROR_INVALID_PARAMETER = 87
|
44
45
|
ERROR_INSUFFICIENT_BUFFER = 122
|
45
46
|
|
46
47
|
def self.lookup_account_name(system_name = nil, account_name)
|
@@ -48,9 +49,7 @@ module Puppet::Util::Windows::SID
|
|
48
49
|
begin
|
49
50
|
if system_name
|
50
51
|
system_name_wide = Puppet::Util::Windows::String.wide_string(system_name)
|
51
|
-
|
52
|
-
system_name_ptr = FFI::MemoryPointer.new(:byte, system_name_wide.bytesize)
|
53
|
-
system_name_ptr.put_array_of_uchar(0, system_name_wide.bytes.to_a)
|
52
|
+
system_name_ptr = FFI::MemoryPointer.from_wide_string(system_name_wide)
|
54
53
|
end
|
55
54
|
|
56
55
|
FFI::MemoryPointer.from_string_to_wide_string(account_name) do |account_name_ptr|
|
@@ -101,9 +100,7 @@ module Puppet::Util::Windows::SID
|
|
101
100
|
begin
|
102
101
|
if system_name
|
103
102
|
system_name_wide = Puppet::Util::Windows::String.wide_string(system_name)
|
104
|
-
|
105
|
-
system_name_ptr = FFI::MemoryPointer.new(:byte, system_name_wide.bytesize)
|
106
|
-
system_name_ptr.put_array_of_uchar(0, system_name_wide.bytes.to_a)
|
103
|
+
system_name_ptr = FFI::MemoryPointer.from_wide_string(system_name_wide)
|
107
104
|
end
|
108
105
|
|
109
106
|
FFI::MemoryPointer.new(:byte, sid_bytes.length) do |sid_ptr|
|
@@ -112,6 +109,11 @@ module Puppet::Util::Windows::SID
|
|
112
109
|
FFI::MemoryPointer.new(:uint32, 1) do |name_use_enum_ptr|
|
113
110
|
|
114
111
|
sid_ptr.write_array_of_uchar(sid_bytes)
|
112
|
+
|
113
|
+
if Puppet::Util::Windows::SID.IsValidSid(sid_ptr) == FFI::WIN32_FALSE
|
114
|
+
raise Puppet::Util::Windows::Error.new(_('Byte array for lookup_account_sid is invalid: %{sid_bytes}') % { sid_bytes: sid_bytes }, ERROR_INVALID_PARAMETER)
|
115
|
+
end
|
116
|
+
|
115
117
|
success = LookupAccountSidW(system_name_ptr, sid_ptr, FFI::Pointer::NULL, name_length_ptr,
|
116
118
|
FFI::Pointer::NULL, domain_length_ptr, name_use_enum_ptr)
|
117
119
|
last_error = FFI.errno
|
@@ -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
|
@@ -110,13 +110,16 @@ module Puppet::Util::Windows
|
|
110
110
|
|
111
111
|
private
|
112
112
|
|
113
|
-
|
113
|
+
# max number of wide characters including NULL terminator
|
114
|
+
MAX_KEY_CHAR_LENGTH = 255 + 1
|
115
|
+
|
116
|
+
def reg_enum_key(key, index, max_key_char_length = MAX_KEY_CHAR_LENGTH)
|
114
117
|
subkey, filetime = nil, nil
|
115
118
|
|
116
119
|
FFI::MemoryPointer.new(:dword) do |subkey_length_ptr|
|
117
120
|
FFI::MemoryPointer.new(FFI::WIN32::FILETIME.size) do |filetime_ptr|
|
118
|
-
FFI::MemoryPointer.new(:wchar,
|
119
|
-
subkey_length_ptr.write_dword(
|
121
|
+
FFI::MemoryPointer.new(:wchar, max_key_char_length) do |subkey_ptr|
|
122
|
+
subkey_length_ptr.write_dword(max_key_char_length)
|
120
123
|
|
121
124
|
# RegEnumKeyEx cannot be called twice to properly size the buffer
|
122
125
|
result = RegEnumKeyExW(key.hkey, index,
|
@@ -141,7 +144,10 @@ module Puppet::Util::Windows
|
|
141
144
|
[subkey, filetime]
|
142
145
|
end
|
143
146
|
|
144
|
-
|
147
|
+
# max number of wide characters including NULL terminator
|
148
|
+
MAX_VALUE_CHAR_LENGTH = 16383 + 1
|
149
|
+
|
150
|
+
def reg_enum_value(key, index, max_value_length = MAX_VALUE_CHAR_LENGTH)
|
145
151
|
subkey, type, data = nil, nil, nil
|
146
152
|
|
147
153
|
FFI::MemoryPointer.new(:dword) do |subkey_length_ptr|
|
@@ -234,7 +240,7 @@ module Puppet::Util::Windows
|
|
234
240
|
begin
|
235
241
|
case type
|
236
242
|
when Win32::Registry::REG_SZ, Win32::Registry::REG_EXPAND_SZ
|
237
|
-
result = [ type,
|
243
|
+
result = [ type, data_ptr.read_wide_string(string_length, Encoding::UTF_8, true) ]
|
238
244
|
when Win32::Registry::REG_MULTI_SZ
|
239
245
|
result = [ type, data_ptr.read_wide_string(string_length).split(/\0/) ]
|
240
246
|
when Win32::Registry::REG_BINARY
|
@@ -314,12 +320,6 @@ module Puppet::Util::Windows
|
|
314
320
|
result
|
315
321
|
end
|
316
322
|
|
317
|
-
def sanitize(value)
|
318
|
-
# Replace null bytes with a space
|
319
|
-
value.tr!("\x00", ' ')
|
320
|
-
value
|
321
|
-
end
|
322
|
-
|
323
323
|
ffi_convention :stdcall
|
324
324
|
|
325
325
|
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724862(v=vs.85).aspx
|
@@ -340,10 +340,10 @@ module Puppet::Util::Windows::Security
|
|
340
340
|
Puppet.warning _("Setting control rights for %{path} owner SYSTEM to less than Full Control rights. Setting SYSTEM rights to less than Full Control may have unintented consequences for operations on this file") % { path: path }
|
341
341
|
elsif managing_owner && isownergroup
|
342
342
|
#TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
|
343
|
-
Puppet.debug _("%{path} owner and group both set to user SYSTEM, but group is not managed directly: SYSTEM user rights will be set to FullControl by group") % { path: path }
|
343
|
+
Puppet.debug { _("%{path} owner and group both set to user SYSTEM, but group is not managed directly: SYSTEM user rights will be set to FullControl by group") % { path: path } }
|
344
344
|
else
|
345
345
|
#TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
|
346
|
-
Puppet.debug _("An attempt to set mode %{mode} on item %{path} would result in the owner, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path }
|
346
|
+
Puppet.debug { _("An attempt to set mode %{mode} on item %{path} would result in the owner, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path } }
|
347
347
|
owner_allow = FILE::FILE_ALL_ACCESS
|
348
348
|
end
|
349
349
|
end
|
@@ -356,10 +356,10 @@ module Puppet::Util::Windows::Security
|
|
356
356
|
Puppet.warning _("Setting control rights for %{path} group SYSTEM to less than Full Control rights. Setting SYSTEM rights to less than Full Control may have unintented consequences for operations on this file") % { path: path }
|
357
357
|
elsif managing_group && isownergroup
|
358
358
|
#TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
|
359
|
-
Puppet.debug _("%{path} owner and group both set to user SYSTEM, but owner is not managed directly: SYSTEM user rights will be set to FullControl by owner") % { path: path }
|
359
|
+
Puppet.debug { _("%{path} owner and group both set to user SYSTEM, but owner is not managed directly: SYSTEM user rights will be set to FullControl by owner") % { path: path } }
|
360
360
|
else
|
361
361
|
#TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
|
362
|
-
Puppet.debug _("An attempt to set mode %{mode} on item %{path} would result in the group, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path }
|
362
|
+
Puppet.debug { _("An attempt to set mode %{mode} on item %{path} would result in the group, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path } }
|
363
363
|
group_allow = FILE::FILE_ALL_ACCESS
|
364
364
|
end
|
365
365
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
require 'puppet/
|
3
|
-
require 'ffi'
|
2
|
+
require 'puppet/ffi/windows'
|
4
3
|
|
5
4
|
module Puppet::Util::Windows
|
6
5
|
# This module is designed to provide an API between the windows system and puppet for
|
@@ -8,315 +7,22 @@ module Puppet::Util::Windows
|
|
8
7
|
#
|
9
8
|
# for an overview of the service state transitions see: https://docs.microsoft.com/en-us/windows/desktop/Services/service-status-transitions
|
10
9
|
module Service
|
11
|
-
extend FFI::Library
|
12
10
|
extend Puppet::Util::Windows::String
|
13
11
|
|
14
|
-
|
12
|
+
include Puppet::FFI::Windows::Constants
|
13
|
+
extend Puppet::FFI::Windows::Constants
|
14
|
+
|
15
|
+
include Puppet::FFI::Windows::Structs
|
16
|
+
extend Puppet::FFI::Windows::Structs
|
17
|
+
|
18
|
+
include Puppet::FFI::Windows::Functions
|
19
|
+
extend Puppet::FFI::Windows::Functions
|
15
20
|
|
16
21
|
# integer value of the floor for timeouts when waiting for service pending states.
|
17
22
|
# puppet will wait the length of dwWaitHint if it is longer than this value, but
|
18
23
|
# no shorter
|
19
24
|
DEFAULT_TIMEOUT = 30
|
20
25
|
|
21
|
-
# Service error codes
|
22
|
-
# https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--1000-1299-
|
23
|
-
ERROR_SERVICE_DOES_NOT_EXIST = 0x00000424
|
24
|
-
|
25
|
-
# Service control codes
|
26
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-controlserviceexw
|
27
|
-
SERVICE_CONTROL_STOP = 0x00000001
|
28
|
-
SERVICE_CONTROL_PAUSE = 0x00000002
|
29
|
-
SERVICE_CONTROL_CONTINUE = 0x00000003
|
30
|
-
SERVICE_CONTROL_INTERROGATE = 0x00000004
|
31
|
-
SERVICE_CONTROL_SHUTDOWN = 0x00000005
|
32
|
-
SERVICE_CONTROL_PARAMCHANGE = 0x00000006
|
33
|
-
SERVICE_CONTROL_NETBINDADD = 0x00000007
|
34
|
-
SERVICE_CONTROL_NETBINDREMOVE = 0x00000008
|
35
|
-
SERVICE_CONTROL_NETBINDENABLE = 0x00000009
|
36
|
-
SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A
|
37
|
-
SERVICE_CONTROL_DEVICEEVENT = 0x0000000B
|
38
|
-
SERVICE_CONTROL_HARDWAREPROFILECHANGE = 0x0000000C
|
39
|
-
SERVICE_CONTROL_POWEREVENT = 0x0000000D
|
40
|
-
SERVICE_CONTROL_SESSIONCHANGE = 0x0000000E
|
41
|
-
SERVICE_CONTROL_PRESHUTDOWN = 0x0000000F
|
42
|
-
SERVICE_CONTROL_TIMECHANGE = 0x00000010
|
43
|
-
SERVICE_CONTROL_TRIGGEREVENT = 0x00000020
|
44
|
-
SERVICE_CONTROL_SIGNALS = {
|
45
|
-
SERVICE_CONTROL_STOP => :SERVICE_CONTROL_STOP,
|
46
|
-
SERVICE_CONTROL_PAUSE => :SERVICE_CONTROL_PAUSE,
|
47
|
-
SERVICE_CONTROL_CONTINUE => :SERVICE_CONTROL_CONTINUE,
|
48
|
-
SERVICE_CONTROL_INTERROGATE => :SERVICE_CONTROL_INTERROGATE,
|
49
|
-
SERVICE_CONTROL_SHUTDOWN => :SERVICE_CONTROL_SHUTDOWN,
|
50
|
-
SERVICE_CONTROL_PARAMCHANGE => :SERVICE_CONTROL_PARAMCHANGE,
|
51
|
-
SERVICE_CONTROL_NETBINDADD => :SERVICE_CONTROL_NETBINDADD,
|
52
|
-
SERVICE_CONTROL_NETBINDREMOVE => :SERVICE_CONTROL_NETBINDREMOVE,
|
53
|
-
SERVICE_CONTROL_NETBINDENABLE => :SERVICE_CONTROL_NETBINDENABLE,
|
54
|
-
SERVICE_CONTROL_NETBINDDISABLE => :SERVICE_CONTROL_NETBINDDISABLE,
|
55
|
-
SERVICE_CONTROL_DEVICEEVENT => :SERVICE_CONTROL_DEVICEEVENT,
|
56
|
-
SERVICE_CONTROL_HARDWAREPROFILECHANGE => :SERVICE_CONTROL_HARDWAREPROFILECHANGE,
|
57
|
-
SERVICE_CONTROL_POWEREVENT => :SERVICE_CONTROL_POWEREVENT,
|
58
|
-
SERVICE_CONTROL_SESSIONCHANGE => :SERVICE_CONTROL_SESSIONCHANGE,
|
59
|
-
SERVICE_CONTROL_PRESHUTDOWN => :SERVICE_CONTROL_PRESHUTDOWN,
|
60
|
-
SERVICE_CONTROL_TIMECHANGE => :SERVICE_CONTROL_TIMECHANGE,
|
61
|
-
SERVICE_CONTROL_TRIGGEREVENT => :SERVICE_CONTROL_TRIGGEREVENT
|
62
|
-
}
|
63
|
-
|
64
|
-
|
65
|
-
# Service start type codes
|
66
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-changeserviceconfigw
|
67
|
-
SERVICE_AUTO_START = 0x00000002
|
68
|
-
SERVICE_BOOT_START = 0x00000000
|
69
|
-
SERVICE_DEMAND_START = 0x00000003
|
70
|
-
SERVICE_DISABLED = 0x00000004
|
71
|
-
SERVICE_SYSTEM_START = 0x00000001
|
72
|
-
SERVICE_START_TYPES = {
|
73
|
-
SERVICE_AUTO_START => :SERVICE_AUTO_START,
|
74
|
-
SERVICE_BOOT_START => :SERVICE_BOOT_START,
|
75
|
-
SERVICE_DEMAND_START => :SERVICE_DEMAND_START,
|
76
|
-
SERVICE_DISABLED => :SERVICE_DISABLED,
|
77
|
-
SERVICE_SYSTEM_START => :SERVICE_SYSTEM_START,
|
78
|
-
}
|
79
|
-
|
80
|
-
# Service type codes
|
81
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-changeserviceconfigw
|
82
|
-
SERVICE_FILE_SYSTEM_DRIVER = 0x00000002
|
83
|
-
SERVICE_KERNEL_DRIVER = 0x00000001
|
84
|
-
SERVICE_WIN32_OWN_PROCESS = 0x00000010
|
85
|
-
SERVICE_WIN32_SHARE_PROCESS = 0x00000020
|
86
|
-
SERVICE_USER_OWN_PROCESS = 0x00000050
|
87
|
-
SERVICE_USER_SHARE_PROCESS = 0x00000060
|
88
|
-
# Available only if service is also SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS
|
89
|
-
SERVICE_INTERACTIVE_PROCESS = 0x00000100
|
90
|
-
ALL_SERVICE_TYPES =
|
91
|
-
SERVICE_FILE_SYSTEM_DRIVER |
|
92
|
-
SERVICE_KERNEL_DRIVER |
|
93
|
-
SERVICE_WIN32_OWN_PROCESS |
|
94
|
-
SERVICE_WIN32_SHARE_PROCESS
|
95
|
-
|
96
|
-
# Current state codes
|
97
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
|
98
|
-
SERVICE_CONTINUE_PENDING = 0x00000005
|
99
|
-
SERVICE_PAUSE_PENDING = 0x00000006
|
100
|
-
SERVICE_PAUSED = 0x00000007
|
101
|
-
SERVICE_RUNNING = 0x00000004
|
102
|
-
SERVICE_START_PENDING = 0x00000002
|
103
|
-
SERVICE_STOP_PENDING = 0x00000003
|
104
|
-
SERVICE_STOPPED = 0x00000001
|
105
|
-
UNSAFE_PENDING_STATES = [SERVICE_START_PENDING, SERVICE_STOP_PENDING]
|
106
|
-
FINAL_STATES = {
|
107
|
-
SERVICE_CONTINUE_PENDING => SERVICE_RUNNING,
|
108
|
-
SERVICE_PAUSE_PENDING => SERVICE_PAUSED,
|
109
|
-
SERVICE_START_PENDING => SERVICE_RUNNING,
|
110
|
-
SERVICE_STOP_PENDING => SERVICE_STOPPED
|
111
|
-
}
|
112
|
-
SERVICE_STATES = {
|
113
|
-
SERVICE_CONTINUE_PENDING => :SERVICE_CONTINUE_PENDING,
|
114
|
-
SERVICE_PAUSE_PENDING => :SERVICE_PAUSE_PENDING,
|
115
|
-
SERVICE_PAUSED => :SERVICE_PAUSED,
|
116
|
-
SERVICE_RUNNING => :SERVICE_RUNNING,
|
117
|
-
SERVICE_START_PENDING => :SERVICE_START_PENDING,
|
118
|
-
SERVICE_STOP_PENDING => :SERVICE_STOP_PENDING,
|
119
|
-
SERVICE_STOPPED => :SERVICE_STOPPED,
|
120
|
-
}
|
121
|
-
|
122
|
-
# Service accepts control codes
|
123
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
|
124
|
-
SERVICE_ACCEPT_STOP = 0x00000001
|
125
|
-
SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002
|
126
|
-
SERVICE_ACCEPT_SHUTDOWN = 0x00000004
|
127
|
-
SERVICE_ACCEPT_PARAMCHANGE = 0x00000008
|
128
|
-
SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010
|
129
|
-
SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020
|
130
|
-
SERVICE_ACCEPT_POWEREVENT = 0x00000040
|
131
|
-
SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080
|
132
|
-
SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100
|
133
|
-
SERVICE_ACCEPT_TIMECHANGE = 0x00000200
|
134
|
-
SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400
|
135
|
-
SERVICE_ACCEPT_USER_LOGOFF = 0x00000800
|
136
|
-
|
137
|
-
# Service manager access codes
|
138
|
-
# https://docs.microsoft.com/en-us/windows/desktop/Services/service-security-and-access-rights
|
139
|
-
SC_MANAGER_CREATE_SERVICE = 0x00000002
|
140
|
-
SC_MANAGER_CONNECT = 0x00000001
|
141
|
-
SC_MANAGER_ENUMERATE_SERVICE = 0x00000004
|
142
|
-
SC_MANAGER_LOCK = 0x00000008
|
143
|
-
SC_MANAGER_MODIFY_BOOT_CONFIG = 0x00000020
|
144
|
-
SC_MANAGER_QUERY_LOCK_STATUS = 0x00000010
|
145
|
-
SC_MANAGER_ALL_ACCESS =
|
146
|
-
FILE::STANDARD_RIGHTS_REQUIRED |
|
147
|
-
SC_MANAGER_CREATE_SERVICE |
|
148
|
-
SC_MANAGER_CONNECT |
|
149
|
-
SC_MANAGER_ENUMERATE_SERVICE |
|
150
|
-
SC_MANAGER_LOCK |
|
151
|
-
SC_MANAGER_MODIFY_BOOT_CONFIG |
|
152
|
-
SC_MANAGER_QUERY_LOCK_STATUS
|
153
|
-
|
154
|
-
|
155
|
-
# Service access codes
|
156
|
-
# https://docs.microsoft.com/en-us/windows/desktop/Services/service-security-and-access-rights
|
157
|
-
SERVICE_CHANGE_CONFIG = 0x0002
|
158
|
-
SERVICE_ENUMERATE_DEPENDENTS = 0x0008
|
159
|
-
SERVICE_INTERROGATE = 0x0080
|
160
|
-
SERVICE_PAUSE_CONTINUE = 0x0040
|
161
|
-
SERVICE_QUERY_STATUS = 0x0004
|
162
|
-
SERVICE_QUERY_CONFIG = 0x0001
|
163
|
-
SERVICE_START = 0x0010
|
164
|
-
SERVICE_STOP = 0x0020
|
165
|
-
SERVICE_USER_DEFINED_CONTROL = 0x0100
|
166
|
-
SERVICE_ALL_ACCESS =
|
167
|
-
FILE::STANDARD_RIGHTS_REQUIRED |
|
168
|
-
SERVICE_CHANGE_CONFIG |
|
169
|
-
SERVICE_ENUMERATE_DEPENDENTS |
|
170
|
-
SERVICE_INTERROGATE |
|
171
|
-
SERVICE_PAUSE_CONTINUE |
|
172
|
-
SERVICE_QUERY_STATUS |
|
173
|
-
SERVICE_QUERY_CONFIG |
|
174
|
-
SERVICE_START |
|
175
|
-
SERVICE_STOP |
|
176
|
-
SERVICE_USER_DEFINED_CONTROL
|
177
|
-
|
178
|
-
# Service config codes
|
179
|
-
# From the windows 10 SDK:
|
180
|
-
# //
|
181
|
-
# // Value to indicate no change to an optional parameter
|
182
|
-
# //
|
183
|
-
# #define SERVICE_NO_CHANGE 0xffffffff
|
184
|
-
# https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfig2w
|
185
|
-
SERVICE_CONFIG_DESCRIPTION = 0x00000001
|
186
|
-
SERVICE_CONFIG_FAILURE_ACTIONS = 0x00000002
|
187
|
-
SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 0x00000003
|
188
|
-
SERVICE_CONFIG_FAILURE_ACTIONS_FLAG = 0x00000004
|
189
|
-
SERVICE_CONFIG_SERVICE_SID_INFO = 0x00000005
|
190
|
-
SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 0x00000006
|
191
|
-
SERVICE_CONFIG_PRESHUTDOWN_INFO = 0x00000007
|
192
|
-
SERVICE_CONFIG_TRIGGER_INFO = 0x00000008
|
193
|
-
SERVICE_CONFIG_PREFERRED_NODE = 0x00000009
|
194
|
-
SERVICE_CONFIG_LAUNCH_PROTECTED = 0x00000012
|
195
|
-
SERVICE_NO_CHANGE = 0xffffffff
|
196
|
-
SERVICE_CONFIG_TYPES = {
|
197
|
-
SERVICE_CONFIG_DESCRIPTION => :SERVICE_CONFIG_DESCRIPTION,
|
198
|
-
SERVICE_CONFIG_FAILURE_ACTIONS => :SERVICE_CONFIG_FAILURE_ACTIONS,
|
199
|
-
SERVICE_CONFIG_DELAYED_AUTO_START_INFO => :SERVICE_CONFIG_DELAYED_AUTO_START_INFO,
|
200
|
-
SERVICE_CONFIG_FAILURE_ACTIONS_FLAG => :SERVICE_CONFIG_FAILURE_ACTIONS_FLAG,
|
201
|
-
SERVICE_CONFIG_SERVICE_SID_INFO => :SERVICE_CONFIG_SERVICE_SID_INFO,
|
202
|
-
SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO => :SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO,
|
203
|
-
SERVICE_CONFIG_PRESHUTDOWN_INFO => :SERVICE_CONFIG_PRESHUTDOWN_INFO,
|
204
|
-
SERVICE_CONFIG_TRIGGER_INFO => :SERVICE_CONFIG_TRIGGER_INFO,
|
205
|
-
SERVICE_CONFIG_PREFERRED_NODE => :SERVICE_CONFIG_PREFERRED_NODE,
|
206
|
-
SERVICE_CONFIG_LAUNCH_PROTECTED => :SERVICE_CONFIG_LAUNCH_PROTECTED,
|
207
|
-
}
|
208
|
-
|
209
|
-
# Service enum codes
|
210
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-enumservicesstatusexa
|
211
|
-
SERVICE_ACTIVE = 0x00000001
|
212
|
-
SERVICE_INACTIVE = 0x00000002
|
213
|
-
SERVICE_STATE_ALL =
|
214
|
-
SERVICE_ACTIVE |
|
215
|
-
SERVICE_INACTIVE
|
216
|
-
|
217
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_enum_service_status_processw
|
218
|
-
SERVICENAME_MAX = 256
|
219
|
-
|
220
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
|
221
|
-
# typedef struct _SERVICE_STATUS_PROCESS {
|
222
|
-
# DWORD dwServiceType;
|
223
|
-
# DWORD dwCurrentState;
|
224
|
-
# DWORD dwControlsAccepted;
|
225
|
-
# DWORD dwWin32ExitCode;
|
226
|
-
# DWORD dwServiceSpecificExitCode;
|
227
|
-
# DWORD dwCheckPoint;
|
228
|
-
# DWORD dwWaitHint;
|
229
|
-
# DWORD dwProcessId;
|
230
|
-
# DWORD dwServiceFlags;
|
231
|
-
# } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
|
232
|
-
class SERVICE_STATUS_PROCESS < FFI::Struct
|
233
|
-
layout(
|
234
|
-
:dwServiceType, :dword,
|
235
|
-
:dwCurrentState, :dword,
|
236
|
-
:dwControlsAccepted, :dword,
|
237
|
-
:dwWin32ExitCode, :dword,
|
238
|
-
:dwServiceSpecificExitCode, :dword,
|
239
|
-
:dwCheckPoint, :dword,
|
240
|
-
:dwWaitHint, :dword,
|
241
|
-
:dwProcessId, :dword,
|
242
|
-
:dwServiceFlags, :dword
|
243
|
-
)
|
244
|
-
end
|
245
|
-
|
246
|
-
# https://docs.microsoft.com/en-us/windows/win32/api/winsvc/ns-winsvc-service_delayed_auto_start_info
|
247
|
-
# typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
|
248
|
-
# BOOL fDelayedAutostart;
|
249
|
-
# } SERVICE_DELAYED_AUTO_START_INFO, *LPSERVICE_DELAYED_AUTO_START_INFO;
|
250
|
-
class SERVICE_DELAYED_AUTO_START_INFO < FFI::Struct
|
251
|
-
layout(:fDelayedAutostart, :int)
|
252
|
-
alias aset []=
|
253
|
-
# Intercept the accessor so that we can handle either true/false or 1/0.
|
254
|
-
# Since there is only one member, there’s no need to check the key name.
|
255
|
-
def []=(key, value)
|
256
|
-
[0, false].include?(value) ? aset(key, 0) : aset(key, 1)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_enum_service_status_processw
|
261
|
-
# typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
|
262
|
-
# LPWSTR lpServiceName;
|
263
|
-
# LPWSTR lpDisplayName;
|
264
|
-
# SERVICE_STATUS_PROCESS ServiceStatusProcess;
|
265
|
-
# } ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;
|
266
|
-
class ENUM_SERVICE_STATUS_PROCESSW < FFI::Struct
|
267
|
-
layout(
|
268
|
-
:lpServiceName, :pointer,
|
269
|
-
:lpDisplayName, :pointer,
|
270
|
-
:ServiceStatusProcess, SERVICE_STATUS_PROCESS
|
271
|
-
)
|
272
|
-
end
|
273
|
-
|
274
|
-
# typedef struct _SERVICE_STATUS {
|
275
|
-
# DWORD dwServiceType;
|
276
|
-
# DWORD dwCurrentState;
|
277
|
-
# DWORD dwControlsAccepted;
|
278
|
-
# DWORD dwWin32ExitCode;
|
279
|
-
# DWORD dwServiceSpecificExitCode;
|
280
|
-
# DWORD dwCheckPoint;
|
281
|
-
# DWORD dwWaitHint;
|
282
|
-
# } SERVICE_STATUS, *LPSERVICE_STATUS;
|
283
|
-
class SERVICE_STATUS < FFI::Struct
|
284
|
-
layout(
|
285
|
-
:dwServiceType, :dword,
|
286
|
-
:dwCurrentState, :dword,
|
287
|
-
:dwControlsAccepted, :dword,
|
288
|
-
:dwWin32ExitCode, :dword,
|
289
|
-
:dwServiceSpecificExitCode, :dword,
|
290
|
-
:dwCheckPoint, :dword,
|
291
|
-
:dwWaitHint, :dword,
|
292
|
-
)
|
293
|
-
end
|
294
|
-
|
295
|
-
# typedef struct _QUERY_SERVICE_CONFIGW {
|
296
|
-
# DWORD dwServiceType;
|
297
|
-
# DWORD dwStartType;
|
298
|
-
# DWORD dwErrorControl;
|
299
|
-
# LPWSTR lpBinaryPathName;
|
300
|
-
# LPWSTR lpLoadOrderGroup;
|
301
|
-
# DWORD dwTagId;
|
302
|
-
# LPWSTR lpDependencies;
|
303
|
-
# LPWSTR lpServiceStartName;
|
304
|
-
# LPWSTR lpDisplayName;
|
305
|
-
# } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
|
306
|
-
class QUERY_SERVICE_CONFIGW < FFI::Struct
|
307
|
-
layout(
|
308
|
-
:dwServiceType, :dword,
|
309
|
-
:dwStartType, :dword,
|
310
|
-
:dwErrorControl, :dword,
|
311
|
-
:lpBinaryPathName, :pointer,
|
312
|
-
:lpLoadOrderGroup, :pointer,
|
313
|
-
:dwTagId, :dword,
|
314
|
-
:lpDependencies, :pointer,
|
315
|
-
:lpServiceStartName, :pointer,
|
316
|
-
:lpDisplayName, :pointer,
|
317
|
-
)
|
318
|
-
end
|
319
|
-
|
320
26
|
# Returns true if the service exists, false otherwise.
|
321
27
|
#
|
322
28
|
# @param [String] service_name name of the service
|
@@ -440,43 +146,60 @@ module Puppet::Util::Windows
|
|
440
146
|
end
|
441
147
|
module_function :service_start_type
|
442
148
|
|
443
|
-
#
|
149
|
+
# Query the configuration of a service using QueryServiceConfigW
|
150
|
+
# to find its current logon account
|
444
151
|
#
|
445
|
-
# @
|
446
|
-
#
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
if startup_code.nil?
|
453
|
-
raise Puppet::Error.new(_("Unknown start type %{start_type}") % {startup_type: startup_type.to_s})
|
152
|
+
# @return [String] logon_account account currently set for the service's logon
|
153
|
+
# in the format "DOMAIN\Account" or ".\Account" if it's a local account
|
154
|
+
def logon_account(service_name)
|
155
|
+
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_QUERY_CONFIG) do |service|
|
156
|
+
query_config(service) do |config|
|
157
|
+
return config[:lpServiceStartName].read_arbitrary_wide_string_up_to(Puppet::Util::Windows::ADSI::User::MAX_USERNAME_LENGTH)
|
158
|
+
end
|
454
159
|
end
|
160
|
+
end
|
161
|
+
module_function :logon_account
|
162
|
+
|
163
|
+
# Set the startup configuration of a windows service
|
164
|
+
#
|
165
|
+
# @param [String] service_name the name of the service to modify
|
166
|
+
# @param [Hash] options the configuration to be applied. Expected option keys:
|
167
|
+
# - [Integer] startup_type a code corresponding to a start type for
|
168
|
+
# windows service, see the "Service start type codes" section in the
|
169
|
+
# Puppet::Util::Windows::Service file for the list of available codes
|
170
|
+
# - [String] logon_account the account to be used by the service for logon
|
171
|
+
# - [String] logon_password the provided logon_account's password to be used by the service for logon
|
172
|
+
# - [Bool] delayed whether the service should be started with a delay
|
173
|
+
def set_startup_configuration(service_name, options: {})
|
174
|
+
options[:startup_type] = SERVICE_START_TYPES.key(options[:startup_type]) || SERVICE_NO_CHANGE
|
175
|
+
options[:logon_account] = wide_string(options[:logon_account]) || FFI::Pointer::NULL
|
176
|
+
options[:logon_password] = wide_string(options[:logon_password]) || FFI::Pointer::NULL
|
177
|
+
|
455
178
|
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_CHANGE_CONFIG) do |service|
|
456
|
-
# Currently the only thing puppet's API can really manage
|
457
|
-
# in this list is dwStartType (the third param). Thus no
|
458
|
-
# generic function was written to make use of all the params
|
459
|
-
# since the API as-is couldn't use them anyway
|
460
179
|
success = ChangeServiceConfigW(
|
461
180
|
service,
|
462
|
-
SERVICE_NO_CHANGE,
|
463
|
-
|
464
|
-
SERVICE_NO_CHANGE,
|
465
|
-
FFI::Pointer::NULL,
|
466
|
-
FFI::Pointer::NULL,
|
467
|
-
FFI::Pointer::NULL,
|
468
|
-
FFI::Pointer::NULL,
|
469
|
-
|
470
|
-
|
471
|
-
FFI::Pointer::NULL
|
181
|
+
SERVICE_NO_CHANGE, # dwServiceType
|
182
|
+
options[:startup_type], # dwStartType
|
183
|
+
SERVICE_NO_CHANGE, # dwErrorControl
|
184
|
+
FFI::Pointer::NULL, # lpBinaryPathName
|
185
|
+
FFI::Pointer::NULL, # lpLoadOrderGroup
|
186
|
+
FFI::Pointer::NULL, # lpdwTagId
|
187
|
+
FFI::Pointer::NULL, # lpDependencies
|
188
|
+
options[:logon_account], # lpServiceStartName
|
189
|
+
options[:logon_password], # lpPassword
|
190
|
+
FFI::Pointer::NULL # lpDisplayName
|
472
191
|
)
|
473
192
|
if success == FFI::WIN32_FALSE
|
474
193
|
raise Puppet::Util::Windows::Error.new(_("Failed to update service configuration"))
|
475
194
|
end
|
476
195
|
end
|
477
|
-
|
196
|
+
|
197
|
+
if options[:startup_type]
|
198
|
+
options[:delayed] ||= false
|
199
|
+
set_startup_mode_delayed(service_name, options[:delayed])
|
200
|
+
end
|
478
201
|
end
|
479
|
-
module_function :
|
202
|
+
module_function :set_startup_configuration
|
480
203
|
|
481
204
|
# enumerate over all services in all states and return them as a hash
|
482
205
|
#
|
@@ -974,162 +697,5 @@ module Puppet::Util::Windows
|
|
974
697
|
end
|
975
698
|
private :milliseconds_to_seconds
|
976
699
|
end
|
977
|
-
|
978
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-openscmanagerw
|
979
|
-
# SC_HANDLE OpenSCManagerW(
|
980
|
-
# LPCWSTR lpMachineName,
|
981
|
-
# LPCWSTR lpDatabaseName,
|
982
|
-
# DWORD dwDesiredAccess
|
983
|
-
# );
|
984
|
-
ffi_lib :advapi32
|
985
|
-
attach_function_private :OpenSCManagerW,
|
986
|
-
[:lpcwstr, :lpcwstr, :dword], :handle
|
987
|
-
|
988
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-openservicew
|
989
|
-
# SC_HANDLE OpenServiceW(
|
990
|
-
# SC_HANDLE hSCManager,
|
991
|
-
# LPCWSTR lpServiceName,
|
992
|
-
# DWORD dwDesiredAccess
|
993
|
-
# );
|
994
|
-
ffi_lib :advapi32
|
995
|
-
attach_function_private :OpenServiceW,
|
996
|
-
[:handle, :lpcwstr, :dword], :handle
|
997
|
-
|
998
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-closeservicehandle
|
999
|
-
# BOOL CloseServiceHandle(
|
1000
|
-
# SC_HANDLE hSCObject
|
1001
|
-
# );
|
1002
|
-
ffi_lib :advapi32
|
1003
|
-
attach_function_private :CloseServiceHandle,
|
1004
|
-
[:handle], :win32_bool
|
1005
|
-
|
1006
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-queryservicestatusex
|
1007
|
-
# BOOL QueryServiceStatusEx(
|
1008
|
-
# SC_HANDLE hService,
|
1009
|
-
# SC_STATUS_TYPE InfoLevel,
|
1010
|
-
# LPBYTE lpBuffer,
|
1011
|
-
# DWORD cbBufSize,
|
1012
|
-
# LPDWORD pcbBytesNeeded
|
1013
|
-
# );
|
1014
|
-
SC_STATUS_TYPE = enum(
|
1015
|
-
:SC_STATUS_PROCESS_INFO, 0,
|
1016
|
-
)
|
1017
|
-
ffi_lib :advapi32
|
1018
|
-
attach_function_private :QueryServiceStatusEx,
|
1019
|
-
[:handle, SC_STATUS_TYPE, :lpbyte, :dword, :lpdword], :win32_bool
|
1020
|
-
|
1021
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-queryserviceconfigw
|
1022
|
-
# BOOL QueryServiceConfigW(
|
1023
|
-
# SC_HANDLE hService,
|
1024
|
-
# LPQUERY_SERVICE_CONFIGW lpServiceConfig,
|
1025
|
-
# DWORD cbBufSize,
|
1026
|
-
# LPDWORD pcbBytesNeeded
|
1027
|
-
# );
|
1028
|
-
ffi_lib :advapi32
|
1029
|
-
attach_function_private :QueryServiceConfigW,
|
1030
|
-
[:handle, :lpbyte, :dword, :lpdword], :win32_bool
|
1031
|
-
|
1032
|
-
# https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-queryserviceconfig2w
|
1033
|
-
# BOOL QueryServiceConfig2W(
|
1034
|
-
# SC_HANDLE hService,
|
1035
|
-
# DWORD dwInfoLevel,
|
1036
|
-
# LPBYTE lpBuffer,
|
1037
|
-
# DWORD cbBufSize,
|
1038
|
-
# LPDWORD pcbBytesNeeded
|
1039
|
-
# );
|
1040
|
-
ffi_lib :advapi32
|
1041
|
-
attach_function_private :QueryServiceConfig2W,
|
1042
|
-
[:handle, :dword, :lpbyte, :dword, :lpdword], :win32_bool
|
1043
|
-
|
1044
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-startservicew
|
1045
|
-
# BOOL StartServiceW(
|
1046
|
-
# SC_HANDLE hService,
|
1047
|
-
# DWORD dwNumServiceArgs,
|
1048
|
-
# LPCWSTR *lpServiceArgVectors
|
1049
|
-
# );
|
1050
|
-
ffi_lib :advapi32
|
1051
|
-
attach_function_private :StartServiceW,
|
1052
|
-
[:handle, :dword, :pointer], :win32_bool
|
1053
|
-
|
1054
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-controlservice
|
1055
|
-
# BOOL ControlService(
|
1056
|
-
# SC_HANDLE hService,
|
1057
|
-
# DWORD dwControl,
|
1058
|
-
# LPSERVICE_STATUS lpServiceStatus
|
1059
|
-
# );
|
1060
|
-
ffi_lib :advapi32
|
1061
|
-
attach_function_private :ControlService,
|
1062
|
-
[:handle, :dword, :pointer], :win32_bool
|
1063
|
-
|
1064
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-changeserviceconfigw
|
1065
|
-
# BOOL ChangeServiceConfigW(
|
1066
|
-
# SC_HANDLE hService,
|
1067
|
-
# DWORD dwServiceType,
|
1068
|
-
# DWORD dwStartType,
|
1069
|
-
# DWORD dwErrorControl,
|
1070
|
-
# LPCWSTR lpBinaryPathName,
|
1071
|
-
# LPCWSTR lpLoadOrderGroup,
|
1072
|
-
# LPDWORD lpdwTagId,
|
1073
|
-
# LPCWSTR lpDependencies,
|
1074
|
-
# LPCWSTR lpServiceStartName,
|
1075
|
-
# LPCWSTR lpPassword,
|
1076
|
-
# LPCWSTR lpDisplayName
|
1077
|
-
# );
|
1078
|
-
ffi_lib :advapi32
|
1079
|
-
attach_function_private :ChangeServiceConfigW,
|
1080
|
-
[
|
1081
|
-
:handle,
|
1082
|
-
:dword,
|
1083
|
-
:dword,
|
1084
|
-
:dword,
|
1085
|
-
:lpcwstr,
|
1086
|
-
:lpcwstr,
|
1087
|
-
:lpdword,
|
1088
|
-
:lpcwstr,
|
1089
|
-
:lpcwstr,
|
1090
|
-
:lpcwstr,
|
1091
|
-
:lpcwstr
|
1092
|
-
], :win32_bool
|
1093
|
-
|
1094
|
-
# https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfig2w
|
1095
|
-
# BOOL ChangeServiceConfig2W(
|
1096
|
-
# SC_HANDLE hService,
|
1097
|
-
# DWORD dwInfoLevel,
|
1098
|
-
# LPVOID lpInfo
|
1099
|
-
# );
|
1100
|
-
ffi_lib :advapi32
|
1101
|
-
attach_function_private :ChangeServiceConfig2W,
|
1102
|
-
[:handle, :dword, :lpvoid], :win32_bool
|
1103
|
-
|
1104
|
-
# https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-enumservicesstatusexw
|
1105
|
-
# BOOL EnumServicesStatusExW(
|
1106
|
-
# SC_HANDLE hSCManager,
|
1107
|
-
# SC_ENUM_TYPE InfoLevel,
|
1108
|
-
# DWORD dwServiceType,
|
1109
|
-
# DWORD dwServiceState,
|
1110
|
-
# LPBYTE lpServices,
|
1111
|
-
# DWORD cbBufSize,
|
1112
|
-
# LPDWORD pcbBytesNeeded,
|
1113
|
-
# LPDWORD lpServicesReturned,
|
1114
|
-
# LPDWORD lpResumeHandle,
|
1115
|
-
# LPCWSTR pszGroupName
|
1116
|
-
# );
|
1117
|
-
SC_ENUM_TYPE = enum(
|
1118
|
-
:SC_ENUM_PROCESS_INFO, 0,
|
1119
|
-
)
|
1120
|
-
ffi_lib :advapi32
|
1121
|
-
attach_function_private :EnumServicesStatusExW,
|
1122
|
-
[
|
1123
|
-
:handle,
|
1124
|
-
SC_ENUM_TYPE,
|
1125
|
-
:dword,
|
1126
|
-
:dword,
|
1127
|
-
:lpbyte,
|
1128
|
-
:dword,
|
1129
|
-
:lpdword,
|
1130
|
-
:lpdword,
|
1131
|
-
:lpdword,
|
1132
|
-
:lpcwstr
|
1133
|
-
], :win32_bool
|
1134
700
|
end
|
1135
701
|
end
|