puppet 4.3.0 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/build_defaults.yaml +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/hiera/scope.rb +1 -1
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +45 -47
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +69 -22
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/lookup.rb +126 -150
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/match.rb +1 -0
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/facts/facter.rb +2 -13
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +6 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +4 -11
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/lookup.rb +128 -149
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/match.rb +1 -0
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +80 -12
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
- data/lib/puppet/pops/evaluator/closure.rb +122 -106
- data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +50 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/lookup.rb +17 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +179 -157
- data/lib/puppet/pops/model/model.rb +17 -8
- data/lib/puppet/pops/model/model_label_provider.rb +14 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +428 -403
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +16 -8
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +140 -387
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1253
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation/checker4_0.rb +115 -63
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +16 -9
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/rpm.rb +0 -1
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +2 -2
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +7 -20
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -12
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +33 -42
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/group.rb +6 -2
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +65 -28
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +190 -0
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +22 -16
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +84 -15
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet.rb +17 -0
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- 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 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/collection_spec.rb +8 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +201 -0
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +8 -8
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/application/lookup_spec.rb +138 -28
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +17 -9
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +88 -16
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +62 -6
- data/spec/unit/hiera/scope_spec.rb +5 -2
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/indirector/json_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +8 -0
- data/spec/unit/parser/compiler_spec.rb +16 -18
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +159 -15
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +88 -47
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +12 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +18 -25
- data/spec/unit/provider/service/systemd_spec.rb +25 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +99 -50
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +46 -38
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +48 -11
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +3342 -3195
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
require 'cfpropertylist'
|
|
2
|
+
require 'puppet/util/execution'
|
|
3
|
+
|
|
4
|
+
module Puppet::Util::Plist
|
|
5
|
+
|
|
6
|
+
class FormatError < RuntimeError; end
|
|
7
|
+
|
|
8
|
+
# So I don't have to prepend every method name with 'self.' Most of the
|
|
9
|
+
# methods are going to be Provider methods (as opposed to methods of the
|
|
10
|
+
# INSTANCE of the provider).
|
|
11
|
+
class << self
|
|
12
|
+
# Defines the magic number for binary plists
|
|
13
|
+
#
|
|
14
|
+
# @api private
|
|
15
|
+
def binary_plist_magic_number
|
|
16
|
+
"bplist00"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Defines a default doctype string that should be at the top of most plist
|
|
20
|
+
# files. Useful if we need to modify an invalid doctype string in memory.
|
|
21
|
+
# In version 10.9 and lower of OS X the plist at
|
|
22
|
+
# /System/Library/LaunchDaemons/org.ntp.ntpd.plist had an invalid doctype
|
|
23
|
+
# string. This corrects for that.
|
|
24
|
+
def plist_xml_doctype
|
|
25
|
+
'<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Read a plist file, whether its format is XML or in Apple's "binary1"
|
|
29
|
+
# format, using the CFPropertyList gem.
|
|
30
|
+
def read_plist_file(file_path)
|
|
31
|
+
# We can't really read the file until we know the source encoding in
|
|
32
|
+
# Ruby 1.9.x, so we use the magic number to detect it.
|
|
33
|
+
# NOTE: We used IO.read originally to be Ruby 1.8.x compatible.
|
|
34
|
+
if read_file_with_offset(file_path, binary_plist_magic_number.length) == binary_plist_magic_number
|
|
35
|
+
plist_obj = new_cfpropertylist(:file => file_path)
|
|
36
|
+
convert_cfpropertylist_to_native_types(plist_obj)
|
|
37
|
+
else
|
|
38
|
+
plist_data = open_file_with_args(file_path, "r:UTF-8")
|
|
39
|
+
plist = parse_plist(plist_data, file_path)
|
|
40
|
+
return plist if plist
|
|
41
|
+
|
|
42
|
+
Puppet.debug "Plist #{file_path} ill-formatted, converting with plutil"
|
|
43
|
+
begin
|
|
44
|
+
plist = Puppet::Util::Execution.execute(['/usr/bin/plutil', '-convert', 'xml1', '-o', '/dev/stdout', file_path],
|
|
45
|
+
{:failonfail => true, :combine => true})
|
|
46
|
+
return parse_plist(plist)
|
|
47
|
+
rescue Puppet::ExecutionFailure => detail
|
|
48
|
+
Puppet.warning("Cannot read file #{path}; Puppet is skipping it.\n" + "Details: #{detail}")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Read plist text using the CFPropertyList gem.
|
|
54
|
+
def parse_plist(plist_data, file_path = '')
|
|
55
|
+
bad_xml_doctype = /^.*<!DOCTYPE plist PUBLIC -\/\/Apple Computer.*$/
|
|
56
|
+
if plist_data =~ bad_xml_doctype
|
|
57
|
+
plist_data.gsub!( bad_xml_doctype, plist_xml_doctype )
|
|
58
|
+
Puppet.debug("Had to fix plist with incorrect DOCTYPE declaration: #{file_path}")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
begin
|
|
62
|
+
plist_obj = new_cfpropertylist(:data => plist_data)
|
|
63
|
+
rescue CFFormatError => e
|
|
64
|
+
Puppet.debug "Failed with #{e.class} on #{file_path}: #{e.inspect}"
|
|
65
|
+
return nil
|
|
66
|
+
end
|
|
67
|
+
convert_cfpropertylist_to_native_types(plist_obj)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Helper method to assist in reading a file. It's its own method for
|
|
71
|
+
# stubbing purposes
|
|
72
|
+
#
|
|
73
|
+
# @api private
|
|
74
|
+
def open_file_with_args(file, args)
|
|
75
|
+
File.open(file, args).read
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Helper method to assist in generating a new CFPropertList Plist. It's
|
|
79
|
+
# its own method for stubbing purposes
|
|
80
|
+
#
|
|
81
|
+
# @api private
|
|
82
|
+
def new_cfpropertylist(plist_opts)
|
|
83
|
+
CFPropertyList::List.new(plist_opts)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Helper method to assist in converting a native CFPropertList object to a
|
|
87
|
+
# native Ruby object (hash). It's its own method for stubbing purposes
|
|
88
|
+
#
|
|
89
|
+
# @api private
|
|
90
|
+
def convert_cfpropertylist_to_native_types(plist_obj)
|
|
91
|
+
CFPropertyList.native_types(plist_obj.value)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Helper method to assist in reading a file with an offset value. It's its
|
|
95
|
+
# own method for stubbing purposes
|
|
96
|
+
#
|
|
97
|
+
# @api private
|
|
98
|
+
def read_file_with_offset(file_path, offset)
|
|
99
|
+
IO.read(file_path, offset)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def to_format(format)
|
|
103
|
+
if format.to_sym == :xml
|
|
104
|
+
plist_format = CFPropertyList::List::FORMAT_XML
|
|
105
|
+
elsif format.to_sym == :binary
|
|
106
|
+
plist_format = CFPropertyList::List::FORMAT_BINARY
|
|
107
|
+
else
|
|
108
|
+
raise FormatError.new "Unknown plist format #{format}"
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# This method will write a plist file using a specified format (or XML
|
|
113
|
+
# by default)
|
|
114
|
+
def write_plist_file(plist, file_path, format = :xml)
|
|
115
|
+
begin
|
|
116
|
+
plist_to_save = CFPropertyList::List.new
|
|
117
|
+
plist_to_save.value = CFPropertyList.guess(plist)
|
|
118
|
+
plist_to_save.save(file_path, to_format(format))
|
|
119
|
+
rescue IOError => e
|
|
120
|
+
Puppet.error("Unable to write the file #{file_path}. #{e.inspect}")
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def dump_plist(plist_data, format = :xml)
|
|
125
|
+
plist_to_save = CFPropertyList::List.new
|
|
126
|
+
plist_to_save.value = CFPropertyList.guess(plist_data)
|
|
127
|
+
plist_to_save.to_str(to_format(format))
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
@@ -40,7 +40,7 @@ class Puppet::Util::ResourceTemplate
|
|
|
40
40
|
|
|
41
41
|
def evaluate
|
|
42
42
|
set_resource_variables
|
|
43
|
-
ERB.new(
|
|
43
|
+
ERB.new(Puppet::FileSystem.read(@file, :encoding => 'utf-8'), 0, "-").result(binding)
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
def initialize(file, resource)
|
data/lib/puppet/util/run_mode.rb
CHANGED
|
@@ -44,10 +44,10 @@ module Puppet
|
|
|
44
44
|
# select the system or the user directory depending on the context of
|
|
45
45
|
# this process. The most common use is determining filesystem path
|
|
46
46
|
# values for confdir and vardir. The intended semantics are:
|
|
47
|
-
# {
|
|
47
|
+
# {https://projects.puppetlabs.com/issues/16637 #16637} for Puppet 3.x
|
|
48
48
|
#
|
|
49
49
|
# @todo this code duplicates {Puppet::Settings#which\_configuration\_file}
|
|
50
|
-
# as described in {
|
|
50
|
+
# as described in {https://projects.puppetlabs.com/issues/16637 #16637}
|
|
51
51
|
def which_dir( system, user )
|
|
52
52
|
if Puppet.features.root?
|
|
53
53
|
File.expand_path(system)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# Represents an access control entry, which grants or denies a subject,
|
|
4
4
|
# identified by a SID, rights to a securable object.
|
|
5
5
|
#
|
|
6
|
-
# @see
|
|
6
|
+
# @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa374868(v=vs.85).aspx
|
|
7
7
|
# @api private
|
|
8
8
|
class Puppet::Util::Windows::AccessControlEntry
|
|
9
9
|
require 'puppet/util/windows/security'
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#
|
|
3
3
|
# Represents a list of access control entries (ACEs).
|
|
4
4
|
#
|
|
5
|
-
# @see
|
|
5
|
+
# @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa374872(v=vs.85).aspx
|
|
6
6
|
# @api private
|
|
7
7
|
class Puppet::Util::Windows::AccessControlList
|
|
8
8
|
include Enumerable
|
|
@@ -76,7 +76,7 @@ class Puppet::Util::Windows::AccessControlList
|
|
|
76
76
|
else
|
|
77
77
|
new_ace.sid = new_sid
|
|
78
78
|
|
|
79
|
-
prepend_needed = old_sid ==
|
|
79
|
+
prepend_needed = old_sid == Puppet::Util::Windows::SID::LocalSystem
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
new_aces << new_ace
|
|
@@ -87,7 +87,7 @@ class Puppet::Util::Windows::AccessControlList
|
|
|
87
87
|
if prepend_needed
|
|
88
88
|
mask = Puppet::Util::Windows::File::STANDARD_RIGHTS_ALL | Puppet::Util::Windows::File::SPECIFIC_RIGHTS_ALL
|
|
89
89
|
ace = Puppet::Util::Windows::AccessControlEntry.new(
|
|
90
|
-
|
|
90
|
+
Puppet::Util::Windows::SID::LocalSystem,
|
|
91
91
|
mask)
|
|
92
92
|
@aces << ace
|
|
93
93
|
end
|
|
@@ -56,21 +56,30 @@ module Puppet::Util::Windows::ADSI
|
|
|
56
56
|
"winmgmts:{impersonationLevel=impersonate}!//#{host}/root/cimv2"
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
+
# This method should *only* be used to generate WinNT://<SID> style monikers
|
|
60
|
+
# used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not useable
|
|
61
|
+
# to resolve an account with WIN32OLE.connect
|
|
62
|
+
# Valid input is a SID::Principal, S-X-X style SID string or any valid
|
|
63
|
+
# account name with or without domain prefix
|
|
59
64
|
# @api private
|
|
60
65
|
def sid_uri_safe(sid)
|
|
61
|
-
return sid_uri(sid) if sid.kind_of?(
|
|
66
|
+
return sid_uri(sid) if sid.kind_of?(Puppet::Util::Windows::SID::Principal)
|
|
62
67
|
|
|
63
68
|
begin
|
|
64
|
-
sid =
|
|
69
|
+
sid = Puppet::Util::Windows::SID.name_to_sid_object(sid)
|
|
65
70
|
sid_uri(sid)
|
|
66
|
-
rescue
|
|
71
|
+
rescue Puppet::Util::Windows::Error, Puppet::Error
|
|
67
72
|
nil
|
|
68
73
|
end
|
|
69
74
|
end
|
|
70
75
|
|
|
76
|
+
# This method should *only* be used to generate WinNT://<SID> style monikers
|
|
77
|
+
# used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not useable
|
|
78
|
+
# to resolve an account with WIN32OLE.connect
|
|
71
79
|
def sid_uri(sid)
|
|
72
|
-
raise Puppet::Error.new( "Must use a valid SID
|
|
73
|
-
|
|
80
|
+
raise Puppet::Error.new( "Must use a valid SID::Principal" ) if !sid.kind_of?(Puppet::Util::Windows::SID::Principal)
|
|
81
|
+
|
|
82
|
+
"WinNT://#{sid.sid}"
|
|
74
83
|
end
|
|
75
84
|
|
|
76
85
|
def uri(resource_name, resource_type, host = '.')
|
|
@@ -87,7 +96,7 @@ module Puppet::Util::Windows::ADSI
|
|
|
87
96
|
|
|
88
97
|
ffi_convention :stdcall
|
|
89
98
|
|
|
90
|
-
#
|
|
99
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx
|
|
91
100
|
# BOOL WINAPI GetComputerName(
|
|
92
101
|
# _Out_ LPTSTR lpBuffer,
|
|
93
102
|
# _Inout_ LPDWORD lpnSize
|
|
@@ -99,8 +108,6 @@ module Puppet::Util::Windows::ADSI
|
|
|
99
108
|
|
|
100
109
|
module Shared
|
|
101
110
|
def uri(name, host = '.')
|
|
102
|
-
if sid_uri = Puppet::Util::Windows::ADSI.sid_uri_safe(name) then return sid_uri end
|
|
103
|
-
|
|
104
111
|
host = '.' if ['NT AUTHORITY', 'BUILTIN', Socket.gethostname].include?(host)
|
|
105
112
|
|
|
106
113
|
# group or user
|
|
@@ -136,7 +143,7 @@ module Puppet::Util::Windows::ADSI
|
|
|
136
143
|
sids = names.map do |name|
|
|
137
144
|
sid = Puppet::Util::Windows::SID.name_to_sid_object(name)
|
|
138
145
|
raise Puppet::Error.new( "Could not resolve name: #{name}" ) if !sid
|
|
139
|
-
[sid.
|
|
146
|
+
[sid.sid, sid]
|
|
140
147
|
end
|
|
141
148
|
|
|
142
149
|
Hash[ sids ]
|
|
@@ -247,20 +254,12 @@ module Puppet::Util::Windows::ADSI
|
|
|
247
254
|
|
|
248
255
|
|
|
249
256
|
def add_group_sids(*sids)
|
|
250
|
-
group_names =
|
|
251
|
-
sids.each do |sid|
|
|
252
|
-
group_names << Puppet::Util::Windows::SID.sid_to_name(sid)
|
|
253
|
-
end
|
|
254
|
-
|
|
257
|
+
group_names = sids.map { |s| s.domain_account }
|
|
255
258
|
add_to_groups(*group_names)
|
|
256
259
|
end
|
|
257
260
|
|
|
258
261
|
def remove_group_sids(*sids)
|
|
259
|
-
group_names =
|
|
260
|
-
sids.each do |sid|
|
|
261
|
-
group_names << Puppet::Util::Windows::SID.sid_to_name(sid)
|
|
262
|
-
end
|
|
263
|
-
|
|
262
|
+
group_names = sids.map { |s| s.domain_account }
|
|
264
263
|
remove_from_groups(*group_names)
|
|
265
264
|
end
|
|
266
265
|
|
|
@@ -273,7 +272,7 @@ module Puppet::Util::Windows::ADSI
|
|
|
273
272
|
|
|
274
273
|
desired_groups = desired_groups.split(',').map(&:strip)
|
|
275
274
|
|
|
276
|
-
current_hash = Hash[ self.group_sids.map { |sid| [sid.
|
|
275
|
+
current_hash = Hash[ self.group_sids.map { |sid| [sid.sid, sid] } ]
|
|
277
276
|
desired_hash = self.class.name_sid_hash(desired_groups)
|
|
278
277
|
|
|
279
278
|
# First we add the user to all the groups it should be in but isn't
|
|
@@ -301,7 +300,7 @@ module Puppet::Util::Windows::ADSI
|
|
|
301
300
|
new(name, Puppet::Util::Windows::ADSI.create(name, 'user'))
|
|
302
301
|
end
|
|
303
302
|
|
|
304
|
-
# UNLEN from lmcons.h -
|
|
303
|
+
# UNLEN from lmcons.h - https://stackoverflow.com/a/2155176
|
|
305
304
|
MAX_USERNAME_LENGTH = 256
|
|
306
305
|
def self.current_user_name
|
|
307
306
|
user_name = ''
|
|
@@ -321,10 +320,30 @@ module Puppet::Util::Windows::ADSI
|
|
|
321
320
|
user_name
|
|
322
321
|
end
|
|
323
322
|
|
|
324
|
-
def self.exists?(
|
|
325
|
-
|
|
323
|
+
def self.exists?(name_or_sid)
|
|
324
|
+
well_known = false
|
|
325
|
+
if (sid = Puppet::Util::Windows::SID.name_to_sid_object(name_or_sid))
|
|
326
|
+
return true if sid.account_type == :SidTypeUser
|
|
327
|
+
|
|
328
|
+
# 'well known group' is special as it can be a group like Everyone OR a user like SYSTEM
|
|
329
|
+
# so try to resolve it
|
|
330
|
+
# https://msdn.microsoft.com/en-us/library/cc234477.aspx
|
|
331
|
+
well_known = sid.account_type == :SidTypeWellKnownGroup
|
|
332
|
+
return false if sid.account_type != :SidTypeAlias && !well_known
|
|
333
|
+
name_or_sid = "#{sid.domain}\\#{sid.account}"
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
user = Puppet::Util::Windows::ADSI.connect(User.uri(*User.parse_name(name_or_sid)))
|
|
337
|
+
# otherwise, verify that the account is actually a User account
|
|
338
|
+
user.Class == 'User'
|
|
339
|
+
rescue
|
|
340
|
+
# special accounts like SYSTEM cannot resolve via moniker like WinNT://./SYSTEM,user
|
|
341
|
+
# and thus fail to connect - so given a validly resolved SID, this failure is ambiguous as it
|
|
342
|
+
# may indicate either a group like Service or an account like SYSTEM
|
|
343
|
+
well_known
|
|
326
344
|
end
|
|
327
345
|
|
|
346
|
+
|
|
328
347
|
def self.delete(name)
|
|
329
348
|
Puppet::Util::Windows::ADSI.delete(name, 'user')
|
|
330
349
|
end
|
|
@@ -342,7 +361,7 @@ module Puppet::Util::Windows::ADSI
|
|
|
342
361
|
|
|
343
362
|
ffi_convention :stdcall
|
|
344
363
|
|
|
345
|
-
#
|
|
364
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724432(v=vs.85).aspx
|
|
346
365
|
# BOOL WINAPI GetUserName(
|
|
347
366
|
# _Out_ LPTSTR lpBuffer,
|
|
348
367
|
# _Inout_ LPDWORD lpnSize
|
|
@@ -357,7 +376,7 @@ module Puppet::Util::Windows::ADSI
|
|
|
357
376
|
begin
|
|
358
377
|
Puppet::Util::Windows::ADSI.wmi_connection.Delete("Win32_UserProfile.SID='#{sid}'")
|
|
359
378
|
rescue WIN32OLERuntimeError => e
|
|
360
|
-
#
|
|
379
|
+
# https://social.technet.microsoft.com/Forums/en/ITCG/thread/0f190051-ac96-4bf1-a47f-6b864bfacee5
|
|
361
380
|
# Prior to Vista SP1, there's no builtin way to programmatically
|
|
362
381
|
# delete user profiles (except for delprof.exe). So try to delete
|
|
363
382
|
# but warn if we fail
|
|
@@ -437,7 +456,7 @@ module Puppet::Util::Windows::ADSI
|
|
|
437
456
|
def set_members(desired_members, inclusive = true)
|
|
438
457
|
return if desired_members.nil?
|
|
439
458
|
|
|
440
|
-
current_hash = Hash[ self.member_sids.map { |sid| [sid.
|
|
459
|
+
current_hash = Hash[ self.member_sids.map { |sid| [sid.sid, sid] } ]
|
|
441
460
|
desired_hash = self.class.name_sid_hash(desired_members)
|
|
442
461
|
|
|
443
462
|
# First we add all missing members
|
|
@@ -464,8 +483,26 @@ module Puppet::Util::Windows::ADSI
|
|
|
464
483
|
new(name, Puppet::Util::Windows::ADSI.create(name, 'group'))
|
|
465
484
|
end
|
|
466
485
|
|
|
467
|
-
def self.exists?(
|
|
468
|
-
|
|
486
|
+
def self.exists?(name_or_sid)
|
|
487
|
+
well_known = false
|
|
488
|
+
if (sid = Puppet::Util::Windows::SID.name_to_sid_object(name_or_sid))
|
|
489
|
+
return true if sid.account_type == :SidTypeGroup
|
|
490
|
+
|
|
491
|
+
# 'well known group' is special as it can be a group like Everyone OR a user like SYSTEM
|
|
492
|
+
# so try to resolve it
|
|
493
|
+
# https://msdn.microsoft.com/en-us/library/cc234477.aspx
|
|
494
|
+
well_known = sid.account_type == :SidTypeWellKnownGroup
|
|
495
|
+
return false if sid.account_type != :SidTypeAlias && !well_known
|
|
496
|
+
name_or_sid = "#{sid.domain}\\#{sid.account}"
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
user = Puppet::Util::Windows::ADSI.connect(Group.uri(*Group.parse_name(name_or_sid)))
|
|
500
|
+
user.Class == 'Group'
|
|
501
|
+
rescue
|
|
502
|
+
# special groups like Authenticated Users cannot resolve via moniker like WinNT://./Authenticated Users,group
|
|
503
|
+
# and thus fail to connect - so given a validly resolved SID, this failure is ambiguous as it
|
|
504
|
+
# may indicate either a group like Service or an account like SYSTEM
|
|
505
|
+
well_known
|
|
469
506
|
end
|
|
470
507
|
|
|
471
508
|
def self.delete(name)
|
|
@@ -19,7 +19,6 @@ module Puppet::Util::Windows::APITypes
|
|
|
19
19
|
|
|
20
20
|
class ::FFI::Pointer
|
|
21
21
|
NULL_HANDLE = 0
|
|
22
|
-
NULL_TERMINATOR_WCHAR = 0
|
|
23
22
|
|
|
24
23
|
def self.from_string_to_wide_string(str, &block)
|
|
25
24
|
str = Puppet::Util::Windows::String.wide_string(str)
|
|
@@ -52,6 +51,7 @@ module Puppet::Util::Windows::APITypes
|
|
|
52
51
|
|
|
53
52
|
alias_method :read_wchar, :read_uint16
|
|
54
53
|
alias_method :read_word, :read_uint16
|
|
54
|
+
alias_method :read_array_of_wchar, :read_array_of_uint16
|
|
55
55
|
|
|
56
56
|
def read_wide_string(char_length, dst_encoding = Encoding::UTF_8)
|
|
57
57
|
# char_length is number of wide chars (typically excluding NULLs), *not* bytes
|
|
@@ -59,18 +59,24 @@ module Puppet::Util::Windows::APITypes
|
|
|
59
59
|
str.encode(dst_encoding)
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
# @param max_char_length [Integer] Maximum number of wide chars tp return (typically excluding NULLs), *not* bytes
|
|
63
|
+
# @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
|
|
64
|
+
# null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
|
|
65
|
+
# null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
|
|
66
|
+
def read_arbitrary_wide_string_up_to(max_char_length = 512, null_terminator = :single_null)
|
|
67
|
+
if null_terminator != :single_null && null_terminator != :double_null
|
|
68
|
+
raise "Unable to read wide strings with #{null_terminator} terminal nulls"
|
|
69
|
+
end
|
|
66
70
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
terminator_width = null_terminator == :single_null ? 1 : 2
|
|
72
|
+
reader_method = null_terminator == :single_null ? :get_uint16 : :get_uint32
|
|
73
|
+
|
|
74
|
+
# Look for a null terminating characters; if found, read up to that null (exclusive)
|
|
75
|
+
(0...max_char_length - terminator_width).each do |i|
|
|
76
|
+
return read_wide_string(i) if send(reader_method, (i * 2)) == 0
|
|
72
77
|
end
|
|
73
78
|
|
|
79
|
+
# String is longer than the max; read just to the max
|
|
74
80
|
read_wide_string(max_char_length)
|
|
75
81
|
end
|
|
76
82
|
|
|
@@ -113,10 +119,10 @@ module Puppet::Util::Windows::APITypes
|
|
|
113
119
|
# https://github.com/ffi/ffi/wiki/Types
|
|
114
120
|
|
|
115
121
|
# Windows - Common Data Types
|
|
116
|
-
#
|
|
122
|
+
# https://msdn.microsoft.com/en-us/library/cc230309.aspx
|
|
117
123
|
|
|
118
124
|
# Windows Data Types
|
|
119
|
-
#
|
|
125
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
|
|
120
126
|
|
|
121
127
|
FFI.typedef :uint16, :word
|
|
122
128
|
FFI.typedef :uint32, :dword
|
|
@@ -156,7 +162,7 @@ module Puppet::Util::Windows::APITypes
|
|
|
156
162
|
FFI.typedef :int32, :win32_long
|
|
157
163
|
# FFI bool can be only 1 byte at times,
|
|
158
164
|
# Win32 BOOL is a signed int, and is always 4 bytes, even on x64
|
|
159
|
-
#
|
|
165
|
+
# https://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
|
|
160
166
|
FFI.typedef :int32, :win32_bool
|
|
161
167
|
|
|
162
168
|
# Same as a LONG, a 32-bit signed integer
|
|
@@ -173,7 +179,7 @@ module Puppet::Util::Windows::APITypes
|
|
|
173
179
|
module ::FFI::WIN32
|
|
174
180
|
extend ::FFI::Library
|
|
175
181
|
|
|
176
|
-
#
|
|
182
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
|
|
177
183
|
# typedef struct _GUID {
|
|
178
184
|
# DWORD Data1;
|
|
179
185
|
# WORD Data2;
|
|
@@ -204,7 +210,7 @@ module Puppet::Util::Windows::APITypes
|
|
|
204
210
|
def ==(other) Windows.memcmp(other, self, size) == 0 end
|
|
205
211
|
end
|
|
206
212
|
|
|
207
|
-
#
|
|
213
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
|
|
208
214
|
# typedef struct _SYSTEMTIME {
|
|
209
215
|
# WORD wYear;
|
|
210
216
|
# WORD wMonth;
|
|
@@ -245,21 +251,21 @@ module Puppet::Util::Windows::APITypes
|
|
|
245
251
|
|
|
246
252
|
ffi_convention :stdcall
|
|
247
253
|
|
|
248
|
-
#
|
|
254
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
|
|
249
255
|
# HLOCAL WINAPI LocalFree(
|
|
250
256
|
# _In_ HLOCAL hMem
|
|
251
257
|
# );
|
|
252
258
|
ffi_lib :kernel32
|
|
253
259
|
attach_function :LocalFree, [:handle], :handle
|
|
254
260
|
|
|
255
|
-
#
|
|
261
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
|
|
256
262
|
# BOOL WINAPI CloseHandle(
|
|
257
263
|
# _In_ HANDLE hObject
|
|
258
264
|
# );
|
|
259
265
|
ffi_lib :kernel32
|
|
260
266
|
attach_function_private :CloseHandle, [:handle], :win32_bool
|
|
261
267
|
|
|
262
|
-
#
|
|
268
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
|
|
263
269
|
# void CoTaskMemFree(
|
|
264
270
|
# _In_opt_ LPVOID pv
|
|
265
271
|
# );
|
|
@@ -49,7 +49,7 @@ module Puppet::Util::Windows::COM
|
|
|
49
49
|
CLSCTX_ALL = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER
|
|
50
50
|
CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER
|
|
51
51
|
|
|
52
|
-
#
|
|
52
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
|
|
53
53
|
# HRESULT CoCreateInstance(
|
|
54
54
|
# _In_ REFCLSID rclsid,
|
|
55
55
|
# _In_ LPUNKNOWN pUnkOuter,
|
|
@@ -202,14 +202,14 @@ module Puppet::Util::Windows::COM
|
|
|
202
202
|
|
|
203
203
|
Unknown = Instance[IUnknown]
|
|
204
204
|
|
|
205
|
-
#
|
|
205
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms678543(v=vs.85).aspx
|
|
206
206
|
# HRESULT CoInitialize(
|
|
207
207
|
# _In_opt_ LPVOID pvReserved
|
|
208
208
|
# );
|
|
209
209
|
ffi_lib :ole32
|
|
210
210
|
attach_function_private :CoInitialize, [:lpvoid], :hresult
|
|
211
211
|
|
|
212
|
-
#
|
|
212
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms688715(v=vs.85).aspx
|
|
213
213
|
# void CoUninitialize(void);
|
|
214
214
|
ffi_lib :ole32
|
|
215
215
|
attach_function_private :CoUninitialize, [], :void
|
|
@@ -66,7 +66,7 @@ class Puppet::Util::Windows::Error < Puppet::Error
|
|
|
66
66
|
|
|
67
67
|
ffi_convention :stdcall
|
|
68
68
|
|
|
69
|
-
#
|
|
69
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
|
|
70
70
|
# DWORD WINAPI FormatMessage(
|
|
71
71
|
# _In_ DWORD dwFlags,
|
|
72
72
|
# _In_opt_ LPCVOID lpSource,
|
|
@@ -272,7 +272,7 @@ module Puppet::Util::Windows::File
|
|
|
272
272
|
|
|
273
273
|
private
|
|
274
274
|
|
|
275
|
-
#
|
|
275
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa364571(v=vs.85).aspx
|
|
276
276
|
FSCTL_GET_REPARSE_POINT = 0x900a8
|
|
277
277
|
|
|
278
278
|
def self.resolve_symlink(handle)
|
|
@@ -290,7 +290,7 @@ module Puppet::Util::Windows::File
|
|
|
290
290
|
|
|
291
291
|
ffi_convention :stdcall
|
|
292
292
|
|
|
293
|
-
#
|
|
293
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa365512(v=vs.85).aspx
|
|
294
294
|
# BOOL WINAPI ReplaceFile(
|
|
295
295
|
# _In_ LPCTSTR lpReplacedFileName,
|
|
296
296
|
# _In_ LPCTSTR lpReplacementFileName,
|
|
@@ -305,7 +305,7 @@ module Puppet::Util::Windows::File
|
|
|
305
305
|
attach_function_private :ReplaceFileW,
|
|
306
306
|
[:lpcwstr, :lpcwstr, :lpcwstr, :dword, :lpvoid, :lpvoid], :win32_bool
|
|
307
307
|
|
|
308
|
-
#
|
|
308
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx
|
|
309
309
|
# BOOL WINAPI MoveFileEx(
|
|
310
310
|
# _In_ LPCTSTR lpExistingFileName,
|
|
311
311
|
# _In_opt_ LPCTSTR lpNewFileName,
|
|
@@ -328,7 +328,7 @@ module Puppet::Util::Windows::File
|
|
|
328
328
|
rescue LoadError
|
|
329
329
|
end
|
|
330
330
|
|
|
331
|
-
#
|
|
331
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa364944(v=vs.85).aspx
|
|
332
332
|
# DWORD WINAPI GetFileAttributes(
|
|
333
333
|
# _In_ LPCTSTR lpFileName
|
|
334
334
|
# );
|
|
@@ -336,7 +336,7 @@ module Puppet::Util::Windows::File
|
|
|
336
336
|
attach_function_private :GetFileAttributesW,
|
|
337
337
|
[:lpcwstr], :dword
|
|
338
338
|
|
|
339
|
-
#
|
|
339
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx
|
|
340
340
|
# BOOL WINAPI SetFileAttributes(
|
|
341
341
|
# _In_ LPCTSTR lpFileName,
|
|
342
342
|
# _In_ DWORD dwFileAttributes
|
|
@@ -358,7 +358,7 @@ module Puppet::Util::Windows::File
|
|
|
358
358
|
attach_function_private :CreateFileW,
|
|
359
359
|
[:lpcwstr, :dword, :dword, :pointer, :dword, :dword, :handle], :handle
|
|
360
360
|
|
|
361
|
-
#
|
|
361
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa363216(v=vs.85).aspx
|
|
362
362
|
# BOOL WINAPI DeviceIoControl(
|
|
363
363
|
# _In_ HANDLE hDevice,
|
|
364
364
|
# _In_ DWORD dwIoControlCode,
|
|
@@ -376,8 +376,8 @@ module Puppet::Util::Windows::File
|
|
|
376
376
|
MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16384
|
|
377
377
|
|
|
378
378
|
# REPARSE_DATA_BUFFER
|
|
379
|
-
#
|
|
380
|
-
#
|
|
379
|
+
# https://msdn.microsoft.com/en-us/library/cc232006.aspx
|
|
380
|
+
# https://msdn.microsoft.com/en-us/library/windows/hardware/ff552012(v=vs.85).aspx
|
|
381
381
|
# struct is always MAXIMUM_REPARSE_DATA_BUFFER_SIZE bytes
|
|
382
382
|
class REPARSE_DATA_BUFFER < FFI::Struct
|
|
383
383
|
layout :ReparseTag, :win32_ulong,
|