puppet 8.5.0-universal-darwin → 8.6.0-universal-darwin
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 +4 -4
- data/Gemfile.lock +29 -26
- data/ext/windows/service/daemon.rb +49 -55
- data/lib/hiera/scope.rb +3 -3
- data/lib/hiera_puppet.rb +1 -1
- data/lib/puppet/agent/disabler.rb +1 -1
- data/lib/puppet/application/agent.rb +2 -2
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +6 -6
- data/lib/puppet/application/device.rb +99 -100
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/face_base.rb +7 -7
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/lookup.rb +5 -5
- data/lib/puppet/application/resource.rb +10 -3
- data/lib/puppet/application/ssl.rb +3 -3
- data/lib/puppet/application.rb +16 -18
- data/lib/puppet/coercion.rb +1 -1
- data/lib/puppet/configurer/downloader.rb +9 -4
- data/lib/puppet/configurer/fact_handler.rb +12 -13
- data/lib/puppet/configurer.rb +16 -18
- data/lib/puppet/confine/feature.rb +1 -1
- data/lib/puppet/confine/variable.rb +1 -1
- data/lib/puppet/confine.rb +2 -2
- data/lib/puppet/confine_collection.rb +1 -1
- data/lib/puppet/confiner.rb +2 -2
- data/lib/puppet/daemon.rb +3 -3
- data/lib/puppet/datatypes.rb +5 -6
- data/lib/puppet/defaults.rb +14 -8
- data/lib/puppet/environments.rb +3 -7
- data/lib/puppet/error.rb +3 -3
- data/lib/puppet/external/dot.rb +42 -34
- data/lib/puppet/face/catalog/select.rb +1 -1
- data/lib/puppet/face/epp.rb +7 -9
- data/lib/puppet/face/help.rb +12 -12
- data/lib/puppet/face/module/changes.rb +1 -3
- data/lib/puppet/face/module/list.rb +37 -37
- data/lib/puppet/face/node/clean.rb +1 -1
- data/lib/puppet/face/parser.rb +6 -8
- data/lib/puppet/face/report.rb +5 -7
- data/lib/puppet/facter_impl.rb +1 -1
- data/lib/puppet/feature/base.rb +9 -11
- data/lib/puppet/feature/pe_license.rb +1 -1
- data/lib/puppet/feature/ssh.rb +1 -1
- data/lib/puppet/feature/telnet.rb +3 -5
- data/lib/puppet/feature/zlib.rb +1 -1
- data/lib/puppet/ffi/windows/constants.rb +1 -1
- data/lib/puppet/ffi/windows/functions.rb +2 -2
- data/lib/puppet/ffi/windows/structs.rb +3 -3
- data/lib/puppet/file_bucket/dipper.rb +4 -4
- data/lib/puppet/file_bucket/file.rb +4 -4
- data/lib/puppet/file_serving/base.rb +5 -5
- data/lib/puppet/file_serving/configuration/parser.rb +9 -9
- data/lib/puppet/file_serving/configuration.rb +3 -3
- data/lib/puppet/file_serving/fileset.rb +13 -13
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_serving/metadata.rb +13 -9
- data/lib/puppet/file_serving/mount/file.rb +6 -6
- data/lib/puppet/file_serving/mount/locales.rb +2 -4
- data/lib/puppet/file_serving/mount/pluginfacts.rb +2 -4
- data/lib/puppet/file_serving/mount/plugins.rb +2 -4
- data/lib/puppet/file_serving/mount.rb +1 -1
- data/lib/puppet/file_system/file_impl.rb +3 -3
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/path_pattern.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +17 -16
- data/lib/puppet/file_system/windows.rb +26 -18
- data/lib/puppet/forge/cache.rb +2 -2
- data/lib/puppet/forge/errors.rb +1 -1
- data/lib/puppet/forge/repository.rb +2 -2
- data/lib/puppet/forge.rb +13 -19
- data/lib/puppet/functions/abs.rb +2 -2
- data/lib/puppet/functions/camelcase.rb +1 -1
- data/lib/puppet/functions/compare.rb +2 -2
- data/lib/puppet/functions/contain.rb +1 -1
- data/lib/puppet/functions/defined.rb +2 -2
- data/lib/puppet/functions/dig.rb +1 -1
- data/lib/puppet/functions/eyaml_lookup_key.rb +11 -13
- data/lib/puppet/functions/get.rb +1 -1
- data/lib/puppet/functions/hocon_data.rb +3 -5
- data/lib/puppet/functions/import.rb +1 -1
- data/lib/puppet/functions/json_data.rb +4 -6
- data/lib/puppet/functions/max.rb +2 -2
- data/lib/puppet/functions/min.rb +2 -2
- data/lib/puppet/functions/new.rb +1 -1
- data/lib/puppet/functions/reduce.rb +6 -10
- data/lib/puppet/functions/regsubst.rb +2 -2
- data/lib/puppet/functions/require.rb +1 -1
- data/lib/puppet/functions/yaml_data.rb +11 -13
- data/lib/puppet/functions.rb +32 -37
- data/lib/puppet/generate/type.rb +2 -2
- data/lib/puppet/gettext/config.rb +9 -9
- data/lib/puppet/graph/rb_tree_map.rb +31 -23
- data/lib/puppet/graph/relationship_graph.rb +12 -12
- data/lib/puppet/graph/simple_graph.rb +8 -10
- data/lib/puppet/http/client.rb +1 -1
- data/lib/puppet/http/dns.rb +4 -4
- data/lib/puppet/http/external_client.rb +1 -1
- data/lib/puppet/http/factory.rb +1 -1
- data/lib/puppet/http/proxy.rb +15 -15
- data/lib/puppet/http/redirector.rb +6 -2
- data/lib/puppet/http/resolver.rb +2 -2
- data/lib/puppet/http/retry_after_handler.rb +2 -2
- data/lib/puppet/http/service/ca.rb +1 -1
- data/lib/puppet/http/service/compiler.rb +4 -4
- data/lib/puppet/http/service/file_server.rb +1 -1
- data/lib/puppet/http/service/report.rb +2 -2
- data/lib/puppet/http/service.rb +9 -13
- data/lib/puppet/http/session.rb +1 -1
- data/lib/puppet/http/site.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +44 -45
- data/lib/puppet/indirector/catalog/rest.rb +7 -5
- data/lib/puppet/indirector/catalog/store_configs.rb +1 -1
- data/lib/puppet/indirector/exec.rb +2 -2
- data/lib/puppet/indirector/face.rb +7 -9
- data/lib/puppet/indirector/fact_search.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +6 -6
- data/lib/puppet/indirector/facts/json.rb +1 -1
- data/lib/puppet/indirector/facts/store_configs.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +17 -17
- data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -3
- data/lib/puppet/indirector/file_content/rest.rb +1 -1
- data/lib/puppet/indirector/file_metadata/rest.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +1 -1
- data/lib/puppet/indirector/indirection.rb +27 -29
- data/lib/puppet/indirector/json.rb +4 -4
- data/lib/puppet/indirector/memory.rb +2 -2
- data/lib/puppet/indirector/msgpack.rb +5 -5
- data/lib/puppet/indirector/node/store_configs.rb +1 -1
- data/lib/puppet/indirector/none.rb +1 -1
- data/lib/puppet/indirector/report/json.rb +1 -1
- data/lib/puppet/indirector/report/yaml.rb +1 -1
- data/lib/puppet/indirector/request.rb +4 -4
- data/lib/puppet/indirector/resource/ral.rb +2 -4
- data/lib/puppet/indirector/resource/store_configs.rb +1 -1
- data/lib/puppet/indirector/terminus.rb +4 -4
- data/lib/puppet/indirector/yaml.rb +3 -3
- data/lib/puppet/info_service/class_information_service.rb +5 -8
- data/lib/puppet/info_service/task_information_service.rb +6 -7
- data/lib/puppet/interface/action.rb +5 -5
- data/lib/puppet/interface/action_manager.rb +5 -5
- data/lib/puppet/interface/documentation.rb +5 -5
- data/lib/puppet/interface/face_collection.rb +7 -7
- data/lib/puppet/interface/option.rb +2 -2
- data/lib/puppet/interface/option_manager.rb +6 -6
- data/lib/puppet/interface.rb +4 -4
- data/lib/puppet/metatype/manager.rb +2 -2
- data/lib/puppet/module/plan.rb +10 -10
- data/lib/puppet/module/task.rb +8 -8
- data/lib/puppet/module.rb +39 -41
- data/lib/puppet/module_tool/applications/application.rb +10 -8
- data/lib/puppet/module_tool/applications/installer.rb +53 -50
- data/lib/puppet/module_tool/applications/unpacker.rb +6 -8
- data/lib/puppet/module_tool/applications/upgrader.rb +37 -34
- data/lib/puppet/module_tool/checksums.rb +2 -2
- data/lib/puppet/module_tool/dependency.rb +1 -1
- data/lib/puppet/module_tool/errors/base.rb +1 -1
- data/lib/puppet/module_tool/install_directory.rb +1 -1
- data/lib/puppet/module_tool/local_tarball.rb +3 -5
- data/lib/puppet/module_tool/metadata.rb +12 -8
- data/lib/puppet/module_tool/shared_behaviors.rb +27 -12
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/module_tool.rb +4 -4
- data/lib/puppet/network/client_request.rb +5 -3
- data/lib/puppet/network/format.rb +2 -2
- data/lib/puppet/network/format_support.rb +1 -1
- data/lib/puppet/network/formats.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +24 -44
- data/lib/puppet/network/http/api/server/v3.rb +1 -1
- data/lib/puppet/network/http/connection.rb +1 -1
- data/lib/puppet/network/http/handler.rb +8 -12
- data/lib/puppet/network/http/request.rb +1 -1
- data/lib/puppet/network/http/route.rb +9 -9
- data/lib/puppet/node/environment.rb +21 -23
- data/lib/puppet/node/facts.rb +1 -1
- data/lib/puppet/node.rb +5 -5
- data/lib/puppet/pal/json_catalog_encoder.rb +1 -1
- data/lib/puppet/pal/pal_impl.rb +48 -50
- data/lib/puppet/pal/plan_signature.rb +1 -1
- data/lib/puppet/pal/task_signature.rb +1 -1
- data/lib/puppet/parameter/package_options.rb +1 -1
- data/lib/puppet/parameter/value.rb +2 -2
- data/lib/puppet/parameter/value_collection.rb +7 -7
- data/lib/puppet/parameter.rb +8 -9
- data/lib/puppet/parser/ast/block_expression.rb +2 -2
- data/lib/puppet/parser/ast/hostclass.rb +1 -1
- data/lib/puppet/parser/ast/pops_bridge.rb +3 -4
- data/lib/puppet/parser/ast/resource.rb +4 -4
- data/lib/puppet/parser/ast/resourceparam.rb +4 -4
- data/lib/puppet/parser/ast.rb +14 -15
- data/lib/puppet/parser/compiler.rb +26 -28
- data/lib/puppet/parser/functions/create_resources.rb +3 -3
- data/lib/puppet/parser/functions/fail.rb +1 -1
- data/lib/puppet/parser/functions/generate.rb +2 -2
- data/lib/puppet/parser/functions/tag.rb +1 -1
- data/lib/puppet/parser/functions.rb +2 -2
- data/lib/puppet/parser/relationship.rb +3 -1
- data/lib/puppet/parser/resource/param.rb +2 -2
- data/lib/puppet/parser/resource.rb +23 -23
- data/lib/puppet/parser/scope.rb +10 -10
- data/lib/puppet/parser/script_compiler.rb +1 -1
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/parser/type_loader.rb +10 -12
- data/lib/puppet/parser.rb +1 -1
- data/lib/puppet/pops/adaptable.rb +1 -1
- data/lib/puppet/pops/evaluator/access_operator.rb +8 -8
- data/lib/puppet/pops/evaluator/callable_signature.rb +4 -4
- data/lib/puppet/pops/evaluator/collector_transformer.rb +4 -4
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +7 -7
- data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +6 -6
- data/lib/puppet/pops/evaluator/compare_operator.rb +10 -10
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +1 -1
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +2 -2
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +56 -60
- data/lib/puppet/pops/evaluator/literal_evaluator.rb +4 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +2 -2
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +3 -3
- data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
- data/lib/puppet/pops/functions/dispatcher.rb +3 -3
- data/lib/puppet/pops/functions/function.rb +14 -16
- data/lib/puppet/pops/issue_reporter.rb +2 -2
- data/lib/puppet/pops/label_provider.rb +2 -2
- data/lib/puppet/pops/loader/dependency_loader.rb +3 -3
- data/lib/puppet/pops/loader/loader.rb +4 -4
- data/lib/puppet/pops/loader/loader_paths.rb +3 -3
- data/lib/puppet/pops/loader/module_loaders.rb +11 -11
- data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +1 -1
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
- data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +5 -1
- data/lib/puppet/pops/loader/static_loader.rb +3 -3
- data/lib/puppet/pops/loaders.rb +3 -3
- data/lib/puppet/pops/lookup/data_dig_function_provider.rb +1 -1
- data/lib/puppet/pops/lookup/explainer.rb +2 -2
- data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +15 -11
- data/lib/puppet/pops/lookup/interpolation.rb +3 -3
- data/lib/puppet/pops/lookup/key_recorder.rb +1 -1
- data/lib/puppet/pops/lookup/location_resolver.rb +1 -1
- data/lib/puppet/pops/lookup/lookup_adapter.rb +7 -7
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/merge_strategy.rb +6 -6
- data/lib/puppet/pops/migration/migration_checker.rb +1 -1
- data/lib/puppet/pops/model/ast_transformer.rb +9 -11
- data/lib/puppet/pops/model/factory.rb +4 -5
- data/lib/puppet/pops/parser/epp_parser.rb +2 -2
- data/lib/puppet/pops/parser/epp_support.rb +1 -1
- data/lib/puppet/pops/parser/evaluating_parser.rb +2 -2
- data/lib/puppet/pops/parser/heredoc_support.rb +4 -4
- data/lib/puppet/pops/parser/interpolation_support.rb +3 -3
- data/lib/puppet/pops/parser/lexer2.rb +20 -12
- data/lib/puppet/pops/parser/lexer_support.rb +1 -1
- data/lib/puppet/pops/parser/locator.rb +4 -4
- data/lib/puppet/pops/parser/parser_support.rb +12 -14
- data/lib/puppet/pops/parser/pn_parser.rb +3 -3
- data/lib/puppet/pops/parser/slurp_support.rb +8 -8
- data/lib/puppet/pops/patterns.rb +12 -12
- data/lib/puppet/pops/pcore.rb +1 -1
- data/lib/puppet/pops/pn.rb +2 -2
- data/lib/puppet/pops/puppet_stack.rb +1 -1
- data/lib/puppet/pops/resource/resource_type_impl.rb +1 -1
- data/lib/puppet/pops/serialization/abstract_reader.rb +2 -2
- data/lib/puppet/pops/serialization/abstract_writer.rb +3 -3
- data/lib/puppet/pops/time/timestamp.rb +1 -1
- data/lib/puppet/pops/types/class_loader.rb +4 -6
- data/lib/puppet/pops/types/iterable.rb +1 -1
- data/lib/puppet/pops/types/p_binary_type.rb +1 -1
- data/lib/puppet/pops/types/p_init_type.rb +1 -1
- data/lib/puppet/pops/types/p_object_type.rb +5 -5
- data/lib/puppet/pops/types/p_object_type_extension.rb +4 -6
- data/lib/puppet/pops/types/p_sem_ver_range_type.rb +1 -1
- data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/p_timespan_type.rb +2 -2
- data/lib/puppet/pops/types/p_type_set_type.rb +10 -10
- data/lib/puppet/pops/types/p_uri_type.rb +4 -4
- data/lib/puppet/pops/types/recursion_guard.rb +4 -4
- data/lib/puppet/pops/types/ruby_generator.rb +2 -2
- data/lib/puppet/pops/types/string_converter.rb +12 -8
- data/lib/puppet/pops/types/tree_iterators.rb +4 -6
- data/lib/puppet/pops/types/type_calculator.rb +10 -10
- data/lib/puppet/pops/types/type_factory.rb +7 -3
- data/lib/puppet/pops/types/type_formatter.rb +22 -24
- data/lib/puppet/pops/types/type_mismatch_describer.rb +24 -24
- data/lib/puppet/pops/types/types.rb +28 -24
- data/lib/puppet/pops/utils.rb +38 -42
- data/lib/puppet/pops/validation/checker4_0.rb +10 -10
- data/lib/puppet/pops/validation/tasks_checker.rb +1 -1
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +2 -0
- data/lib/puppet/pops/validation.rb +4 -4
- data/lib/puppet/pops/visitor.rb +2 -2
- data/lib/puppet/property/ensure.rb +12 -14
- data/lib/puppet/property/keyvalue.rb +4 -4
- data/lib/puppet/property/list.rb +4 -4
- data/lib/puppet/property/ordered_list.rb +1 -1
- data/lib/puppet/property.rb +31 -33
- data/lib/puppet/provider/exec.rb +2 -2
- data/lib/puppet/provider/file/posix.rb +19 -17
- data/lib/puppet/provider/file/windows.rb +13 -19
- data/lib/puppet/provider/group/directoryservice.rb +3 -2
- data/lib/puppet/provider/group/groupadd.rb +4 -4
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/nameservice/directoryservice.rb +29 -29
- data/lib/puppet/provider/nameservice/objectadd.rb +2 -4
- data/lib/puppet/provider/nameservice/pw.rb +1 -2
- data/lib/puppet/provider/nameservice.rb +8 -8
- data/lib/puppet/provider/package/aix.rb +19 -19
- data/lib/puppet/provider/package/appdmg.rb +2 -2
- data/lib/puppet/provider/package/apple.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +18 -18
- data/lib/puppet/provider/package/aptitude.rb +1 -3
- data/lib/puppet/provider/package/aptrpm.rb +9 -9
- data/lib/puppet/provider/package/blastwave.rb +10 -14
- data/lib/puppet/provider/package/dnfmodule.rb +3 -3
- data/lib/puppet/provider/package/dpkg.rb +11 -13
- data/lib/puppet/provider/package/fink.rb +14 -14
- data/lib/puppet/provider/package/freebsd.rb +1 -1
- data/lib/puppet/provider/package/gem.rb +12 -14
- data/lib/puppet/provider/package/macports.rb +2 -2
- data/lib/puppet/provider/package/nim.rb +10 -10
- data/lib/puppet/provider/package/openbsd.rb +22 -22
- data/lib/puppet/provider/package/opkg.rb +6 -6
- data/lib/puppet/provider/package/pacman.rb +35 -29
- data/lib/puppet/provider/package/pip.rb +25 -24
- data/lib/puppet/provider/package/pkg.rb +15 -15
- data/lib/puppet/provider/package/pkgdmg.rb +10 -10
- data/lib/puppet/provider/package/pkgin.rb +2 -2
- data/lib/puppet/provider/package/pkgng.rb +5 -5
- data/lib/puppet/provider/package/pkgutil.rb +17 -21
- data/lib/puppet/provider/package/portage.rb +59 -61
- data/lib/puppet/provider/package/ports.rb +12 -11
- data/lib/puppet/provider/package/portupgrade.rb +35 -35
- data/lib/puppet/provider/package/puppetserver_gem.rb +10 -9
- data/lib/puppet/provider/package/rpm.rb +26 -26
- data/lib/puppet/provider/package/rug.rb +7 -9
- data/lib/puppet/provider/package/sun.rb +4 -4
- data/lib/puppet/provider/package/up2date.rb +5 -7
- data/lib/puppet/provider/package/urpmi.rb +6 -6
- data/lib/puppet/provider/package/windows/exe_package.rb +7 -7
- data/lib/puppet/provider/package/windows/msi_package.rb +3 -3
- data/lib/puppet/provider/package/windows/package.rb +2 -2
- data/lib/puppet/provider/package/windows.rb +3 -5
- data/lib/puppet/provider/package/yum.rb +33 -37
- data/lib/puppet/provider/package/zypper.rb +12 -14
- data/lib/puppet/provider/package.rb +1 -1
- data/lib/puppet/provider/package_targetable.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +9 -9
- data/lib/puppet/provider/service/base.rb +16 -21
- data/lib/puppet/provider/service/bsd.rb +4 -4
- data/lib/puppet/provider/service/daemontools.rb +31 -31
- data/lib/puppet/provider/service/debian.rb +6 -6
- data/lib/puppet/provider/service/freebsd.rb +36 -36
- data/lib/puppet/provider/service/gentoo.rb +6 -6
- data/lib/puppet/provider/service/init.rb +19 -19
- data/lib/puppet/provider/service/launchd.rb +22 -22
- data/lib/puppet/provider/service/openbsd.rb +10 -10
- data/lib/puppet/provider/service/openrc.rb +1 -1
- data/lib/puppet/provider/service/openwrt.rb +3 -3
- data/lib/puppet/provider/service/rcng.rb +3 -3
- data/lib/puppet/provider/service/redhat.rb +4 -4
- data/lib/puppet/provider/service/runit.rb +6 -6
- data/lib/puppet/provider/service/service.rb +5 -7
- data/lib/puppet/provider/service/smf.rb +28 -27
- data/lib/puppet/provider/service/src.rb +7 -7
- data/lib/puppet/provider/service/systemd.rb +31 -37
- data/lib/puppet/provider/service/upstart.rb +17 -17
- data/lib/puppet/provider/service/windows.rb +7 -7
- data/lib/puppet/provider/user/aix.rb +4 -2
- data/lib/puppet/provider/user/directoryservice.rb +34 -36
- data/lib/puppet/provider/user/hpux.rb +10 -14
- data/lib/puppet/provider/user/pw.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +16 -18
- data/lib/puppet/provider/user/useradd.rb +7 -7
- data/lib/puppet/provider/user/windows_adsi.rb +1 -1
- data/lib/puppet/provider.rb +8 -8
- data/lib/puppet/reference/indirection.rb +3 -0
- data/lib/puppet/reference/metaparameter.rb +1 -1
- data/lib/puppet/reference/providers.rb +3 -3
- data/lib/puppet/reference/type.rb +1 -1
- data/lib/puppet/relationship.rb +4 -5
- data/lib/puppet/reports/http.rb +1 -1
- data/lib/puppet/reports/log.rb +2 -2
- data/lib/puppet/reports/store.rb +4 -4
- data/lib/puppet/reports.rb +2 -2
- data/lib/puppet/resource/catalog.rb +16 -16
- data/lib/puppet/resource/status.rb +3 -3
- data/lib/puppet/resource/type.rb +8 -8
- data/lib/puppet/resource/type_collection.rb +1 -1
- data/lib/puppet/resource.rb +41 -41
- data/lib/puppet/scheduler/scheduler.rb +1 -1
- data/lib/puppet/settings/alias_setting.rb +3 -5
- data/lib/puppet/settings/base_setting.rb +11 -11
- data/lib/puppet/settings/boolean_setting.rb +2 -2
- data/lib/puppet/settings/config_file.rb +5 -4
- data/lib/puppet/settings/duration_setting.rb +2 -2
- data/lib/puppet/settings/environment_conf.rb +3 -3
- data/lib/puppet/settings/file_or_directory_setting.rb +2 -2
- data/lib/puppet/settings/file_setting.rb +11 -11
- data/lib/puppet/settings/ini_file.rb +3 -3
- data/lib/puppet/settings/port_setting.rb +1 -1
- data/lib/puppet/settings/priority_setting.rb +2 -2
- data/lib/puppet/settings/ttl_setting.rb +2 -2
- data/lib/puppet/settings/value_translator.rb +8 -8
- data/lib/puppet/settings.rb +65 -70
- data/lib/puppet/ssl/base.rb +2 -4
- data/lib/puppet/ssl/certificate_request.rb +18 -22
- data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
- data/lib/puppet/ssl/oids.rb +2 -2
- data/lib/puppet/ssl/openssl_loader.rb +4 -4
- data/lib/puppet/syntax_checkers/base64.rb +3 -3
- data/lib/puppet/syntax_checkers/epp.rb +3 -3
- data/lib/puppet/syntax_checkers/json.rb +3 -3
- data/lib/puppet/syntax_checkers/pp.rb +3 -3
- data/lib/puppet/transaction/additional_resource_generator.rb +1 -1
- data/lib/puppet/transaction/event.rb +2 -2
- data/lib/puppet/transaction/event_manager.rb +5 -5
- data/lib/puppet/transaction/persistence.rb +12 -14
- data/lib/puppet/transaction/report.rb +4 -4
- data/lib/puppet/transaction/resource_harness.rb +2 -2
- data/lib/puppet/transaction.rb +14 -18
- data/lib/puppet/type/component.rb +3 -3
- data/lib/puppet/type/exec.rb +43 -45
- data/lib/puppet/type/file/checksum_value.rb +1 -1
- data/lib/puppet/type/file/content.rb +6 -6
- data/lib/puppet/type/file/ctime.rb +2 -2
- data/lib/puppet/type/file/data_sync.rb +3 -3
- data/lib/puppet/type/file/ensure.rb +16 -15
- data/lib/puppet/type/file/mode.rb +9 -9
- data/lib/puppet/type/file/mtime.rb +2 -2
- data/lib/puppet/type/file/selcontext.rb +14 -14
- data/lib/puppet/type/file/source.rb +19 -21
- data/lib/puppet/type/file/target.rb +11 -11
- data/lib/puppet/type/file.rb +21 -21
- data/lib/puppet/type/filebucket.rb +3 -3
- data/lib/puppet/type/group.rb +3 -3
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/package.rb +4 -4
- data/lib/puppet/type/resources.rb +6 -6
- data/lib/puppet/type/schedule.rb +9 -9
- data/lib/puppet/type/service.rb +6 -8
- data/lib/puppet/type/tidy.rb +22 -24
- data/lib/puppet/type/user.rb +13 -13
- data/lib/puppet/type.rb +76 -88
- data/lib/puppet/util/at_fork/solaris.rb +33 -37
- data/lib/puppet/util/autoload.rb +2 -2
- data/lib/puppet/util/backups.rb +9 -9
- data/lib/puppet/util/character_encoding.rb +7 -6
- data/lib/puppet/util/checksums.rb +2 -2
- data/lib/puppet/util/classgen.rb +8 -8
- data/lib/puppet/util/colors.rb +1 -1
- data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -1
- data/lib/puppet/util/command_line/trollop.rb +42 -46
- data/lib/puppet/util/command_line.rb +2 -2
- data/lib/puppet/util/constant_inflector.rb +2 -2
- data/lib/puppet/util/diff.rb +19 -21
- data/lib/puppet/util/docs.rb +2 -2
- data/lib/puppet/util/errors.rb +9 -9
- data/lib/puppet/util/execution.rb +32 -9
- data/lib/puppet/util/feature.rb +1 -1
- data/lib/puppet/util/fileparsing.rb +12 -16
- data/lib/puppet/util/filetype.rb +36 -40
- data/lib/puppet/util/inifile.rb +6 -12
- data/lib/puppet/util/ldap/connection.rb +1 -1
- data/lib/puppet/util/ldap/manager.rb +10 -12
- data/lib/puppet/util/lockfile.rb +6 -8
- data/lib/puppet/util/log/destination.rb +2 -2
- data/lib/puppet/util/log/destinations.rb +4 -4
- data/lib/puppet/util/log.rb +12 -9
- data/lib/puppet/util/logging.rb +11 -11
- data/lib/puppet/util/metric.rb +3 -3
- data/lib/puppet/util/monkey_patches.rb +5 -7
- data/lib/puppet/util/network_device/config.rb +3 -3
- data/lib/puppet/util/package/version/debian.rb +27 -28
- data/lib/puppet/util/package/version/pip.rb +5 -5
- data/lib/puppet/util/package/version/range/eq.rb +1 -1
- data/lib/puppet/util/package/version/rpm.rb +1 -1
- data/lib/puppet/util/package.rb +2 -2
- data/lib/puppet/util/pidlock.rb +2 -2
- data/lib/puppet/util/platform.rb +1 -1
- data/lib/puppet/util/plist.rb +8 -10
- data/lib/puppet/util/posix.rb +17 -17
- data/lib/puppet/util/profiler/aggregate.rb +1 -1
- data/lib/puppet/util/provider_features.rb +3 -3
- data/lib/puppet/util/rdoc/code_objects.rb +3 -3
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +63 -64
- data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +23 -23
- data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +12 -12
- data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -1
- data/lib/puppet/util/rdoc/parser.rb +1 -1
- data/lib/puppet/util/reference.rb +13 -9
- data/lib/puppet/util/retry_action.rb +1 -1
- data/lib/puppet/util/rpm_compare.rb +17 -18
- data/lib/puppet/util/rubygems.rb +1 -1
- data/lib/puppet/util/selinux.rb +7 -7
- data/lib/puppet/util/storage.rb +10 -12
- data/lib/puppet/util/suidmanager.rb +18 -19
- data/lib/puppet/util/symbolic_file_mode.rb +71 -75
- data/lib/puppet/util/tag_set.rb +2 -2
- data/lib/puppet/util/tagging.rb +8 -10
- data/lib/puppet/util/terminal.rb +4 -4
- data/lib/puppet/util/user_attr.rb +7 -7
- data/lib/puppet/util/watcher.rb +3 -5
- data/lib/puppet/util/windows/access_control_list.rb +1 -1
- data/lib/puppet/util/windows/adsi.rb +42 -42
- data/lib/puppet/util/windows/daemon.rb +64 -68
- data/lib/puppet/util/windows/error.rb +2 -2
- data/lib/puppet/util/windows/file.rb +18 -25
- data/lib/puppet/util/windows/monkey_patches/process.rb +1 -1
- data/lib/puppet/util/windows/principal.rb +8 -8
- data/lib/puppet/util/windows/process.rb +16 -28
- data/lib/puppet/util/windows/registry.rb +16 -15
- data/lib/puppet/util/windows/root_certs.rb +2 -2
- data/lib/puppet/util/windows/security.rb +31 -31
- data/lib/puppet/util/windows/service.rb +11 -11
- data/lib/puppet/util/windows/sid.rb +8 -8
- data/lib/puppet/util/windows/user.rb +18 -20
- data/lib/puppet/util/yaml.rb +1 -1
- data/lib/puppet/util.rb +55 -46
- data/lib/puppet/version.rb +2 -2
- data/lib/puppet/x509/pem_store.rb +1 -1
- data/lib/puppet.rb +3 -3
- data/man/man5/puppet.conf.5 +10 -2
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +5 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- metadata +2 -2
@@ -15,7 +15,7 @@ module Puppet::Util::Windows::Process
|
|
15
15
|
# https://docs.microsoft.com/en-us/windows/desktop/ProcThread/process-security-and-access-rights
|
16
16
|
PROCESS_QUERY_INFORMATION = 0x0400
|
17
17
|
# https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation
|
18
|
-
MAX_PATH_LENGTH =
|
18
|
+
MAX_PATH_LENGTH = 32_767
|
19
19
|
|
20
20
|
def execute(command, arguments, stdin, stdout, stderr)
|
21
21
|
create_args = {
|
@@ -45,7 +45,7 @@ module Puppet::Util::Windows::Process
|
|
45
45
|
exit_status = -1
|
46
46
|
FFI::MemoryPointer.new(:dword, 1) do |exit_status_ptr|
|
47
47
|
if GetExitCodeProcess(handle, exit_status_ptr) == FFI::WIN32_FALSE
|
48
|
-
raise Puppet::Util::Windows::Error
|
48
|
+
raise Puppet::Util::Windows::Error, _("Failed to get child process exit code")
|
49
49
|
end
|
50
50
|
|
51
51
|
exit_status = exit_status_ptr.read_dword
|
@@ -54,7 +54,7 @@ module Puppet::Util::Windows::Process
|
|
54
54
|
# and since it's read-only, we can't set it. But we can execute a
|
55
55
|
# a shell that simply returns the desired exit status, which has the
|
56
56
|
# desired effect.
|
57
|
-
%x
|
57
|
+
%x(#{ENV.fetch('COMSPEC', nil)} /c exit #{exit_status})
|
58
58
|
end
|
59
59
|
|
60
60
|
exit_status
|
@@ -73,9 +73,7 @@ module Puppet::Util::Windows::Process
|
|
73
73
|
begin
|
74
74
|
phandle = OpenProcess(desired_access, inherit, process_id)
|
75
75
|
if phandle == FFI::Pointer::NULL_HANDLE
|
76
|
-
raise Puppet::Util::Windows::Error.
|
77
|
-
"OpenProcess(#{desired_access.to_s(8)}, #{inherit}, #{process_id})"
|
78
|
-
)
|
76
|
+
raise Puppet::Util::Windows::Error, "OpenProcess(#{desired_access.to_s(8)}, #{inherit}, #{process_id})"
|
79
77
|
end
|
80
78
|
|
81
79
|
yield phandle
|
@@ -94,9 +92,7 @@ module Puppet::Util::Windows::Process
|
|
94
92
|
FFI::MemoryPointer.new(:handle, 1) do |token_handle_ptr|
|
95
93
|
result = OpenProcessToken(handle, desired_access, token_handle_ptr)
|
96
94
|
if result == FFI::WIN32_FALSE
|
97
|
-
raise Puppet::Util::Windows::Error.
|
98
|
-
"OpenProcessToken(#{handle}, #{desired_access.to_s(8)}, #{token_handle_ptr})"
|
99
|
-
)
|
95
|
+
raise Puppet::Util::Windows::Error, "OpenProcessToken(#{handle}, #{desired_access.to_s(8)}, #{token_handle_ptr})"
|
100
96
|
end
|
101
97
|
|
102
98
|
yield token_handle = token_handle_ptr.read_handle
|
@@ -137,10 +133,8 @@ module Puppet::Util::Windows::Process
|
|
137
133
|
use_win32_path_format = 0
|
138
134
|
result = QueryFullProcessImageNameW(phandle, use_win32_path_format, exe_name_ptr, exe_name_length_ptr)
|
139
135
|
if result == FFI::WIN32_FALSE
|
140
|
-
raise Puppet::Util::Windows::Error
|
141
|
-
|
142
|
-
"exe_name_ptr, #{max_chars}"
|
143
|
-
)
|
136
|
+
raise Puppet::Util::Windows::Error, "QueryFullProcessImageNameW(phandle, #{use_win32_path_format}, " \
|
137
|
+
"exe_name_ptr, #{max_chars}"
|
144
138
|
end
|
145
139
|
image_name = exe_name_ptr.read_wide_string(exe_name_length_ptr.read_dword)
|
146
140
|
end
|
@@ -161,9 +155,7 @@ module Puppet::Util::Windows::Process
|
|
161
155
|
)
|
162
156
|
|
163
157
|
if result == FFI::WIN32_FALSE
|
164
|
-
raise Puppet::Util::Windows::Error
|
165
|
-
"LookupPrivilegeValue(#{system_name}, #{name}, #{luid_ptr})"
|
166
|
-
)
|
158
|
+
raise Puppet::Util::Windows::Error, "LookupPrivilegeValue(#{system_name}, #{name}, #{luid_ptr})"
|
167
159
|
end
|
168
160
|
|
169
161
|
yield LUID.new(luid_ptr)
|
@@ -181,9 +173,7 @@ module Puppet::Util::Windows::Process
|
|
181
173
|
return_length = return_length_ptr.read_dword
|
182
174
|
|
183
175
|
if return_length <= 0
|
184
|
-
raise Puppet::Util::Windows::Error
|
185
|
-
"GetTokenInformation(#{token_handle}, #{token_information}, nil, 0, #{return_length_ptr})"
|
186
|
-
)
|
176
|
+
raise Puppet::Util::Windows::Error, "GetTokenInformation(#{token_handle}, #{token_information}, nil, 0, #{return_length_ptr})"
|
187
177
|
end
|
188
178
|
|
189
179
|
# re-call API with properly sized buffer for all results
|
@@ -192,10 +182,8 @@ module Puppet::Util::Windows::Process
|
|
192
182
|
token_information_buf, return_length, return_length_ptr)
|
193
183
|
|
194
184
|
if result == FFI::WIN32_FALSE
|
195
|
-
raise Puppet::Util::Windows::Error
|
196
|
-
|
197
|
-
"#{return_length}, #{return_length_ptr})"
|
198
|
-
)
|
185
|
+
raise Puppet::Util::Windows::Error, "GetTokenInformation(#{token_handle}, #{token_information}, #{token_information_buf}, " \
|
186
|
+
"#{return_length}, #{return_length_ptr})"
|
199
187
|
end
|
200
188
|
|
201
189
|
yield token_information_buf
|
@@ -292,7 +280,7 @@ module Puppet::Util::Windows::Process
|
|
292
280
|
result = GetVersionExW(os_version_ptr)
|
293
281
|
|
294
282
|
if result == FFI::WIN32_FALSE
|
295
|
-
raise Puppet::Util::Windows::Error
|
283
|
+
raise Puppet::Util::Windows::Error, _("GetVersionEx failed")
|
296
284
|
end
|
297
285
|
|
298
286
|
ver = os_version[:dwMajorVersion]
|
@@ -315,7 +303,7 @@ module Puppet::Util::Windows::Process
|
|
315
303
|
env_ptr = GetEnvironmentStringsW()
|
316
304
|
|
317
305
|
# pass :invalid => :replace to the Ruby String#encode to use replacement characters
|
318
|
-
pairs = env_ptr.read_arbitrary_wide_string_up_to(
|
306
|
+
pairs = env_ptr.read_arbitrary_wide_string_up_to(65_534, :double_null, { :invalid => :replace })
|
319
307
|
.split(?\x00)
|
320
308
|
.reject { |env_str| env_str.nil? || env_str.empty? || env_str[0] == '=' }
|
321
309
|
.reject do |env_str|
|
@@ -340,14 +328,14 @@ module Puppet::Util::Windows::Process
|
|
340
328
|
raise Puppet::Util::Windows::Error(_('environment variable name must not be nil or empty')) if !name || name.empty?
|
341
329
|
|
342
330
|
FFI::MemoryPointer.from_string_to_wide_string(name) do |name_ptr|
|
343
|
-
if
|
331
|
+
if val.nil?
|
344
332
|
if SetEnvironmentVariableW(name_ptr, FFI::MemoryPointer::NULL) == FFI::WIN32_FALSE
|
345
|
-
raise Puppet::Util::Windows::Error
|
333
|
+
raise Puppet::Util::Windows::Error, _("Failed to remove environment variable: %{name}") % { name: name }
|
346
334
|
end
|
347
335
|
else
|
348
336
|
FFI::MemoryPointer.from_string_to_wide_string(val) do |val_ptr|
|
349
337
|
if SetEnvironmentVariableW(name_ptr, val_ptr) == FFI::WIN32_FALSE
|
350
|
-
raise Puppet::Util::Windows::Error
|
338
|
+
raise Puppet::Util::Windows::Error, _("Failed to set environment variable: %{name}") % { name: name }
|
351
339
|
end
|
352
340
|
end
|
353
341
|
end
|
@@ -21,8 +21,8 @@ module Puppet::Util::Windows
|
|
21
21
|
|
22
22
|
def root(name)
|
23
23
|
Win32::Registry.const_get(name)
|
24
|
-
rescue NameError
|
25
|
-
raise Puppet::Error, _("Invalid registry key '%{name}'") % { name: name },
|
24
|
+
rescue NameError => e
|
25
|
+
raise Puppet::Error, _("Invalid registry key '%{name}'") % { name: name }, e.backtrace
|
26
26
|
end
|
27
27
|
|
28
28
|
def open(name, path, mode = KEY_READ | KEY64, &block)
|
@@ -52,7 +52,7 @@ module Puppet::Util::Windows
|
|
52
52
|
|
53
53
|
loop do
|
54
54
|
subkey, filetime = reg_enum_key(key, index, subkey_max_len)
|
55
|
-
yield subkey, filetime
|
55
|
+
yield subkey, filetime unless subkey.nil?
|
56
56
|
index += 1
|
57
57
|
break if subkey.nil?
|
58
58
|
end
|
@@ -81,12 +81,10 @@ module Puppet::Util::Windows
|
|
81
81
|
vals = {}
|
82
82
|
names.each do |name|
|
83
83
|
FFI::Pointer.from_string_to_wide_string(name) do |subkeyname_ptr|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
raise e unless e.code == Puppet::Util::Windows::Error::ERROR_FILE_NOT_FOUND
|
89
|
-
end
|
84
|
+
_, vals[name] = read(key, subkeyname_ptr)
|
85
|
+
rescue Puppet::Util::Windows::Error => e
|
86
|
+
# ignore missing names, but raise other errors
|
87
|
+
raise e unless e.code == Puppet::Util::Windows::Error::ERROR_FILE_NOT_FOUND
|
90
88
|
end
|
91
89
|
end
|
92
90
|
vals
|
@@ -100,7 +98,7 @@ module Puppet::Util::Windows
|
|
100
98
|
|
101
99
|
loop do
|
102
100
|
subkey, type, data = reg_enum_value(key, index, value_max_len)
|
103
|
-
yield subkey, type, data
|
101
|
+
yield subkey, type, data unless subkey.nil?
|
104
102
|
index += 1
|
105
103
|
break if subkey.nil?
|
106
104
|
end
|
@@ -118,7 +116,8 @@ module Puppet::Util::Windows
|
|
118
116
|
MAX_KEY_CHAR_LENGTH = 255 + 1
|
119
117
|
|
120
118
|
def reg_enum_key(key, index, max_key_char_length = MAX_KEY_CHAR_LENGTH)
|
121
|
-
subkey
|
119
|
+
subkey = nil
|
120
|
+
filetime = nil
|
122
121
|
|
123
122
|
FFI::MemoryPointer.new(:dword) do |subkey_length_ptr|
|
124
123
|
FFI::MemoryPointer.new(FFI::WIN32::FILETIME.size) do |filetime_ptr|
|
@@ -149,10 +148,12 @@ module Puppet::Util::Windows
|
|
149
148
|
end
|
150
149
|
|
151
150
|
# max number of wide characters including NULL terminator
|
152
|
-
MAX_VALUE_CHAR_LENGTH =
|
151
|
+
MAX_VALUE_CHAR_LENGTH = 16_383 + 1
|
153
152
|
|
154
153
|
def reg_enum_value(key, index, max_value_length = MAX_VALUE_CHAR_LENGTH)
|
155
|
-
subkey
|
154
|
+
subkey = nil
|
155
|
+
type = nil
|
156
|
+
data = nil
|
156
157
|
|
157
158
|
FFI::MemoryPointer.new(:dword) do |subkey_length_ptr|
|
158
159
|
FFI::MemoryPointer.new(:wchar, max_value_length) do |subkey_ptr|
|
@@ -202,7 +203,7 @@ module Puppet::Util::Windows
|
|
202
203
|
result = [
|
203
204
|
# Unicode characters *not* including trailing NULL
|
204
205
|
max_subkey_name_length_ptr.read_dword + 1,
|
205
|
-
max_value_name_length_ptr.read_dword + 1
|
206
|
+
max_value_name_length_ptr.read_dword + 1
|
206
207
|
]
|
207
208
|
end
|
208
209
|
end
|
@@ -256,7 +257,7 @@ module Puppet::Util::Windows
|
|
256
257
|
raise TypeError, _("Type %{type} is not supported.") % { type: type }
|
257
258
|
end
|
258
259
|
rescue IndexError => ex
|
259
|
-
raise if
|
260
|
+
raise if ex.message !~ /^Memory access .* is out of bounds$/i
|
260
261
|
|
261
262
|
parent_key_name = key.parent ? "#{key.parent.keyname}\\" : ""
|
262
263
|
Puppet.warning _("A value in the registry key %{parent_key_name}%{key} is corrupt or invalid") % { parent_key_name: parent_key_name, key: key.keyname }
|
@@ -25,7 +25,7 @@ class Puppet::Util::Windows::RootCerts
|
|
25
25
|
# Returns a new instance.
|
26
26
|
# @return [Puppet::Util::Windows::RootCerts] object constructed from current root certificates
|
27
27
|
def self.instance
|
28
|
-
new(
|
28
|
+
new(load_certs)
|
29
29
|
end
|
30
30
|
|
31
31
|
# Returns an array of root certificates.
|
@@ -40,7 +40,7 @@ class Puppet::Util::Windows::RootCerts
|
|
40
40
|
ptr = FFI::Pointer::NULL
|
41
41
|
store = CertOpenSystemStoreA(nil, "ROOT")
|
42
42
|
begin
|
43
|
-
while (ptr = CertEnumCertificatesInStore(store, ptr)) and
|
43
|
+
while (ptr = CertEnumCertificatesInStore(store, ptr)) and !ptr.null?
|
44
44
|
context = CERT_CONTEXT.new(ptr)
|
45
45
|
cert_buf = context[:pbCertEncoded].read_bytes(context[:cbCertEncoded])
|
46
46
|
begin
|
@@ -74,21 +74,21 @@ module Puppet::Util::Windows::Security
|
|
74
74
|
extend FFI::Library
|
75
75
|
|
76
76
|
# file modes
|
77
|
-
S_IRUSR =
|
78
|
-
S_IRGRP =
|
79
|
-
S_IROTH =
|
80
|
-
S_IWUSR =
|
81
|
-
S_IWGRP =
|
82
|
-
S_IWOTH =
|
83
|
-
S_IXUSR =
|
84
|
-
S_IXGRP =
|
85
|
-
S_IXOTH =
|
86
|
-
S_IRWXU =
|
87
|
-
S_IRWXG =
|
88
|
-
S_IRWXO =
|
89
|
-
S_ISVTX =
|
90
|
-
S_IEXTRA =
|
91
|
-
S_ISYSTEM_MISSING =
|
77
|
+
S_IRUSR = 0o000400
|
78
|
+
S_IRGRP = 0o000040
|
79
|
+
S_IROTH = 0o000004
|
80
|
+
S_IWUSR = 0o000200
|
81
|
+
S_IWGRP = 0o000020
|
82
|
+
S_IWOTH = 0o000002
|
83
|
+
S_IXUSR = 0o000100
|
84
|
+
S_IXGRP = 0o000010
|
85
|
+
S_IXOTH = 0o000001
|
86
|
+
S_IRWXU = 0o000700
|
87
|
+
S_IRWXG = 0o000070
|
88
|
+
S_IRWXO = 0o000007
|
89
|
+
S_ISVTX = 0o001000
|
90
|
+
S_IEXTRA = 0o2000000 # represents an extra ace
|
91
|
+
S_ISYSTEM_MISSING = 0o4000000
|
92
92
|
|
93
93
|
# constants that are missing from Windows::Security
|
94
94
|
PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000
|
@@ -167,13 +167,13 @@ module Puppet::Util::Windows::Security
|
|
167
167
|
supported = false
|
168
168
|
root = Pathname.new(path).enum_for(:ascend).to_a.last.to_s
|
169
169
|
# 'A trailing backslash is required'
|
170
|
-
root = "#{root}\\" unless root =~
|
170
|
+
root = "#{root}\\" unless root =~ %r{[/\\]$}
|
171
171
|
|
172
172
|
FFI::MemoryPointer.new(:pointer, 1) do |flags_ptr|
|
173
173
|
if GetVolumeInformationW(wide_string(root), FFI::Pointer::NULL, 0,
|
174
174
|
FFI::Pointer::NULL, FFI::Pointer::NULL,
|
175
175
|
flags_ptr, FFI::Pointer::NULL, 0) == FFI::WIN32_FALSE
|
176
|
-
raise Puppet::Util::Windows::Error
|
176
|
+
raise Puppet::Util::Windows::Error, _("Failed to get volume information")
|
177
177
|
end
|
178
178
|
|
179
179
|
supported = flags_ptr.read_dword & FILE_PERSISTENT_ACLS == FILE_PERSISTENT_ACLS
|
@@ -314,10 +314,10 @@ module Puppet::Util::Windows::Security
|
|
314
314
|
|
315
315
|
# With a mode value of '7' for group / other, the value must then include
|
316
316
|
# additional perms beyond STANDARD_RIGHTS_READ to allow DACL modification
|
317
|
-
if (
|
317
|
+
if (mode & S_IRWXG) == S_IRWXG
|
318
318
|
group_allow |= FILE::DELETE | FILE::WRITE_DAC | FILE::WRITE_OWNER
|
319
319
|
end
|
320
|
-
if (
|
320
|
+
if (mode & S_IRWXO) == S_IRWXO
|
321
321
|
other_allow |= FILE::DELETE | FILE::WRITE_DAC | FILE::WRITE_OWNER
|
322
322
|
end
|
323
323
|
|
@@ -433,11 +433,11 @@ module Puppet::Util::Windows::Security
|
|
433
433
|
|
434
434
|
Puppet::Util::Windows::SID.string_to_sid_ptr(sid) do |sid_ptr|
|
435
435
|
if Puppet::Util::Windows::SID.IsValidSid(sid_ptr) == FFI::WIN32_FALSE
|
436
|
-
raise Puppet::Util::Windows::Error
|
436
|
+
raise Puppet::Util::Windows::Error, _("Invalid SID")
|
437
437
|
end
|
438
438
|
|
439
439
|
if AddAccessAllowedAceEx(acl, ACL_REVISION, inherit, mask, sid_ptr) == FFI::WIN32_FALSE
|
440
|
-
raise Puppet::Util::Windows::Error
|
440
|
+
raise Puppet::Util::Windows::Error, _("Failed to add access control entry")
|
441
441
|
end
|
442
442
|
end
|
443
443
|
|
@@ -450,11 +450,11 @@ module Puppet::Util::Windows::Security
|
|
450
450
|
|
451
451
|
Puppet::Util::Windows::SID.string_to_sid_ptr(sid) do |sid_ptr|
|
452
452
|
if Puppet::Util::Windows::SID.IsValidSid(sid_ptr) == FFI::WIN32_FALSE
|
453
|
-
raise Puppet::Util::Windows::Error
|
453
|
+
raise Puppet::Util::Windows::Error, _("Invalid SID")
|
454
454
|
end
|
455
455
|
|
456
456
|
if AddAccessDeniedAceEx(acl, ACL_REVISION, inherit, mask, sid_ptr) == FFI::WIN32_FALSE
|
457
|
-
raise Puppet::Util::Windows::Error
|
457
|
+
raise Puppet::Util::Windows::Error, _("Failed to add access control entry")
|
458
458
|
end
|
459
459
|
end
|
460
460
|
|
@@ -465,7 +465,7 @@ module Puppet::Util::Windows::Security
|
|
465
465
|
def parse_dacl(dacl_ptr)
|
466
466
|
# REMIND: need to handle NULL DACL
|
467
467
|
if IsValidAcl(dacl_ptr) == FFI::WIN32_FALSE
|
468
|
-
raise Puppet::Util::Windows::Error
|
468
|
+
raise Puppet::Util::Windows::Error, _("Invalid DACL")
|
469
469
|
end
|
470
470
|
|
471
471
|
dacl_struct = ACL.new(dacl_ptr)
|
@@ -522,7 +522,7 @@ module Puppet::Util::Windows::Security
|
|
522
522
|
) # template
|
523
523
|
|
524
524
|
if handle == Puppet::Util::Windows::File::INVALID_HANDLE_VALUE
|
525
|
-
raise Puppet::Util::Windows::Error
|
525
|
+
raise Puppet::Util::Windows::Error, _("Failed to open '%{path}'") % { path: path }
|
526
526
|
end
|
527
527
|
|
528
528
|
begin
|
@@ -569,7 +569,7 @@ module Puppet::Util::Windows::Security
|
|
569
569
|
if AdjustTokenPrivileges(token, FFI::WIN32_FALSE,
|
570
570
|
token_privileges, token_privileges.size,
|
571
571
|
FFI::MemoryPointer::NULL, FFI::MemoryPointer::NULL) == FFI::WIN32_FALSE
|
572
|
-
raise Puppet::Util::Windows::Error
|
572
|
+
raise Puppet::Util::Windows::Error, _("Failed to adjust process privileges")
|
573
573
|
end
|
574
574
|
end
|
575
575
|
end
|
@@ -599,7 +599,7 @@ module Puppet::Util::Windows::Security
|
|
599
599
|
FFI::Pointer::NULL, # sacl
|
600
600
|
sd_ptr_ptr
|
601
601
|
) # sec desc
|
602
|
-
raise Puppet::Util::Windows::Error
|
602
|
+
raise Puppet::Util::Windows::Error, _("Failed to get security information") if rv != FFI::ERROR_SUCCESS
|
603
603
|
|
604
604
|
# these 2 convenience params are not freed since they point inside sd_ptr
|
605
605
|
owner = Puppet::Util::Windows::SID.sid_ptr_to_string(owner_sid_ptr_ptr.get_pointer(0))
|
@@ -609,7 +609,7 @@ module Puppet::Util::Windows::Security
|
|
609
609
|
FFI::MemoryPointer.new(:dword, 1) do |revision|
|
610
610
|
sd_ptr_ptr.read_win32_local_pointer do |sd_ptr|
|
611
611
|
if GetSecurityDescriptorControl(sd_ptr, control, revision) == FFI::WIN32_FALSE
|
612
|
-
raise Puppet::Util::Windows::Error
|
612
|
+
raise Puppet::Util::Windows::Error, _("Failed to get security descriptor control")
|
613
613
|
end
|
614
614
|
|
615
615
|
protect = (control.read_word & SE_DACL_PROTECTED) == SE_DACL_PROTECTED
|
@@ -642,11 +642,11 @@ module Puppet::Util::Windows::Security
|
|
642
642
|
def set_security_descriptor(path, sd)
|
643
643
|
FFI::MemoryPointer.new(:byte, get_max_generic_acl_size(sd.dacl.count)) do |acl_ptr|
|
644
644
|
if InitializeAcl(acl_ptr, acl_ptr.size, ACL_REVISION) == FFI::WIN32_FALSE
|
645
|
-
raise Puppet::Util::Windows::Error
|
645
|
+
raise Puppet::Util::Windows::Error, _("Failed to initialize ACL")
|
646
646
|
end
|
647
647
|
|
648
648
|
if IsValidAcl(acl_ptr) == FFI::WIN32_FALSE
|
649
|
-
raise Puppet::Util::Windows::Error
|
649
|
+
raise Puppet::Util::Windows::Error, _("Invalid DACL")
|
650
650
|
end
|
651
651
|
|
652
652
|
with_privilege(SE_BACKUP_NAME) do
|
@@ -681,7 +681,7 @@ module Puppet::Util::Windows::Security
|
|
681
681
|
FFI::MemoryPointer::NULL)
|
682
682
|
|
683
683
|
if rv != FFI::ERROR_SUCCESS
|
684
|
-
raise Puppet::Util::Windows::Error
|
684
|
+
raise Puppet::Util::Windows::Error, _("Failed to set security information")
|
685
685
|
end
|
686
686
|
end
|
687
687
|
end
|
@@ -111,7 +111,7 @@ module Puppet::Util::Windows
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
if state.nil?
|
114
|
-
raise Puppet::Error
|
114
|
+
raise Puppet::Error, _("Unknown Service state '%{current_state}' for '%{service_name}'") % { current_state: state.to_s, service_name: service_name }
|
115
115
|
end
|
116
116
|
|
117
117
|
state
|
@@ -139,7 +139,7 @@ module Puppet::Util::Windows
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
if start_type.nil?
|
142
|
-
raise Puppet::Error
|
142
|
+
raise Puppet::Error, _("Unknown start type '%{start_type}' for '%{service_name}'") % { start_type: start_type.to_s, service_name: service_name }
|
143
143
|
end
|
144
144
|
|
145
145
|
start_type
|
@@ -190,7 +190,7 @@ module Puppet::Util::Windows
|
|
190
190
|
FFI::Pointer::NULL # lpDisplayName
|
191
191
|
)
|
192
192
|
if success == FFI::WIN32_FALSE
|
193
|
-
raise Puppet::Util::Windows::Error
|
193
|
+
raise Puppet::Util::Windows::Error, _("Failed to update service configuration")
|
194
194
|
end
|
195
195
|
end
|
196
196
|
|
@@ -255,7 +255,7 @@ module Puppet::Util::Windows
|
|
255
255
|
FFI::Pointer::NULL
|
256
256
|
)
|
257
257
|
if success == FFI::WIN32_FALSE
|
258
|
-
raise Puppet::Util::Windows::Error
|
258
|
+
raise Puppet::Util::Windows::Error, _("Failed to fetch services")
|
259
259
|
end
|
260
260
|
|
261
261
|
# Now that the buffer is populated with services
|
@@ -305,7 +305,7 @@ module Puppet::Util::Windows
|
|
305
305
|
result = nil
|
306
306
|
open_scm(scm_access) do |scm|
|
307
307
|
service = OpenServiceW(scm, wide_string(service_name), service_access)
|
308
|
-
raise Puppet::Util::Windows::Error
|
308
|
+
raise Puppet::Util::Windows::Error, _("Failed to open a handle to the service") if service == FFI::Pointer::NULL_HANDLE
|
309
309
|
|
310
310
|
result = yield service
|
311
311
|
end
|
@@ -323,7 +323,7 @@ module Puppet::Util::Windows
|
|
323
323
|
# @param [Integer] scm_access code corresponding to the access type requested for the scm
|
324
324
|
def open_scm(scm_access, &block)
|
325
325
|
scm = OpenSCManagerW(FFI::Pointer::NULL, FFI::Pointer::NULL, scm_access)
|
326
|
-
raise Puppet::Util::Windows::Error
|
326
|
+
raise Puppet::Util::Windows::Error, _("Failed to open a handle to the service control manager") if scm == FFI::Pointer::NULL_HANDLE
|
327
327
|
|
328
328
|
yield scm
|
329
329
|
ensure
|
@@ -439,7 +439,7 @@ module Puppet::Util::Windows
|
|
439
439
|
bytes_pointer
|
440
440
|
)
|
441
441
|
if success == FFI::WIN32_FALSE
|
442
|
-
raise Puppet::Util::Windows::Error
|
442
|
+
raise Puppet::Util::Windows::Error, _("Service query failed")
|
443
443
|
end
|
444
444
|
|
445
445
|
yield status
|
@@ -476,7 +476,7 @@ module Puppet::Util::Windows
|
|
476
476
|
bytes_pointer
|
477
477
|
)
|
478
478
|
if success == FFI::WIN32_FALSE
|
479
|
-
raise Puppet::Util::Windows::Error
|
479
|
+
raise Puppet::Util::Windows::Error, _("Service query failed")
|
480
480
|
end
|
481
481
|
|
482
482
|
yield config
|
@@ -520,7 +520,7 @@ module Puppet::Util::Windows
|
|
520
520
|
bytes_pointer
|
521
521
|
)
|
522
522
|
if success == FFI::WIN32_FALSE
|
523
|
-
raise Puppet::Util::Windows::Error
|
523
|
+
raise Puppet::Util::Windows::Error, _("Service query for %{parameter_name} failed") % { parameter_name: SERVICE_CONFIG_TYPES[info_level] }
|
524
524
|
end
|
525
525
|
|
526
526
|
yield config
|
@@ -541,10 +541,10 @@ module Puppet::Util::Windows
|
|
541
541
|
success = ChangeServiceConfig2W(
|
542
542
|
service,
|
543
543
|
change, # dwInfoLevel
|
544
|
-
value
|
544
|
+
value # lpInfo
|
545
545
|
)
|
546
546
|
if success == FFI::WIN32_FALSE
|
547
|
-
raise Puppet::Util.windows::Error
|
547
|
+
raise Puppet::Util.windows::Error, _("Failed to update service %{change} configuration") % { change: change }
|
548
548
|
end
|
549
549
|
end
|
550
550
|
end
|
@@ -86,7 +86,7 @@ module Puppet::Util::Windows
|
|
86
86
|
|
87
87
|
raw_sid_bytes ? Principal.lookup_account_sid(raw_sid_bytes) : Principal.lookup_account_name(name)
|
88
88
|
rescue => e
|
89
|
-
Puppet.debug(
|
89
|
+
Puppet.debug(e.message.to_s)
|
90
90
|
(allow_unresolved && raw_sid_bytes) ? unresolved_principal(name, raw_sid_bytes) : nil
|
91
91
|
end
|
92
92
|
module_function :name_to_principal
|
@@ -99,7 +99,7 @@ module Puppet::Util::Windows
|
|
99
99
|
# This method returns a SID::Principal with the account, domain, SID, etc
|
100
100
|
def octet_string_to_principal(bytes)
|
101
101
|
if !bytes || !bytes.respond_to?('pack') || bytes.empty?
|
102
|
-
raise Puppet::Util::Windows::Error
|
102
|
+
raise Puppet::Util::Windows::Error, _("Octet string must be an array of bytes")
|
103
103
|
end
|
104
104
|
|
105
105
|
Principal.lookup_account_sid(bytes)
|
@@ -116,7 +116,7 @@ module Puppet::Util::Windows
|
|
116
116
|
def ads_to_principal(ads_object)
|
117
117
|
if !ads_object || !ads_object.respond_to?(:ole_respond_to?) ||
|
118
118
|
!ads_object.ole_respond_to?(:objectSID) || !ads_object.ole_respond_to?(:Name)
|
119
|
-
raise Puppet::Error
|
119
|
+
raise Puppet::Error, "ads_object must be an IAdsUser or IAdsGroup instance"
|
120
120
|
end
|
121
121
|
|
122
122
|
octet_string_to_principal(ads_object.objectSID)
|
@@ -160,18 +160,18 @@ module Puppet::Util::Windows
|
|
160
160
|
# Convert a SID pointer to a SID string, e.g. "S-1-5-32-544".
|
161
161
|
def sid_ptr_to_string(psid)
|
162
162
|
if !psid.is_a?(FFI::Pointer) || IsValidSid(psid) == FFI::WIN32_FALSE
|
163
|
-
raise Puppet::Util::Windows::Error
|
163
|
+
raise Puppet::Util::Windows::Error, _("Invalid SID")
|
164
164
|
end
|
165
165
|
|
166
166
|
sid_string = nil
|
167
167
|
FFI::MemoryPointer.new(:pointer, 1) do |buffer_ptr|
|
168
168
|
if ConvertSidToStringSidW(psid, buffer_ptr) == FFI::WIN32_FALSE
|
169
|
-
raise Puppet::Util::Windows::Error
|
169
|
+
raise Puppet::Util::Windows::Error, _("Failed to convert binary SID")
|
170
170
|
end
|
171
171
|
|
172
172
|
buffer_ptr.read_win32_local_pointer do |wide_string_ptr|
|
173
173
|
if wide_string_ptr.null?
|
174
|
-
raise Puppet::Error
|
174
|
+
raise Puppet::Error, _("ConvertSidToStringSidW failed to allocate buffer for sid")
|
175
175
|
end
|
176
176
|
|
177
177
|
sid_string = wide_string_ptr.read_arbitrary_wide_string_up_to(MAXIMUM_SID_STRING_LENGTH)
|
@@ -190,7 +190,7 @@ module Puppet::Util::Windows
|
|
190
190
|
FFI::MemoryPointer.from_string_to_wide_string(string_sid) do |lpcwstr|
|
191
191
|
FFI::MemoryPointer.new(:pointer, 1) do |sid_ptr_ptr|
|
192
192
|
if ConvertStringSidToSidW(lpcwstr, sid_ptr_ptr) == FFI::WIN32_FALSE
|
193
|
-
raise Puppet::Util::Windows::Error
|
193
|
+
raise Puppet::Util::Windows::Error, _("Failed to convert string SID: %{string_sid}") % { string_sid: string_sid }
|
194
194
|
end
|
195
195
|
|
196
196
|
sid_ptr_ptr.read_win32_local_pointer do |sid_ptr|
|
@@ -221,7 +221,7 @@ module Puppet::Util::Windows
|
|
221
221
|
def get_length_sid(sid_ptr)
|
222
222
|
# MSDN states IsValidSid should be called on pointer first
|
223
223
|
if !sid_ptr.is_a?(FFI::Pointer) || IsValidSid(sid_ptr) == FFI::WIN32_FALSE
|
224
|
-
raise Puppet::Util::Windows::Error
|
224
|
+
raise Puppet::Util::Windows::Error, _("Invalid SID")
|
225
225
|
end
|
226
226
|
|
227
227
|
GetLengthSid(sid_ptr)
|
@@ -13,7 +13,7 @@ module Puppet::Util::Windows::User
|
|
13
13
|
|
14
14
|
# if Vista or later, check for unrestricted process token
|
15
15
|
elevated_supported = Puppet::Util::Windows::Process.supports_elevated_security?
|
16
|
-
|
16
|
+
elevated_supported ? Puppet::Util::Windows::Process.elevated_security? : true
|
17
17
|
end
|
18
18
|
module_function :admin?
|
19
19
|
|
@@ -52,17 +52,17 @@ module Puppet::Util::Windows::User
|
|
52
52
|
size_pointer.write_uint32(SECURITY_MAX_SID_SIZE)
|
53
53
|
|
54
54
|
if CreateWellKnownSid(:WinBuiltinAdministratorsSid, FFI::Pointer::NULL, sid_pointer, size_pointer) == FFI::WIN32_FALSE
|
55
|
-
raise Puppet::Util::Windows::Error
|
55
|
+
raise Puppet::Util::Windows::Error, _("Failed to create administrators SID")
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
if IsValidSid(sid_pointer) == FFI::WIN32_FALSE
|
60
|
-
raise Puppet::Util::Windows::Error
|
60
|
+
raise Puppet::Util::Windows::Error, _("Invalid SID")
|
61
61
|
end
|
62
62
|
|
63
63
|
FFI::MemoryPointer.new(:win32_bool, 1) do |ismember_pointer|
|
64
64
|
if CheckTokenMembership(FFI::Pointer::NULL_HANDLE, sid_pointer, ismember_pointer) == FFI::WIN32_FALSE
|
65
|
-
raise Puppet::Util::Windows::Error
|
65
|
+
raise Puppet::Util::Windows::Error, _("Failed to check membership")
|
66
66
|
end
|
67
67
|
|
68
68
|
# Is administrators SID enabled in calling thread's access token?
|
@@ -75,18 +75,16 @@ module Puppet::Util::Windows::User
|
|
75
75
|
module_function :check_token_membership
|
76
76
|
|
77
77
|
def password_is?(name, password, domain = '.')
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
return authenticated_error_codes.include?(detail.code)
|
89
|
-
end
|
78
|
+
logon_user(name, password, domain) { |token| }
|
79
|
+
rescue Puppet::Util::Windows::Error => detail
|
80
|
+
authenticated_error_codes = Set[
|
81
|
+
ERROR_ACCOUNT_RESTRICTION,
|
82
|
+
ERROR_INVALID_LOGON_HOURS,
|
83
|
+
ERROR_INVALID_WORKSTATION,
|
84
|
+
ERROR_ACCOUNT_DISABLED,
|
85
|
+
]
|
86
|
+
|
87
|
+
authenticated_error_codes.include?(detail.code)
|
90
88
|
end
|
91
89
|
module_function :password_is?
|
92
90
|
|
@@ -101,7 +99,7 @@ module Puppet::Util::Windows::User
|
|
101
99
|
# try logon using network else try logon using interactive mode
|
102
100
|
if logon_user_by_logon_type(name, domain, password, fLOGON32_LOGON_NETWORK, fLOGON32_PROVIDER_DEFAULT, token_pointer) == FFI::WIN32_FALSE
|
103
101
|
if logon_user_by_logon_type(name, domain, password, fLOGON32_LOGON_INTERACTIVE, fLOGON32_PROVIDER_DEFAULT, token_pointer) == FFI::WIN32_FALSE
|
104
|
-
raise Puppet::Util::Windows::Error
|
102
|
+
raise Puppet::Util::Windows::Error, _("Failed to logon user %{name}") % { name: name.inspect }
|
105
103
|
end
|
106
104
|
end
|
107
105
|
|
@@ -132,13 +130,13 @@ module Puppet::Util::Windows::User
|
|
132
130
|
|
133
131
|
# Load the profile. Since it doesn't exist, it will be created
|
134
132
|
if LoadUserProfileW(token, pi.pointer) == FFI::WIN32_FALSE
|
135
|
-
raise Puppet::Util::Windows::Error
|
133
|
+
raise Puppet::Util::Windows::Error, _("Failed to load user profile %{user}") % { user: user.inspect }
|
136
134
|
end
|
137
135
|
|
138
136
|
Puppet.debug("Loaded profile for #{user}")
|
139
137
|
|
140
138
|
if UnloadUserProfile(token, pi[:hProfile]) == FFI::WIN32_FALSE
|
141
|
-
raise Puppet::Util::Windows::Error
|
139
|
+
raise Puppet::Util::Windows::Error, _("Failed to unload user profile %{user}") % { user: user.inspect }
|
142
140
|
end
|
143
141
|
end
|
144
142
|
end
|
@@ -260,7 +258,7 @@ module Puppet::Util::Windows::User
|
|
260
258
|
"The RPC server is unavailable or given domain name is invalid."
|
261
259
|
end
|
262
260
|
|
263
|
-
raise Puppet::Error
|
261
|
+
raise Puppet::Error, "Calling `#{method_name}` returned 'Win32 Error Code 0x%08X'. #{error_reason}" % error_code
|
264
262
|
end
|
265
263
|
private_class_method :check_lsa_nt_status_and_raise_failures
|
266
264
|
|
data/lib/puppet/util/yaml.rb
CHANGED