puppet 4.5.3-x86-mingw32 → 4.6.1-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/Gemfile +10 -1
- data/ext/debian/control +2 -4
- data/ext/project_data.yaml +4 -4
- data/install.rb +6 -2
- data/lib/puppet.rb +3 -1
- data/lib/puppet/agent/locker.rb +1 -1
- data/lib/puppet/application.rb +6 -4
- data/lib/puppet/application/agent.rb +2 -1
- data/lib/puppet/application/cert.rb +35 -2
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/generate.rb +5 -0
- data/lib/puppet/application/lookup.rb +3 -3
- data/lib/puppet/application_support.rb +1 -1
- data/lib/puppet/compilable_resource_type.rb +15 -0
- data/lib/puppet/configurer.rb +67 -10
- data/lib/puppet/configurer/plugin_handler.rb +2 -4
- data/lib/puppet/data_providers/hiera_config.rb +1 -1
- data/lib/puppet/defaults.rb +34 -7
- data/lib/puppet/environments.rb +4 -2
- data/lib/puppet/error.rb +1 -1
- data/lib/puppet/external/dot.rb +1 -1
- data/lib/puppet/face/ca.rb +4 -1
- data/lib/puppet/face/certificate.rb +7 -1
- data/lib/puppet/face/epp.rb +5 -5
- data/lib/puppet/face/generate.rb +64 -0
- data/lib/puppet/face/help.rb +19 -13
- data/lib/puppet/face/man.rb +1 -1
- data/lib/puppet/feature/external_facts.rb +1 -1
- data/lib/puppet/file_system.rb +16 -0
- data/lib/puppet/file_system/file_impl.rb +5 -0
- data/lib/puppet/file_system/memory_impl.rb +4 -0
- data/lib/puppet/file_system/path_pattern.rb +1 -0
- data/lib/puppet/file_system/windows.rb +19 -0
- data/lib/puppet/functions.rb +3 -5
- data/lib/puppet/functions/assert_type.rb +1 -1
- data/lib/puppet/functions/defined.rb +7 -5
- data/lib/puppet/functions/dig.rb +2 -18
- data/lib/puppet/functions/hiera.rb +1 -1
- data/lib/puppet/functions/lest.rb +1 -37
- data/lib/puppet/functions/new.rb +2 -473
- data/lib/puppet/functions/reverse_each.rb +2 -59
- data/lib/puppet/functions/scanf.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -63
- data/lib/puppet/functions/then.rb +1 -61
- data/lib/puppet/functions/type.rb +1 -40
- data/lib/puppet/functions/unwrap.rb +40 -0
- data/lib/puppet/generate/models/type/property.rb +70 -0
- data/lib/puppet/generate/models/type/type.rb +57 -0
- data/lib/puppet/generate/templates/type/pcore.erb +41 -0
- data/lib/puppet/generate/type.rb +239 -0
- data/lib/puppet/graph/simple_graph.rb +2 -6
- data/lib/puppet/indirector/catalog/static_compiler.rb +5 -2
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/key/ca.rb +2 -2
- data/lib/puppet/indirector/request.rb +25 -4
- data/lib/puppet/indirector/rest.rb +73 -3
- data/lib/puppet/info_service/class_information_service.rb +1 -2
- data/lib/puppet/interface/documentation.rb +1 -1
- data/lib/puppet/loaders.rb +2 -0
- data/lib/puppet/metatype/manager.rb +6 -6
- data/lib/puppet/module.rb +8 -1
- data/lib/puppet/module_tool.rb +2 -2
- data/lib/puppet/module_tool/checksums.rb +1 -1
- data/lib/puppet/module_tool/errors/installer.rb +2 -2
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +23 -32
- data/lib/puppet/network/http/rack/rest.rb +15 -1
- data/lib/puppet/network/rights.rb +1 -11
- data/lib/puppet/node/environment.rb +7 -3
- data/lib/puppet/node/facts.rb +1 -1
- data/lib/puppet/parameter.rb +23 -3
- data/lib/puppet/parameter/boolean.rb +1 -1
- data/lib/puppet/parameter/value.rb +1 -1
- data/lib/puppet/parser.rb +0 -1
- data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
- data/lib/puppet/parser/ast/resource.rb +5 -0
- data/lib/puppet/parser/ast/resource_instance.rb +5 -1
- data/lib/puppet/parser/ast/resourceparam.rb +5 -0
- data/lib/puppet/parser/compiler.rb +14 -17
- data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +1 -1
- data/lib/puppet/parser/environment_compiler.rb +10 -0
- data/lib/puppet/parser/functions/create_resources.rb +39 -24
- data/lib/puppet/parser/functions/defined.rb +2 -26
- data/lib/puppet/parser/functions/dig.rb +29 -0
- data/lib/puppet/parser/functions/lest.rb +49 -0
- data/lib/puppet/parser/functions/new.rb +530 -0
- data/lib/puppet/parser/functions/require.rb +1 -1
- data/lib/puppet/parser/functions/reverse_each.rb +83 -0
- data/lib/puppet/parser/functions/scanf.rb +4 -4
- data/lib/puppet/parser/functions/step.rb +84 -0
- data/lib/puppet/parser/functions/then.rb +73 -0
- data/lib/puppet/parser/functions/type.rb +53 -0
- data/lib/puppet/parser/resource.rb +16 -7
- data/lib/puppet/parser/scope.rb +36 -28
- data/lib/puppet/parser/type_loader.rb +1 -1
- data/lib/puppet/plugins/data_providers/data_provider.rb +1 -1
- data/lib/puppet/pops.rb +13 -0
- data/lib/puppet/pops/adapters.rb +49 -49
- data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +39 -2
- data/lib/puppet/pops/evaluator/closure.rb +39 -13
- data/lib/puppet/pops/evaluator/collector_transformer.rb +10 -1
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +16 -11
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +0 -1
- data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -2
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +19 -45
- data/lib/puppet/pops/functions/function.rb +5 -0
- data/lib/puppet/pops/issues.rb +1 -1
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/base_loader.rb +12 -15
- data/lib/puppet/pops/loader/loader.rb +15 -50
- data/lib/puppet/pops/loader/loader_paths.rb +28 -2
- data/lib/puppet/pops/loader/module_loaders.rb +16 -1
- data/lib/puppet/pops/loader/null_loader.rb +17 -1
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +12 -11
- data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +2 -3
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +52 -13
- data/lib/puppet/pops/loader/static_loader.rb +55 -0
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +30 -14
- data/lib/puppet/pops/loader/typed_name.rb +50 -0
- data/lib/puppet/pops/loaders.rb +64 -19
- data/lib/puppet/pops/merge_strategy.rb +7 -7
- data/lib/puppet/pops/migration/migration_checker.rb +4 -0
- data/lib/puppet/pops/model/model_label_provider.rb +2 -0
- data/lib/puppet/pops/parser/egrammar.ra +8 -5
- data/lib/puppet/pops/parser/eparser.rb +1550 -1498
- data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +7 -0
- data/lib/puppet/pops/parser/lexer2.rb +14 -1
- data/lib/puppet/pops/parser/locator.rb +30 -1
- data/lib/puppet/pops/parser/parser_support.rb +0 -3
- data/lib/puppet/pops/parser/slurp_support.rb +3 -3
- data/lib/puppet/pops/patterns.rb +9 -1
- data/lib/puppet/pops/pcore.rb +67 -11
- data/lib/puppet/pops/puppet_stack.rb +43 -0
- data/lib/puppet/pops/resource/param.rb +51 -0
- data/lib/puppet/pops/resource/resource_type_impl.rb +301 -0
- data/lib/puppet/pops/resource/resource_type_set.pcore +21 -0
- data/lib/puppet/pops/serialization.rb +17 -0
- data/lib/puppet/pops/serialization/abstract_reader.rb +149 -0
- data/lib/puppet/pops/serialization/abstract_writer.rb +179 -0
- data/lib/puppet/pops/serialization/deserializer.rb +60 -0
- data/lib/puppet/pops/serialization/extension.rb +126 -0
- data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
- data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
- data/lib/puppet/pops/serialization/json.rb +247 -0
- data/lib/puppet/pops/serialization/object.rb +63 -0
- data/lib/puppet/pops/serialization/rgen.rb +151 -0
- data/lib/puppet/pops/serialization/serializer.rb +91 -0
- data/lib/puppet/pops/serialization/time_factory.rb +66 -0
- data/lib/puppet/pops/types/annotatable.rb +36 -0
- data/lib/puppet/pops/types/implementation_registry.rb +3 -8
- data/lib/puppet/pops/types/p_meta_type.rb +83 -0
- data/lib/puppet/pops/types/p_object_type.rb +110 -117
- data/lib/puppet/pops/types/p_runtime_type.rb +13 -0
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +23 -0
- data/lib/puppet/pops/types/p_sem_ver_type.rb +30 -2
- data/lib/puppet/pops/types/p_sensitive_type.rb +69 -0
- data/lib/puppet/pops/types/p_type_set_type.rb +361 -0
- data/lib/puppet/pops/types/puppet_object.rb +0 -5
- data/lib/puppet/pops/types/ruby_generator.rb +9 -2
- data/lib/puppet/pops/types/type_calculator.rb +6 -1
- data/lib/puppet/pops/types/type_factory.rb +14 -12
- data/lib/puppet/pops/types/type_formatter.rb +78 -33
- data/lib/puppet/pops/types/type_mismatch_describer.rb +0 -2
- data/lib/puppet/pops/types/type_parser.rb +27 -2
- data/lib/puppet/pops/types/type_set_reference.rb +59 -0
- data/lib/puppet/pops/types/types.rb +366 -13
- data/lib/puppet/pops/validation.rb +4 -4
- data/lib/puppet/pops/validation/checker4_0.rb +5 -2
- data/lib/puppet/pops/visitor.rb +2 -2
- data/lib/puppet/property.rb +64 -5
- data/lib/puppet/provider.rb +1 -1
- data/lib/puppet/provider/aixobject.rb +3 -3
- data/lib/puppet/provider/group/aix.rb +4 -4
- data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
- data/lib/puppet/provider/mailalias/aliases.rb +1 -1
- data/lib/puppet/provider/mcx/mcxcontent.rb +2 -2
- data/lib/puppet/provider/mount/parsed.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
- data/lib/puppet/provider/package/appdmg.rb +3 -3
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +5 -0
- data/lib/puppet/provider/package/nim.rb +1 -1
- data/lib/puppet/provider/package/pacman.rb +2 -2
- data/lib/puppet/provider/package/pip.rb +5 -3
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +5 -5
- data/lib/puppet/provider/package/pkgdmg.rb +4 -4
- data/lib/puppet/provider/package/pkgin.rb +1 -1
- data/lib/puppet/provider/package/pkgutil.rb +1 -1
- data/lib/puppet/provider/package/portage.rb +48 -8
- data/lib/puppet/provider/package/sun.rb +1 -1
- data/lib/puppet/provider/package/tdnf.rb +28 -0
- data/lib/puppet/provider/package/yum.rb +22 -4
- data/lib/puppet/provider/parsedfile.rb +2 -2
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/bsd.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +2 -2
- data/lib/puppet/provider/service/debian.rb +3 -3
- data/lib/puppet/provider/service/init.rb +5 -3
- data/lib/puppet/provider/service/launchd.rb +16 -2
- data/lib/puppet/provider/service/runit.rb +1 -1
- data/lib/puppet/provider/service/smf.rb +8 -1
- data/lib/puppet/provider/service/systemd.rb +39 -6
- data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +3 -2
- data/lib/puppet/provider/user/directoryservice.rb +4 -3
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +3 -0
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/resource.rb +33 -7
- data/lib/puppet/resource/capability_finder.rb +74 -54
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/settings.rb +17 -6
- data/lib/puppet/settings/environment_conf.rb +1 -1
- data/lib/puppet/settings/server_list_setting.rb +20 -0
- data/lib/puppet/ssl/certificate_authority.rb +32 -9
- data/lib/puppet/ssl/certificate_authority/interface.rb +164 -24
- data/lib/puppet/ssl/host.rb +3 -3
- data/lib/puppet/ssl/oids.rb +10 -0
- data/lib/puppet/ssl/validator/default_validator.rb +2 -2
- data/lib/puppet/test/test_helper.rb +2 -2
- data/lib/puppet/transaction.rb +12 -0
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/transaction/event.rb +29 -2
- data/lib/puppet/transaction/event_manager.rb +1 -1
- data/lib/puppet/transaction/persistence.rb +84 -0
- data/lib/puppet/transaction/report.rb +49 -2
- data/lib/puppet/transaction/resource_harness.rb +98 -18
- data/lib/puppet/type.rb +63 -21
- data/lib/puppet/type/augeas.rb +3 -3
- data/lib/puppet/type/cron.rb +1 -1
- data/lib/puppet/type/file.rb +39 -2
- data/lib/puppet/type/file/data_sync.rb +13 -5
- data/lib/puppet/type/host.rb +1 -1
- data/lib/puppet/type/mount.rb +2 -6
- data/lib/puppet/type/notify.rb +1 -1
- data/lib/puppet/type/package.rb +1 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/scheduled_task.rb +1 -1
- data/lib/puppet/type/ssh_authorized_key.rb +2 -2
- data/lib/puppet/type/tidy.rb +1 -1
- data/lib/puppet/type/yumrepo.rb +3 -3
- data/lib/puppet/type/zone.rb +1 -1
- data/lib/puppet/util.rb +2 -2
- data/lib/puppet/util/classgen.rb +1 -1
- data/lib/puppet/util/command_line.rb +6 -2
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/http_proxy.rb +1 -1
- data/lib/puppet/util/inifile.rb +1 -1
- data/lib/puppet/util/instance_loader.rb +1 -1
- data/lib/puppet/util/logging.rb +1 -1
- data/lib/puppet/util/multi_match.rb +1 -1
- data/lib/puppet/util/plist.rb +15 -5
- data/lib/puppet/util/profiler.rb +1 -1
- data/lib/puppet/util/profiler/around_profiler.rb +1 -1
- data/lib/puppet/util/psych_support.rb +1 -1
- data/lib/puppet/util/rdoc.rb +2 -2
- data/lib/puppet/util/rubygems.rb +1 -1
- data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/adsi.rb +30 -8
- data/lib/puppet/util/windows/api_types.rb +1 -1
- data/lib/puppet/util/windows/file.rb +59 -0
- data/lib/puppet/util/windows/process.rb +10 -0
- data/lib/puppet/util/windows/security.rb +1 -1
- data/lib/puppet/util/windows/user.rb +22 -4
- data/lib/puppet/util/yaml.rb +15 -3
- data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
- data/lib/puppet/vendor/rgen_patch.rb +1 -1
- data/lib/puppet/version.rb +2 -2
- data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
- data/spec/integration/agent/logging_spec.rb +15 -14
- data/spec/integration/application/apply_spec.rb +1 -0
- data/spec/integration/directory_environments_spec.rb +16 -0
- data/spec/integration/environments/settings_spec.rb +32 -4
- data/spec/integration/faces/documentation_spec.rb +1 -1
- data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
- data/spec/integration/node/environment_spec.rb +21 -0
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/parser/compiler_spec.rb +76 -840
- data/spec/integration/parser/functions/require_spec.rb +3 -3
- data/spec/integration/parser/parameter_defaults_spec.rb +6 -2
- data/spec/integration/parser/pcore_resource_spec.rb +208 -0
- data/spec/integration/parser/resource_expressions_spec.rb +4 -2
- data/spec/integration/provider/yumrepo_spec.rb +4 -1
- data/spec/integration/transaction/report_spec.rb +666 -0
- data/spec/integration/type/file_spec.rb +11 -12
- data/spec/integration/util/windows/adsi_spec.rb +99 -0
- data/spec/integration/util/windows/principal_spec.rb +109 -60
- data/spec/integration/util/windows/process_spec.rb +4 -2
- data/spec/integration/util/windows/security_spec.rb +34 -8
- data/spec/integration/util/windows/user_spec.rb +26 -4
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/network.rb +12 -8
- data/spec/shared_examples/rhel_package_provider.rb +341 -0
- data/spec/spec_helper.rb +8 -2
- data/spec/unit/application/cert_spec.rb +20 -0
- data/spec/unit/configurer/plugin_handler_spec.rb +0 -26
- data/spec/unit/configurer_spec.rb +46 -0
- data/spec/unit/defaults_spec.rb +14 -0
- data/spec/unit/face/generate_spec.rb +230 -0
- data/spec/unit/face/help_spec.rb +53 -0
- data/spec/unit/face/parser_spec.rb +6 -0
- data/spec/unit/face/plugin_spec.rb +0 -4
- data/spec/unit/file_system_spec.rb +85 -0
- data/spec/unit/functions/lookup_spec.rb +4 -4
- data/spec/unit/functions/match_spec.rb +2 -2
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/split_spec.rb +1 -1
- data/spec/unit/functions/unwrap_spec.rb +29 -0
- data/spec/unit/functions/versioncmp_spec.rb +1 -1
- data/spec/unit/functions4_spec.rb +8 -8
- data/spec/unit/indirector/facts/facter_spec.rb +1 -9
- data/spec/unit/indirector/rest_spec.rb +95 -9
- data/spec/unit/module_spec.rb +43 -7
- data/spec/unit/module_tool/applications/installer_spec.rb +10 -1
- data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
- data/spec/unit/module_tool/applications/upgrader_spec.rb +8 -0
- data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
- data/spec/unit/network/http/api/indirected_routes_spec.rb +49 -58
- data/spec/unit/network/http/api/master/v3_spec.rb +7 -4
- data/spec/unit/network/rights_spec.rb +1 -1
- data/spec/unit/parameter_spec.rb +11 -0
- data/spec/unit/parser/compiler_spec.rb +19 -33
- data/spec/unit/{appmgmt_spec.rb → parser/environment_compiler_spec.rb} +12 -1
- data/spec/unit/parser/functions/create_resources_spec.rb +76 -4
- data/spec/unit/parser/functions/require_spec.rb +2 -2
- data/spec/unit/parser/resource_spec.rb +21 -11
- data/spec/unit/parser/scope_spec.rb +1 -5
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
- data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +63 -5
- data/spec/unit/pops/loaders/module_loaders_spec.rb +2 -2
- data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +27 -3
- data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +8 -0
- data/spec/unit/pops/parser/parse_calls_spec.rb +9 -0
- data/spec/unit/pops/puppet_stack_spec.rb +79 -0
- data/spec/unit/pops/resource/resource_type_impl_spec.rb +37 -0
- data/spec/unit/pops/serialization/packer_spec.rb +153 -0
- data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
- data/spec/unit/pops/serialization/serialization_spec.rb +228 -0
- data/spec/unit/pops/types/p_object_type_spec.rb +44 -2
- data/spec/unit/pops/types/p_sem_ver_type_spec.rb +42 -0
- data/spec/unit/pops/types/p_sensitive_type_spec.rb +139 -0
- data/spec/unit/pops/types/p_type_set_type_spec.rb +424 -0
- data/spec/unit/pops/types/ruby_generator_spec.rb +497 -181
- data/spec/unit/pops/types/type_calculator_spec.rb +10 -4
- data/spec/unit/pops/types/type_formatter_spec.rb +1 -1
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +2 -2
- data/spec/unit/pops/types/type_parser_spec.rb +1 -1
- data/spec/unit/pops/types/types_spec.rb +1 -1
- data/spec/unit/pops/validator/validator_spec.rb +18 -1
- data/spec/unit/property_spec.rb +48 -11
- data/spec/unit/provider/group/windows_adsi_spec.rb +11 -1
- data/spec/unit/provider/package/dnf_spec.rb +1 -99
- data/spec/unit/provider/package/pacman_spec.rb +4 -4
- data/spec/unit/provider/package/pip_spec.rb +14 -0
- data/spec/unit/provider/package/pkg_spec.rb +6 -0
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -3
- data/spec/unit/provider/package/portage_spec.rb +64 -8
- data/spec/unit/provider/package/tdnf_spec.rb +18 -0
- data/spec/unit/provider/package/windows/package_spec.rb +4 -1
- data/spec/unit/provider/package/windows_spec.rb +8 -2
- data/spec/unit/provider/package/yum_spec.rb +6 -377
- data/spec/unit/provider/service/base_spec.rb +6 -0
- data/spec/unit/provider/service/debian_spec.rb +16 -7
- data/spec/unit/provider/service/gentoo_spec.rb +6 -0
- data/spec/unit/provider/service/init_spec.rb +7 -0
- data/spec/unit/provider/service/launchd_spec.rb +35 -4
- data/spec/unit/provider/service/openrc_spec.rb +6 -0
- data/spec/unit/provider/service/smf_spec.rb +31 -6
- data/spec/unit/provider/service/src_spec.rb +6 -0
- data/spec/unit/provider/service/systemd_spec.rb +70 -20
- data/spec/unit/provider/service/upstart_spec.rb +6 -0
- data/spec/unit/provider/user/aix_spec.rb +7 -0
- data/spec/unit/provider/user/directoryservice_spec.rb +30 -1
- data/spec/unit/provider/user/windows_adsi_spec.rb +19 -0
- data/spec/unit/resource/capability_finder_spec.rb +51 -3
- data/spec/unit/resource/catalog_spec.rb +5 -0
- data/spec/unit/resource/type_spec.rb +2 -2
- data/spec/unit/resource_spec.rb +19 -0
- data/spec/unit/settings_spec.rb +13 -0
- data/spec/unit/ssl/certificate_authority/interface_spec.rb +176 -10
- data/spec/unit/ssl/certificate_authority_spec.rb +63 -22
- data/spec/unit/ssl/host_spec.rb +1 -1
- data/spec/unit/ssl/oids_spec.rb +24 -21
- data/spec/unit/transaction/event_spec.rb +3 -1
- data/spec/unit/transaction/persistence_spec.rb +173 -0
- data/spec/unit/transaction/report_spec.rb +64 -1
- data/spec/unit/transaction/resource_harness_spec.rb +91 -0
- data/spec/unit/type/file/content_spec.rb +47 -15
- data/spec/unit/type/file_spec.rb +28 -0
- data/spec/unit/type/mount_spec.rb +5 -12
- data/spec/unit/type/yumrepo_spec.rb +1 -5
- data/spec/unit/type_spec.rb +32 -0
- data/spec/unit/util/command_line_spec.rb +11 -0
- data/spec/unit/util/execution_spec.rb +1 -1
- data/spec/unit/util/plist_spec.rb +16 -3
- data/spec/unit/util/storage_spec.rb +4 -1
- data/spec/unit/util/windows/adsi_spec.rb +23 -2
- data/spec/unit/util/windows/file_spec.rb +56 -1
- data/spec/unit/util/windows/sid_spec.rb +31 -7
- data/spec/unit/util/yaml_spec.rb +12 -0
- data/spec/unit/util_spec.rb +87 -20
- metadata +91 -48
- data/ext/puppetlisten/puppetlisten.rb +0 -77
- data/ext/puppetlisten/puppetrun.rb +0 -38
- data/lib/puppet/resource/type_collection_helper.rb +0 -7
- data/spec/unit/parser/functions/defined_spec.rb +0 -120
- data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
data/lib/puppet/type/yumrepo.rb
CHANGED
@@ -11,15 +11,15 @@ Puppet::Type.newtype(:yumrepo) do
|
|
11
11
|
|
12
12
|
Continuation lines that yum supports (for the `baseurl`, for example)
|
13
13
|
are not supported. This type does not attempt to read or verify the
|
14
|
-
|
14
|
+
existence of files listed in the `include` attribute."
|
15
15
|
|
16
16
|
# Ensure yumrepos can be removed too.
|
17
17
|
ensurable
|
18
18
|
# Doc string for properties that can be made 'absent'
|
19
19
|
ABSENT_DOC="Set this to `absent` to remove it from the file completely."
|
20
20
|
# False can be false/0/no and True can be true/1/yes in yum.
|
21
|
-
YUM_BOOLEAN=/^(
|
22
|
-
YUM_BOOLEAN_DOC="Valid values are:
|
21
|
+
YUM_BOOLEAN=/^(true|false|0|1|no|yes)$/
|
22
|
+
YUM_BOOLEAN_DOC="Valid values are: false/0/no or true/1/yes."
|
23
23
|
|
24
24
|
# Common munge logic for YUM_BOOLEAN values. Munges for two requirements:
|
25
25
|
# 1) Because of how regex validation works in Puppet::Parameter::Value,
|
data/lib/puppet/type/zone.rb
CHANGED
@@ -343,7 +343,7 @@ end
|
|
343
343
|
|
344
344
|
validate do
|
345
345
|
return unless self[:ip]
|
346
|
-
# self[:ip] reflects the type passed from
|
346
|
+
# self[:ip] reflects the type passed from property:ip.should. If we
|
347
347
|
# override it and pass @should, then we get an array here back.
|
348
348
|
self[:ip].each do |ip|
|
349
349
|
interface, address, router = ip.split(':')
|
data/lib/puppet/util.rb
CHANGED
@@ -118,8 +118,8 @@ module Util
|
|
118
118
|
|
119
119
|
# Run some code with a specific environment. Resets the environment back to
|
120
120
|
# what it was at the end of the code.
|
121
|
-
# Windows can store
|
122
|
-
#
|
121
|
+
# Windows can store Unicode chars in the environment as keys or values, but
|
122
|
+
# Ruby's ENV tries to roundtrip them through the local codepage, which can
|
123
123
|
# cause encoding problems - underlying helpers use Windows APIs on Windows
|
124
124
|
# see https://bugs.ruby-lang.org/issues/8822
|
125
125
|
def withenv(hash, mode = :posix)
|
data/lib/puppet/util/classgen.rb
CHANGED
@@ -153,7 +153,7 @@ module Puppet::Util::ClassGen
|
|
153
153
|
# @api private
|
154
154
|
#
|
155
155
|
def handleclassconst(klass, name, options)
|
156
|
-
|
156
|
+
const = genconst_string(name, options)
|
157
157
|
|
158
158
|
if is_constant_defined?(const)
|
159
159
|
if options[:overwrite]
|
@@ -81,7 +81,11 @@ module Puppet
|
|
81
81
|
|
82
82
|
def find_subcommand
|
83
83
|
if subcommand_name.nil?
|
84
|
-
|
84
|
+
if args.include?("--help") || args.include?("-h")
|
85
|
+
ApplicationSubcommand.new("help", CommandLine.new("puppet", ["help"]))
|
86
|
+
else
|
87
|
+
NilSubcommand.new(self)
|
88
|
+
end
|
85
89
|
elsif Puppet::Application.available_application_names.include?(subcommand_name)
|
86
90
|
ApplicationSubcommand.new(subcommand_name, self)
|
87
91
|
elsif path_to_subcommand = external_subcommand
|
@@ -102,7 +106,7 @@ module Puppet
|
|
102
106
|
# For most applications, we want to be able to load code from the modulepath,
|
103
107
|
# such as apply, describe, resource, and faces.
|
104
108
|
# For agent, we only want to load pluginsync'ed code from libdir.
|
105
|
-
# For master, we shouldn't ever be loading per-
|
109
|
+
# For master, we shouldn't ever be loading per-environment code into the master's
|
106
110
|
# ruby process, but that requires fixing (#17210, #12173, #8750). So for now
|
107
111
|
# we try to restrict to only code that can be autoloaded from the node's
|
108
112
|
# environment.
|
@@ -141,7 +141,7 @@ class Parser
|
|
141
141
|
## There's one ambiguous case to be aware of: when +:multi+: is true and a
|
142
142
|
## +:default+ is set to an array (of something), it's ambiguous whether this
|
143
143
|
## is a multi-value argument as well as a multi-occurrence argument.
|
144
|
-
## In
|
144
|
+
## In this case, Trollop assumes that it's not a multi-value argument.
|
145
145
|
## If you want a multi-value, multi-occurrence argument with a default
|
146
146
|
## value, you must specify +:type+ as well.
|
147
147
|
|
@@ -11,7 +11,7 @@ module Puppet
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
# This module defines methods for execution of system commands. It is
|
14
|
+
# This module defines methods for execution of system commands. It is intended for inclusion
|
15
15
|
# in classes that needs to execute system commands.
|
16
16
|
# @api public
|
17
17
|
module Puppet::Util::Execution
|
@@ -48,7 +48,7 @@ module Puppet::Util::Execution
|
|
48
48
|
# @yield [pipe] to a block executing a subprocess
|
49
49
|
# @yieldparam pipe [IO] the opened pipe
|
50
50
|
# @yieldreturn [String] the output to return
|
51
|
-
# @raise [Puppet::ExecutionFailure] if the executed
|
51
|
+
# @raise [Puppet::ExecutionFailure] if the executed child process did not
|
52
52
|
# exit with status == 0 and `failonfail` is `true`.
|
53
53
|
# @return [String] a string with the output from the subprocess executed by
|
54
54
|
# the given block
|
@@ -30,7 +30,7 @@ module Puppet::Util::HttpProxy
|
|
30
30
|
# Other documentation suggests that just a leading '.' indicates a domain
|
31
31
|
# level exclusion, e.g.:
|
32
32
|
# .example.com
|
33
|
-
# We'll
|
33
|
+
# We'll accommodate both here.
|
34
34
|
def self.no_proxy?(dest)
|
35
35
|
unless no_proxy_env = ENV["no_proxy"] || ENV["NO_PROXY"]
|
36
36
|
return false
|
data/lib/puppet/util/inifile.rb
CHANGED
@@ -56,7 +56,7 @@ module Puppet::Util::IniConfig
|
|
56
56
|
end
|
57
57
|
|
58
58
|
# Set the entry 'key=value'. If no entry with the
|
59
|
-
# given key exists, one is appended to
|
59
|
+
# given key exists, one is appended to the end of the section
|
60
60
|
def []=(key, value)
|
61
61
|
entry = find_entry(key)
|
62
62
|
@dirty = true
|
@@ -60,7 +60,7 @@ module Puppet::Util::InstanceLoader
|
|
60
60
|
@autoloaders[type.intern]
|
61
61
|
end
|
62
62
|
|
63
|
-
# Retrieve an
|
63
|
+
# Retrieve an already-loaded instance, or attempt to load our instance.
|
64
64
|
def loaded_instance(type, name)
|
65
65
|
name = name.intern
|
66
66
|
return nil unless instances = instance_hash(type)
|
data/lib/puppet/util/logging.rb
CHANGED
@@ -55,7 +55,7 @@ module Logging
|
|
55
55
|
backtrace = []
|
56
56
|
build_exception_trace(backtrace, exception, trace)
|
57
57
|
Puppet::Util::Log.create({
|
58
|
-
:level => :err,
|
58
|
+
:level => options[:level] || :err,
|
59
59
|
:source => log_source,
|
60
60
|
:message => exception.basic_message,
|
61
61
|
:issue_code => exception.issue_code,
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# "each v === other.each v".
|
4
4
|
#
|
5
5
|
# This class is useful in situations when the Puppet Type System cannot be used
|
6
|
-
# (e.g. in Logging, since it needs to be able to log very early
|
6
|
+
# (e.g. in Logging, since it needs to be able to log very early in the initialization
|
7
7
|
# cycle of puppet)
|
8
8
|
#
|
9
9
|
# Typically used with the constants
|
data/lib/puppet/util/plist.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'cfpropertylist'
|
1
|
+
require 'cfpropertylist' if Puppet.features.cfpropertylist?
|
2
2
|
require 'puppet/util/execution'
|
3
3
|
|
4
4
|
module Puppet::Util::Plist
|
@@ -33,7 +33,7 @@ module Puppet::Util::Plist
|
|
33
33
|
# NOTE: We used IO.read originally to be Ruby 1.8.x compatible.
|
34
34
|
if read_file_with_offset(file_path, binary_plist_magic_number.length) == binary_plist_magic_number
|
35
35
|
plist_obj = new_cfpropertylist(:file => file_path)
|
36
|
-
convert_cfpropertylist_to_native_types(plist_obj)
|
36
|
+
return convert_cfpropertylist_to_native_types(plist_obj)
|
37
37
|
else
|
38
38
|
plist_data = open_file_with_args(file_path, "r:UTF-8")
|
39
39
|
plist = parse_plist(plist_data, file_path)
|
@@ -48,6 +48,7 @@ module Puppet::Util::Plist
|
|
48
48
|
Puppet.warning("Cannot read file #{file_path}; Puppet is skipping it.\n" + "Details: #{detail}")
|
49
49
|
end
|
50
50
|
end
|
51
|
+
return nil
|
51
52
|
end
|
52
53
|
|
53
54
|
# Read plist text using the CFPropertyList gem.
|
@@ -60,7 +61,8 @@ module Puppet::Util::Plist
|
|
60
61
|
|
61
62
|
begin
|
62
63
|
plist_obj = new_cfpropertylist(:data => plist_data)
|
63
|
-
|
64
|
+
# CFPropertyList library will raise NoMethodError for invalid data
|
65
|
+
rescue CFFormatError, NoMethodError => e
|
64
66
|
Puppet.debug "Failed with #{e.class} on #{file_path}: #{e.inspect}"
|
65
67
|
return nil
|
66
68
|
end
|
@@ -75,7 +77,7 @@ module Puppet::Util::Plist
|
|
75
77
|
File.open(file, args).read
|
76
78
|
end
|
77
79
|
|
78
|
-
# Helper method to assist in generating a new
|
80
|
+
# Helper method to assist in generating a new CFPropertyList Plist. It's
|
79
81
|
# its own method for stubbing purposes
|
80
82
|
#
|
81
83
|
# @api private
|
@@ -83,7 +85,7 @@ module Puppet::Util::Plist
|
|
83
85
|
CFPropertyList::List.new(plist_opts)
|
84
86
|
end
|
85
87
|
|
86
|
-
# Helper method to assist in converting a native
|
88
|
+
# Helper method to assist in converting a native CFPropertyList object to a
|
87
89
|
# native Ruby object (hash). It's its own method for stubbing purposes
|
88
90
|
#
|
89
91
|
# @api private
|
@@ -91,6 +93,14 @@ module Puppet::Util::Plist
|
|
91
93
|
CFPropertyList.native_types(plist_obj.value)
|
92
94
|
end
|
93
95
|
|
96
|
+
# Helper method to convert a string into a CFProperty::Blob, which is
|
97
|
+
# needed to properly handle binary strings
|
98
|
+
#
|
99
|
+
# @api private
|
100
|
+
def string_to_blob(str)
|
101
|
+
CFPropertyList::Blob.new(str)
|
102
|
+
end
|
103
|
+
|
94
104
|
# Helper method to assist in reading a file with an offset value. It's its
|
95
105
|
# own method for stubbing purposes
|
96
106
|
#
|
data/lib/puppet/util/profiler.rb
CHANGED
@@ -41,7 +41,7 @@ module Puppet::Util::Profiler
|
|
41
41
|
# This outputs logs entries to the Puppet masters logging destination
|
42
42
|
# providing the time it took, a message describing the profiled code
|
43
43
|
# and a leaf location marking where the profile method was called
|
44
|
-
# in the profiled
|
44
|
+
# in the profiled hierarchy.
|
45
45
|
#
|
46
46
|
# @param message [String] A description of the profiled event
|
47
47
|
# @param metric_id [Array] A list of strings making up the ID of a metric to profile
|
@@ -41,7 +41,7 @@ class Puppet::Util::Profiler::AroundProfiler
|
|
41
41
|
# This outputs logs entries to the Puppet masters logging destination
|
42
42
|
# providing the time it took, a message describing the profiled code
|
43
43
|
# and a leaf location marking where the profile method was called
|
44
|
-
# in the profiled
|
44
|
+
# in the profiled hierarchy.
|
45
45
|
#
|
46
46
|
# @param message [String] A description of the profiled event
|
47
47
|
# @param metric_id [Array] A list of strings making up the ID of a metric to profile
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# This module should be included when a class can be serialized to yaml and
|
2
|
-
# needs to handle the deserialization from Psych with more control. Psych
|
2
|
+
# needs to handle the deserialization from Psych with more control. Psych normally
|
3
3
|
# pokes values directly into an instance using `instance_variable_set` which completely
|
4
4
|
# bypasses encapsulation.
|
5
5
|
#
|
data/lib/puppet/util/rdoc.rb
CHANGED
@@ -2,7 +2,7 @@ require 'puppet/util'
|
|
2
2
|
module Puppet::Util::RDoc
|
3
3
|
module_function
|
4
4
|
|
5
|
-
# launch a rdoc
|
5
|
+
# launch a rdoc documentation process
|
6
6
|
# with the files/dir passed in +files+
|
7
7
|
def rdoc(outputdir, files, charset = nil)
|
8
8
|
|
@@ -26,7 +26,7 @@ module Puppet::Util::RDoc
|
|
26
26
|
|
27
27
|
options << "--force-update"
|
28
28
|
options += [ "--charset", charset] if charset
|
29
|
-
# Rdoc root default is Dir.pwd, but the win32-dir gem monkey
|
29
|
+
# Rdoc root default is Dir.pwd, but the win32-dir gem monkey patches Dir.pwd
|
30
30
|
# replacing Ruby's normal / with \. When RDoc generates relative paths it
|
31
31
|
# uses relative_path_from that will generate errors when the slashes don't
|
32
32
|
# properly match. This is a workaround for that issue.
|
data/lib/puppet/util/rubygems.rb
CHANGED
@@ -39,7 +39,7 @@ module Puppet::Util::RubyGems
|
|
39
39
|
# @api private
|
40
40
|
class Gems18Source < Source
|
41
41
|
def directories
|
42
|
-
# `require 'mygem'` will consider and
|
42
|
+
# `require 'mygem'` will consider and potentially load
|
43
43
|
# prerelease gems, so we need to match that behavior.
|
44
44
|
Gem::Specification.latest_specs(true).collect do |spec|
|
45
45
|
File.join(spec.full_gem_path, 'lib')
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# Monitor a given watcher for changes on a periodic interval.
|
2
2
|
class Puppet::Util::Watcher::PeriodicWatcher
|
3
3
|
# @param watcher [Puppet::Util::Watcher::ChangeWatcher] a watcher for the value to watch
|
4
|
-
# @param timer [Puppet::Util::Watcher::Timer] A timer to
|
5
|
-
# recheck the watcher. If the
|
4
|
+
# @param timer [Puppet::Util::Watcher::Timer] A timer to determine when to
|
5
|
+
# recheck the watcher. If the timeout of the timer is negative, then the
|
6
6
|
# watched value is always considered to be changed
|
7
7
|
def initialize(watcher, timer)
|
8
8
|
@watcher = watcher
|
@@ -47,7 +47,7 @@ class Puppet::Util::Windows::AccessControlEntry
|
|
47
47
|
|
48
48
|
# Returns true if this ACE applies to child directories.
|
49
49
|
#
|
50
|
-
# @return [Boolean] true if the ACE applies to child
|
50
|
+
# @return [Boolean] true if the ACE applies to child directories
|
51
51
|
def container_inherit?
|
52
52
|
(@flags & CONTAINER_INHERIT_ACE) == CONTAINER_INHERIT_ACE
|
53
53
|
end
|
@@ -57,7 +57,7 @@ module Puppet::Util::Windows::ADSI
|
|
57
57
|
end
|
58
58
|
|
59
59
|
# This method should *only* be used to generate WinNT://<SID> style monikers
|
60
|
-
# used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not
|
60
|
+
# used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not usable
|
61
61
|
# to resolve an account with WIN32OLE.connect
|
62
62
|
# Valid input is a SID::Principal, S-X-X style SID string or any valid
|
63
63
|
# account name with or without domain prefix
|
@@ -107,8 +107,19 @@ module Puppet::Util::Windows::ADSI
|
|
107
107
|
end
|
108
108
|
|
109
109
|
module Shared
|
110
|
+
def localized_domains
|
111
|
+
@localized_domains ||= [
|
112
|
+
# localized version of BUILTIN
|
113
|
+
# for instance VORDEFINIERT on German Windows
|
114
|
+
Puppet::Util::Windows::SID.sid_to_name('S-1-5-32').upcase,
|
115
|
+
# localized version of NT AUTHORITY (can't use S-1-5)
|
116
|
+
# for instance AUTORITE NT on French Windows
|
117
|
+
Puppet::Util::Windows::SID.name_to_sid_object('SYSTEM').domain.upcase
|
118
|
+
]
|
119
|
+
end
|
120
|
+
|
110
121
|
def uri(name, host = '.')
|
111
|
-
host = '.' if
|
122
|
+
host = '.' if (localized_domains << Socket.gethostname.upcase).include?(host.upcase)
|
112
123
|
|
113
124
|
# group or user
|
114
125
|
account_type = self.name.split('::').last.downcase
|
@@ -184,7 +195,10 @@ module Puppet::Util::Windows::ADSI
|
|
184
195
|
end
|
185
196
|
|
186
197
|
def [](attribute)
|
187
|
-
native_user.Get(attribute)
|
198
|
+
value = native_user.Get(attribute)
|
199
|
+
# Rubys WIN32OLE errantly converts UTF-16 values to Encoding.default_external
|
200
|
+
return value.encode(Encoding::UTF_8) if value.is_a?(String)
|
201
|
+
value
|
188
202
|
end
|
189
203
|
|
190
204
|
def []=(attribute, value)
|
@@ -234,7 +248,8 @@ module Puppet::Util::Windows::ADSI
|
|
234
248
|
# https://msdn.microsoft.com/en-us/library/aa746342.aspx
|
235
249
|
# WIN32OLE objects aren't enumerable, so no map
|
236
250
|
groups = []
|
237
|
-
|
251
|
+
# Rubys WIN32OLE errantly converts UTF-16 values to Encoding.default_external
|
252
|
+
native_user.Groups.each {|g| groups << g.Name.encode(Encoding::UTF_8)} rescue nil
|
238
253
|
groups
|
239
254
|
end
|
240
255
|
|
@@ -320,6 +335,10 @@ module Puppet::Util::Windows::ADSI
|
|
320
335
|
user_name
|
321
336
|
end
|
322
337
|
|
338
|
+
def self.current_user_sid
|
339
|
+
Puppet::Util::Windows::SID.name_to_sid_object(current_user_name)
|
340
|
+
end
|
341
|
+
|
323
342
|
def self.exists?(name_or_sid)
|
324
343
|
well_known = false
|
325
344
|
if (sid = Puppet::Util::Windows::SID.name_to_sid_object(name_or_sid))
|
@@ -353,7 +372,8 @@ module Puppet::Util::Windows::ADSI
|
|
353
372
|
|
354
373
|
users = []
|
355
374
|
wql.each do |u|
|
356
|
-
|
375
|
+
# Rubys WIN32OLE errantly converts UTF-16 values to Encoding.default_external
|
376
|
+
users << new(u.name.encode(Encoding::UTF_8))
|
357
377
|
end
|
358
378
|
|
359
379
|
users.each(&block)
|
@@ -377,7 +397,7 @@ module Puppet::Util::Windows::ADSI
|
|
377
397
|
Puppet::Util::Windows::ADSI.wmi_connection.Delete("Win32_UserProfile.SID='#{sid}'")
|
378
398
|
rescue WIN32OLERuntimeError => e
|
379
399
|
# https://social.technet.microsoft.com/Forums/en/ITCG/thread/0f190051-ac96-4bf1-a47f-6b864bfacee5
|
380
|
-
# Prior to Vista SP1, there's no
|
400
|
+
# Prior to Vista SP1, there's no built-in way to programmatically
|
381
401
|
# delete user profiles (except for delprof.exe). So try to delete
|
382
402
|
# but warn if we fail
|
383
403
|
raise e unless e.message.include?('80041010')
|
@@ -445,7 +465,8 @@ module Puppet::Util::Windows::ADSI
|
|
445
465
|
def members
|
446
466
|
# WIN32OLE objects aren't enumerable, so no map
|
447
467
|
members = []
|
448
|
-
|
468
|
+
# Rubys WIN32OLE errantly converts UTF-16 values to Encoding.default_external
|
469
|
+
native_group.Members.each {|m| members << m.Name.encode(Encoding::UTF_8)}
|
449
470
|
members
|
450
471
|
end
|
451
472
|
|
@@ -514,7 +535,8 @@ module Puppet::Util::Windows::ADSI
|
|
514
535
|
|
515
536
|
groups = []
|
516
537
|
wql.each do |g|
|
517
|
-
|
538
|
+
# Rubys WIN32OLE errantly converts UTF-16 values to Encoding.default_external
|
539
|
+
groups << new(g.name.encode(Encoding::UTF_8))
|
518
540
|
end
|
519
541
|
|
520
542
|
groups.each(&block)
|
@@ -59,7 +59,7 @@ module Puppet::Util::Windows::APITypes
|
|
59
59
|
str.encode(dst_encoding)
|
60
60
|
end
|
61
61
|
|
62
|
-
# @param max_char_length [Integer] Maximum number of wide chars
|
62
|
+
# @param max_char_length [Integer] Maximum number of wide chars to return (typically excluding NULLs), *not* bytes
|
63
63
|
# @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
|
64
64
|
# null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
|
65
65
|
# null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
|
@@ -257,6 +257,45 @@ module Puppet::Util::Windows::File
|
|
257
257
|
end
|
258
258
|
module_function :readlink
|
259
259
|
|
260
|
+
ERROR_FILE_NOT_FOUND = 2
|
261
|
+
ERROR_PATH_NOT_FOUND = 3
|
262
|
+
|
263
|
+
def get_long_pathname(path)
|
264
|
+
converted = ''
|
265
|
+
FFI::Pointer.from_string_to_wide_string(path) do |path_ptr|
|
266
|
+
# includes terminating NULL
|
267
|
+
buffer_size = GetLongPathNameW(path_ptr, FFI::Pointer::NULL, 0)
|
268
|
+
FFI::MemoryPointer.new(:wchar, buffer_size) do |converted_ptr|
|
269
|
+
if GetLongPathNameW(path_ptr, converted_ptr, buffer_size) == FFI::WIN32_FALSE
|
270
|
+
raise Puppet::Util::Windows::Error.new("Failed to call GetLongPathName")
|
271
|
+
end
|
272
|
+
|
273
|
+
converted = converted_ptr.read_wide_string(buffer_size - 1)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
converted
|
278
|
+
end
|
279
|
+
module_function :get_long_pathname
|
280
|
+
|
281
|
+
def get_short_pathname(path)
|
282
|
+
converted = ''
|
283
|
+
FFI::Pointer.from_string_to_wide_string(path) do |path_ptr|
|
284
|
+
# includes terminating NULL
|
285
|
+
buffer_size = GetShortPathNameW(path_ptr, FFI::Pointer::NULL, 0)
|
286
|
+
FFI::MemoryPointer.new(:wchar, buffer_size) do |converted_ptr|
|
287
|
+
if GetShortPathNameW(path_ptr, converted_ptr, buffer_size) == FFI::WIN32_FALSE
|
288
|
+
raise Puppet::Util::Windows::Error.new("Failed to call GetShortPathName")
|
289
|
+
end
|
290
|
+
|
291
|
+
converted = converted_ptr.read_wide_string(buffer_size - 1)
|
292
|
+
end
|
293
|
+
end
|
294
|
+
|
295
|
+
converted
|
296
|
+
end
|
297
|
+
module_function :get_short_pathname
|
298
|
+
|
260
299
|
def stat(file_name)
|
261
300
|
file_name = file_name.to_s # accommodate PathName or String
|
262
301
|
stat = File.stat(file_name)
|
@@ -422,4 +461,24 @@ module Puppet::Util::Windows::File
|
|
422
461
|
# technically a WCHAR buffer, but we care about size in bytes here
|
423
462
|
:PathBuffer, [:byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE - 20]
|
424
463
|
end
|
464
|
+
|
465
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa364980(v=vs.85).aspx
|
466
|
+
# DWORD WINAPI GetLongPathName(
|
467
|
+
# _In_ LPCTSTR lpszShortPath,
|
468
|
+
# _Out_ LPTSTR lpszLongPath,
|
469
|
+
# _In_ DWORD cchBuffer
|
470
|
+
# );
|
471
|
+
ffi_lib :kernel32
|
472
|
+
attach_function_private :GetLongPathNameW,
|
473
|
+
[:lpcwstr, :lpwstr, :dword], :dword
|
474
|
+
|
475
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa364989(v=vs.85).aspx
|
476
|
+
# DWORD WINAPI GetShortPathName(
|
477
|
+
# _In_ LPCTSTR lpszLongPath,
|
478
|
+
# _Out_ LPTSTR lpszShortPath,
|
479
|
+
# _In_ DWORD cchBuffer
|
480
|
+
# );
|
481
|
+
ffi_lib :kernel32
|
482
|
+
attach_function_private :GetShortPathNameW,
|
483
|
+
[:lpcwstr, :lpwstr, :dword], :dword
|
425
484
|
end
|