puppet 4.3.2-x64-mingw32 → 4.4.0-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/COMMITTERS.md +2 -2
- data/CONTRIBUTING.md +6 -6
- data/LICENSE +1 -1
- data/README.md +8 -9
- data/conf/auth.conf +2 -2
- data/ext/README.environment +1 -1
- data/ext/debian/README.source +1 -1
- data/ext/debian/control +1 -1
- data/ext/debian/copyright +4 -4
- data/ext/debian/puppetmaster.README.debian +11 -9
- data/ext/emacs/puppet-mode.el +1 -1
- data/ext/envpuppet +2 -2
- data/ext/ips/puppetagent.xml +1 -1
- data/ext/ips/puppetmaster.xml +1 -1
- data/ext/project_data.yaml +8 -0
- data/ext/puppet-test +3 -3
- data/ext/rack/example-passenger-vhost.conf +1 -1
- data/ext/redhat/puppet.spec.erb +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +1 -1
- data/ext/solaris/pkginfo +1 -1
- data/ext/solaris/smf/puppet.xml +1 -1
- data/ext/suse/puppet.spec +2 -2
- data/ext/upload_facts.rb +1 -1
- data/ext/windows/puppet_interactive.bat +6 -0
- data/ext/windows/puppet_shell.bat +9 -0
- data/ext/windows/run_puppet_interactive.bat +9 -0
- data/ext/yaml_nodes.rb +1 -1
- data/install.rb +30 -20
- data/lib/puppet/agent.rb +1 -1
- data/lib/puppet/application/agent.rb +4 -2
- data/lib/puppet/application/apply.rb +7 -4
- data/lib/puppet/application/cert.rb +1 -1
- data/lib/puppet/application/device.rb +1 -1
- data/lib/puppet/application/filebucket.rb +1 -1
- data/lib/puppet/application/inspect.rb +1 -1
- data/lib/puppet/application/lookup.rb +4 -4
- data/lib/puppet/application/master.rb +2 -2
- data/lib/puppet/application/resource.rb +1 -1
- data/lib/puppet/configurer.rb +100 -22
- data/lib/puppet/data_providers/hiera_config.rb +28 -3
- data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
- data/lib/puppet/data_providers/hiera_support.rb +1 -1
- data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
- data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
- data/lib/puppet/defaults.rb +65 -19
- data/lib/puppet/environments.rb +3 -1
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +1 -1
- data/lib/puppet/face/help/man.erb +1 -1
- data/lib/puppet/face/module/install.rb +6 -6
- data/lib/puppet/face/parser.rb +12 -9
- data/lib/puppet/face/status.rb +2 -1
- data/lib/puppet/feature/cfpropertylist.rb +3 -0
- data/lib/puppet/feature/telnet.rb +9 -0
- data/lib/puppet/file_serving/http_metadata.rb +46 -0
- data/lib/puppet/file_serving/metadata.rb +18 -2
- data/lib/puppet/file_serving/terminus_selector.rb +2 -0
- data/lib/puppet/file_system.rb +2 -2
- data/lib/puppet/file_system/file_impl.rb +2 -2
- data/lib/puppet/file_system/memory_impl.rb +1 -1
- data/lib/puppet/file_system/uniquefile.rb +1 -1
- data/lib/puppet/forge.rb +1 -1
- data/lib/puppet/forge/repository.rb +1 -31
- data/lib/puppet/functions.rb +45 -6
- data/lib/puppet/functions/assert_type.rb +9 -9
- data/lib/puppet/functions/each.rb +5 -13
- data/lib/puppet/functions/filter.rb +5 -14
- data/lib/puppet/functions/map.rb +6 -14
- data/lib/puppet/functions/reduce.rb +5 -13
- data/lib/puppet/functions/reverse_each.rb +82 -0
- data/lib/puppet/functions/scanf.rb +15 -18
- data/lib/puppet/functions/slice.rb +22 -36
- data/lib/puppet/functions/split.rb +2 -2
- data/lib/puppet/functions/step.rb +88 -0
- data/lib/puppet/functions/type.rb +70 -0
- data/lib/puppet/graph/rb_tree_map.rb +1 -1
- data/lib/puppet/indirector/catalog/compiler.rb +188 -5
- data/lib/puppet/indirector/file_content/http.rb +15 -0
- data/lib/puppet/indirector/file_metadata/http.rb +27 -0
- data/lib/puppet/indirector/generic_http.rb +16 -0
- data/lib/puppet/indirector/node/exec.rb +1 -1
- data/lib/puppet/indirector/node/ldap.rb +1 -1
- data/lib/puppet/indirector/rest.rb +2 -1
- data/lib/puppet/info_service/class_information_service.rb +13 -12
- data/lib/puppet/loaders.rb +1 -0
- data/lib/puppet/module.rb +3 -0
- data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
- data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
- data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
- data/lib/puppet/module_tool/tar/mini.rb +3 -3
- data/lib/puppet/network/http/pool.rb +9 -0
- data/lib/puppet/node.rb +1 -1
- data/lib/puppet/node/environment.rb +11 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
- data/lib/puppet/parser/compiler.rb +3 -3
- data/lib/puppet/parser/environment_compiler.rb +0 -1
- data/lib/puppet/parser/functions.rb +28 -16
- data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
- data/lib/puppet/parser/functions/inline_template.rb +1 -1
- data/lib/puppet/parser/functions/map.rb +1 -1
- data/lib/puppet/parser/functions/scanf.rb +15 -26
- data/lib/puppet/parser/functions/slice.rb +17 -24
- data/lib/puppet/parser/functions/split.rb +1 -1
- data/lib/puppet/parser/resource.rb +19 -17
- data/lib/puppet/parser/scope.rb +176 -5
- data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
- data/lib/puppet/pops.rb +0 -8
- data/lib/puppet/pops/adaptable.rb +4 -1
- data/lib/puppet/pops/adapters.rb +38 -13
- data/lib/puppet/pops/binder/binder.rb +21 -17
- data/lib/puppet/pops/binder/binder_issues.rb +8 -6
- data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
- data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
- data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
- data/lib/puppet/pops/binder/bindings_model.rb +49 -47
- data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
- data/lib/puppet/pops/binder/injector.rb +53 -48
- data/lib/puppet/pops/binder/key_factory.rb +10 -6
- data/lib/puppet/pops/binder/producers.rb +67 -62
- data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
- data/lib/puppet/pops/evaluator/closure.rb +84 -68
- data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
- data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
- data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
- data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
- data/lib/puppet/pops/issue_reporter.rb +6 -4
- data/lib/puppet/pops/issues.rb +34 -11
- data/lib/puppet/pops/loader/base_loader.rb +1 -1
- data/lib/puppet/pops/loader/loader.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +15 -0
- data/lib/puppet/pops/loader/module_loaders.rb +17 -13
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
- data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
- data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
- data/lib/puppet/pops/loaders.rb +51 -9
- data/lib/puppet/pops/lookup.rb +14 -12
- data/lib/puppet/pops/merge_strategy.rb +16 -19
- data/lib/puppet/pops/model/factory.rb +26 -2
- data/lib/puppet/pops/model/model.rb +8 -8
- data/lib/puppet/pops/model/model_label_provider.rb +13 -7
- data/lib/puppet/pops/model/model_meta.rb +17 -0
- data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
- data/lib/puppet/pops/parser/egrammar.ra +38 -14
- data/lib/puppet/pops/parser/eparser.rb +1353 -1276
- data/lib/puppet/pops/parser/epp_support.rb +11 -7
- data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
- data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
- data/lib/puppet/pops/parser/lexer2.rb +26 -19
- data/lib/puppet/pops/parser/lexer_support.rb +85 -7
- data/lib/puppet/pops/parser/locator.rb +21 -0
- data/lib/puppet/pops/parser/parser_support.rb +19 -16
- data/lib/puppet/pops/parser/slurp_support.rb +11 -7
- data/lib/puppet/pops/types/class_loader.rb +23 -19
- data/lib/puppet/pops/types/enumeration.rb +9 -26
- data/lib/puppet/pops/types/iterable.rb +308 -0
- data/lib/puppet/pops/types/recursion_guard.rb +82 -0
- data/lib/puppet/pops/types/type_acceptor.rb +25 -0
- data/lib/puppet/pops/types/type_asserter.rb +10 -9
- data/lib/puppet/pops/types/type_calculator.rb +138 -381
- data/lib/puppet/pops/types/type_factory.rb +91 -57
- data/lib/puppet/pops/types/type_formatter.rb +334 -0
- data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
- data/lib/puppet/pops/types/type_parser.rb +159 -112
- data/lib/puppet/pops/types/types.rb +2057 -1247
- data/lib/puppet/pops/utils.rb +11 -10
- data/lib/puppet/pops/validation.rb +11 -9
- data/lib/puppet/pops/validation/checker4_0.rb +83 -55
- data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
- data/lib/puppet/provider/aixobject.rb +1 -1
- data/lib/puppet/provider/augeas/augeas.rb +1 -1
- data/lib/puppet/provider/cron/crontab.rb +1 -1
- data/lib/puppet/provider/exec/windows.rb +1 -1
- data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
- data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
- data/lib/puppet/provider/package/appdmg.rb +3 -2
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +5 -8
- data/lib/puppet/provider/package/pip3.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +1 -1
- data/lib/puppet/provider/package/pkgdmg.rb +3 -2
- data/lib/puppet/provider/package/pkgng.rb +13 -4
- data/lib/puppet/provider/package/windows.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package/zypper.rb +19 -0
- data/lib/puppet/provider/service/debian.rb +2 -2
- data/lib/puppet/provider/service/launchd.rb +6 -18
- data/lib/puppet/provider/service/systemd.rb +9 -2
- data/lib/puppet/provider/sshkey/parsed.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +33 -58
- data/lib/puppet/provider/zfs/zfs.rb +1 -1
- data/lib/puppet/provider/zpool/zpool.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/providers.rb +1 -1
- data/lib/puppet/resource.rb +15 -12
- data/lib/puppet/resource/capability_finder.rb +20 -13
- data/lib/puppet/resource/catalog.rb +60 -3
- data/lib/puppet/resource/status.rb +11 -2
- data/lib/puppet/resource/type.rb +28 -38
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/settings/config_file.rb +1 -1
- data/lib/puppet/settings/environment_conf.rb +13 -5
- data/lib/puppet/ssl/certificate_factory.rb +3 -3
- data/lib/puppet/ssl/certificate_request.rb +4 -4
- data/lib/puppet/ssl/certificate_signer.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +16 -4
- data/lib/puppet/transaction.rb +15 -2
- data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
- data/lib/puppet/transaction/report.rb +31 -1
- data/lib/puppet/transaction/resource_harness.rb +0 -25
- data/lib/puppet/type.rb +11 -11
- data/lib/puppet/type/augeas.rb +1 -1
- data/lib/puppet/type/cron.rb +12 -12
- data/lib/puppet/type/file.rb +91 -39
- data/lib/puppet/type/file/checksum_value.rb +53 -0
- data/lib/puppet/type/file/content.rb +26 -111
- data/lib/puppet/type/file/data_sync.rb +84 -0
- data/lib/puppet/type/file/ensure.rb +17 -14
- data/lib/puppet/type/file/selcontext.rb +1 -1
- data/lib/puppet/type/file/source.rb +103 -18
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/type/interface.rb +8 -3
- data/lib/puppet/type/macauthorization.rb +1 -1
- data/lib/puppet/type/package.rb +6 -0
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/stage.rb +1 -1
- data/lib/puppet/type/user.rb +19 -17
- data/lib/puppet/type/yumrepo.rb +20 -0
- data/lib/puppet/util.rb +109 -22
- data/lib/puppet/util/autoload.rb +16 -11
- data/lib/puppet/util/checksums.rb +74 -31
- data/lib/puppet/util/execution.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +72 -0
- data/lib/puppet/util/log.rb +2 -0
- data/lib/puppet/util/logging.rb +43 -1
- data/lib/puppet/util/monkey_patches.rb +2 -2
- data/lib/puppet/util/multi_match.rb +51 -0
- data/lib/puppet/util/network_device/cisco/device.rb +10 -2
- data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
- data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
- data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
- data/lib/puppet/util/plist.rb +130 -0
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/run_mode.rb +2 -2
- data/lib/puppet/util/skip_tags.rb +9 -0
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +3 -3
- data/lib/puppet/util/windows/adsi.rb +4 -4
- data/lib/puppet/util/windows/api_types.rb +24 -18
- data/lib/puppet/util/windows/com.rb +3 -3
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +8 -8
- data/lib/puppet/util/windows/principal.rb +23 -14
- data/lib/puppet/util/windows/process.rb +78 -11
- data/lib/puppet/util/windows/registry.rb +1 -1
- data/lib/puppet/util/windows/root_certs.rb +5 -5
- data/lib/puppet/util/windows/security.rb +33 -35
- data/lib/puppet/util/windows/security_descriptor.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +42 -4
- data/lib/puppet/util/windows/taskscheduler.rb +15 -15
- data/lib/puppet/util/windows/user.rb +10 -10
- data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
- data/lib/puppet/vendor/pathspec/LICENSE +2 -2
- data/lib/puppet/vendor/pathspec/README.md +1 -1
- data/lib/puppet/vendor/rgen/README.rdoc +1 -1
- data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
- data/lib/puppet/version.rb +1 -1
- data/lib/semver.rb +17 -1
- data/man/man5/puppet.conf.5 +12 -12
- data/man/man8/extlookup2hiera.8 +1 -1
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-ca.8 +2 -2
- data/man/man8/puppet-catalog.8 +2 -2
- data/man/man8/puppet-cert.8 +2 -2
- data/man/man8/puppet-certificate.8 +2 -2
- data/man/man8/puppet-certificate_request.8 +2 -2
- data/man/man8/puppet-certificate_revocation_list.8 +2 -2
- data/man/man8/puppet-config.8 +3 -3
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +2 -2
- data/man/man8/puppet-facts.8 +2 -2
- data/man/man8/puppet-file.8 +2 -2
- data/man/man8/puppet-filebucket.8 +2 -2
- data/man/man8/puppet-help.8 +2 -2
- data/man/man8/puppet-inspect.8 +2 -2
- data/man/man8/puppet-key.8 +2 -2
- data/man/man8/puppet-man.8 +2 -2
- data/man/man8/puppet-master.8 +2 -2
- data/man/man8/puppet-module.8 +9 -9
- data/man/man8/puppet-node.8 +2 -2
- data/man/man8/puppet-parser.8 +2 -2
- data/man/man8/puppet-plugin.8 +2 -2
- data/man/man8/puppet-report.8 +2 -2
- data/man/man8/puppet-resource.8 +2 -2
- data/man/man8/puppet-resource_type.8 +2 -2
- data/man/man8/puppet-status.8 +3 -3
- data/man/man8/puppet.8 +1 -1
- data/spec/fixtures/module.tar.gz +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
- data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
- data/spec/fixtures/unit/module/trailing-comma.json +1 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
- data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
- data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
- data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
- data/spec/integration/defaults_spec.rb +14 -2
- data/spec/integration/file_system/uniquefile_spec.rb +29 -0
- data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
- data/spec/integration/node/environment_spec.rb +13 -0
- data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
- data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
- data/spec/integration/parser/undef_param_spec.rb +8 -0
- data/spec/integration/provider/yumrepo_spec.rb +1 -1
- data/spec/integration/test/test_helper_spec.rb +28 -0
- data/spec/integration/transaction/report_spec.rb +16 -0
- data/spec/integration/transaction_spec.rb +11 -0
- data/spec/integration/type/file_spec.rb +194 -4
- data/spec/integration/type/package_spec.rb +5 -1
- data/spec/integration/type/tidy_spec.rb +21 -9
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/principal_spec.rb +90 -4
- data/spec/integration/util/windows/process_spec.rb +31 -0
- data/spec/integration/util/windows/security_spec.rb +6 -6
- data/spec/integration/util/windows/user_spec.rb +1 -1
- data/spec/integration/util_spec.rb +49 -27
- data/spec/lib/puppet_spec/compiler.rb +17 -0
- data/spec/lib/puppet_spec/files.rb +2 -2
- data/spec/lib/puppet_spec/pops.rb +13 -0
- data/spec/shared_behaviours/iterative_functions.rb +1 -1
- data/spec/shared_contexts/types_setup.rb +96 -0
- data/spec/unit/agent_spec.rb +1 -0
- data/spec/unit/application/agent_spec.rb +10 -0
- data/spec/unit/application/apply_spec.rb +9 -0
- data/spec/unit/configurer/downloader_spec.rb +5 -5
- data/spec/unit/configurer_spec.rb +271 -39
- data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
- data/spec/unit/defaults_spec.rb +15 -0
- data/spec/unit/environments_spec.rb +24 -4
- data/spec/unit/face/parser_spec.rb +43 -2
- data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
- data/spec/unit/file_serving/metadata_spec.rb +50 -0
- data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
- data/spec/unit/file_system_spec.rb +26 -0
- data/spec/unit/functions/assert_type_spec.rb +36 -2
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +11 -3
- data/spec/unit/functions/lookup_spec.rb +58 -13
- data/spec/unit/functions/regsubst_spec.rb +1 -1
- data/spec/unit/functions/reverse_each_spec.rb +108 -0
- data/spec/unit/functions/step_spec.rb +113 -0
- data/spec/unit/functions/type_spec.rb +35 -0
- data/spec/unit/functions4_spec.rb +61 -5
- data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
- data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
- data/spec/unit/indirector/indirection_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +94 -32
- data/spec/unit/module_spec.rb +14 -0
- data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
- data/spec/unit/network/authstore_spec.rb +1 -1
- data/spec/unit/network/http/connection_spec.rb +1 -0
- data/spec/unit/network/http/pool_spec.rb +30 -0
- data/spec/unit/node_spec.rb +1 -1
- data/spec/unit/parser/compiler_spec.rb +16 -0
- data/spec/unit/parser/scope_spec.rb +28 -11
- data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
- data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
- data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
- data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
- data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
- data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
- data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
- data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
- data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
- data/spec/unit/pops/parser/parser_spec.rb +10 -0
- data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
- data/spec/unit/pops/types/iterable_spec.rb +262 -0
- data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
- data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
- data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
- data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
- data/spec/unit/pops/types/type_parser_spec.rb +58 -13
- data/spec/unit/pops/types/types_spec.rb +241 -0
- data/spec/unit/pops/validator/validator_spec.rb +100 -43
- data/spec/unit/provider/cron/parsed_spec.rb +1 -0
- data/spec/unit/provider/macauthorization_spec.rb +5 -2
- data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
- data/spec/unit/provider/package/appdmg_spec.rb +3 -3
- data/spec/unit/provider/package/dnf_spec.rb +16 -0
- data/spec/unit/provider/package/pip3_spec.rb +60 -42
- data/spec/unit/provider/package/pip_spec.rb +47 -34
- data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
- data/spec/unit/provider/package/pkgng_spec.rb +4 -2
- data/spec/unit/provider/package/yum_spec.rb +11 -0
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/launchd_spec.rb +17 -35
- data/spec/unit/provider/service/systemd_spec.rb +7 -0
- data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
- data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
- data/spec/unit/resource/capability_finder_spec.rb +28 -15
- data/spec/unit/resource/catalog_spec.rb +33 -1
- data/spec/unit/resource/type_spec.rb +149 -7
- data/spec/unit/resource_spec.rb +96 -57
- data/spec/unit/settings/environment_conf_spec.rb +18 -1
- data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
- data/spec/unit/transaction/report_spec.rb +27 -0
- data/spec/unit/transaction/resource_harness_spec.rb +0 -47
- data/spec/unit/transaction_spec.rb +5 -0
- data/spec/unit/type/file/checksum_spec.rb +6 -0
- data/spec/unit/type/file/checksum_value_spec.rb +286 -0
- data/spec/unit/type/file/content_spec.rb +12 -193
- data/spec/unit/type/file/source_spec.rb +211 -119
- data/spec/unit/type/file_spec.rb +133 -34
- data/spec/unit/type/interface_spec.rb +32 -0
- data/spec/unit/type/macauthorization_spec.rb +4 -1
- data/spec/unit/type/yumrepo_spec.rb +2 -2
- data/spec/unit/util/filetype_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +2 -2
- data/spec/unit/util/log/destinations_spec.rb +0 -2
- data/spec/unit/util/logging_spec.rb +69 -0
- data/spec/unit/util/multi_match_spec.rb +39 -0
- data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
- data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
- data/spec/unit/util/plist_spec.rb +110 -0
- data/spec/unit/util/resource_template_spec.rb +2 -2
- data/spec/unit/util/run_mode_spec.rb +27 -3
- data/spec/unit/util/windows/adsi_spec.rb +4 -4
- data/spec/unit/util/windows/api_types_spec.rb +42 -0
- data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
- data/spec/unit/util/windows/sid_spec.rb +1 -1
- data/spec/unit/util_spec.rb +123 -13
- data/tasks/cfpropertylist.rake +15 -0
- metadata +114 -26
- data/lib/puppet/vendor/load_plist.rb +0 -1
- data/lib/puppet/vendor/plist/CHANGELOG +0 -82
- data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
- data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
- data/lib/puppet/vendor/plist/README +0 -36
- data/lib/puppet/vendor/plist/Rakefile +0 -144
- data/lib/puppet/vendor/plist/docs/USAGE +0 -104
- data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
- data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
- data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
- data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
- data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
- data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
- data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
- data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
- data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
- data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
- data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
- data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
- data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
- data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
- data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
- data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -234,20 +234,28 @@ class Puppet::Util::NetworkDevice::Cisco::Device < Puppet::Util::NetworkDevice::
|
|
234
234
|
trunking[:mode] = :trunk
|
235
235
|
when "static access"
|
236
236
|
trunking[:mode] = :access
|
237
|
+
when "dynamic auto"
|
238
|
+
trunking[:mode] = 'dynamic auto'
|
239
|
+
when "dynamic desirable"
|
240
|
+
trunking[:mode] = 'dynamic desirable'
|
237
241
|
else
|
238
242
|
raise "Unknown switchport mode: #{$1} for #{interface}"
|
239
243
|
end
|
240
244
|
when /^Administrative Trunking Encapsulation:\s+(.*)$/
|
241
245
|
case $1
|
242
246
|
when "dot1q","isl"
|
243
|
-
trunking[:encapsulation] = $1.to_sym if trunking[:mode]
|
247
|
+
trunking[:encapsulation] = $1.to_sym if trunking[:mode] != :access
|
248
|
+
when "negotiate"
|
249
|
+
trunking[:encapsulation] = :negotiate
|
244
250
|
else
|
245
251
|
raise "Unknown switchport encapsulation: #{$1} for #{interface}"
|
246
252
|
end
|
247
253
|
when /^Access Mode VLAN:\s+(.*) \(\(Inactive\)\)$/
|
248
254
|
# nothing
|
249
255
|
when /^Access Mode VLAN:\s+(.*) \(.*\)$/
|
250
|
-
trunking[:
|
256
|
+
trunking[:access_vlan] = $1 if trunking[:mode] != :trunk
|
257
|
+
when /^Trunking Native Mode VLAN:\s+(.*) \(.*\)$/
|
258
|
+
trunking[:native_vlan] = $1 if trunking[:mode] != :access
|
251
259
|
when /^Trunking VLANs Enabled:\s+(.*)$/
|
252
260
|
next if trunking[:mode] == :access
|
253
261
|
vlans = $1
|
@@ -19,17 +19,18 @@ class Puppet::Util::NetworkDevice::Cisco::Interface
|
|
19
19
|
:description => [1, "description %s"],
|
20
20
|
:speed => [2, "speed %s"],
|
21
21
|
:duplex => [3, "duplex %s"],
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
22
|
+
:encapsulation => [4, "switchport trunk encapsulation %s"],
|
23
|
+
:mode => [5, "switchport mode %s"],
|
24
|
+
:access_vlan => [6, "switchport access vlan %s"],
|
25
|
+
:native_vlan => [7, "switchport trunk native vlan %s"],
|
26
|
+
:allowed_trunk_vlans => [8, "switchport trunk allowed vlan %s"],
|
27
|
+
:etherchannel => [9, ["channel-group %s", "port group %s"]],
|
28
|
+
:ipaddress => [10,
|
28
29
|
lambda do |prefix,ip,option|
|
29
30
|
ip.ipv6? ? "ipv6 address #{ip.to_s}/#{prefix} #{option}" :
|
30
31
|
"ip address #{ip.to_s} #{netmask(Socket::AF_INET,prefix)}"
|
31
32
|
end],
|
32
|
-
|
33
|
+
:ensure => [11, lambda { |value| value == :present ? "no shutdown" : "shutdown" } ]
|
33
34
|
}
|
34
35
|
|
35
36
|
def update(is={}, should={})
|
@@ -37,8 +38,20 @@ class Puppet::Util::NetworkDevice::Cisco::Interface
|
|
37
38
|
command("conf t")
|
38
39
|
command("interface #{name}")
|
39
40
|
|
40
|
-
# apply changes in a defined
|
41
|
+
# apply changes in a defined order for cisco IOS devices
|
41
42
|
[is.keys, should.keys].flatten.uniq.sort {|a,b| COMMANDS[a][0] <=> COMMANDS[b][0] }.each do |property|
|
43
|
+
# Work around for old documentation which shows :native_vlan used for access vlan
|
44
|
+
if property == :access_vlan and should[:mode] != :trunk and should[:access_vlan].nil?
|
45
|
+
should[:access_vlan] = should[:native_vlan]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Don't change non-operational mode parameters
|
49
|
+
next if property == :access_vlan and should[:mode] == :trunk
|
50
|
+
next if property == :native_vlan and should[:mode] == :access
|
51
|
+
next if property == :encapsulation and should[:mode] == :access
|
52
|
+
|
53
|
+
Puppet.debug("comparing #{property}: #{is[property]} == #{should[property]}")
|
54
|
+
|
42
55
|
# They're equal, so do nothing.
|
43
56
|
next if is[property] == should[property]
|
44
57
|
|
@@ -68,9 +68,13 @@ class Puppet::Util::NetworkDevice::Transport::Ssh < Puppet::Util::NetworkDevice:
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def close
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
begin
|
72
|
+
@channel.close if @channel
|
73
|
+
@channel = nil
|
74
|
+
@ssh.close if @ssh
|
75
|
+
rescue IOError
|
76
|
+
Puppet.debug "device terminated ssh session impolitely"
|
77
|
+
end
|
74
78
|
end
|
75
79
|
|
76
80
|
def expect(prompt)
|
@@ -1,44 +1,47 @@
|
|
1
1
|
require 'puppet/util/network_device'
|
2
2
|
require 'puppet/util/network_device/transport'
|
3
3
|
require 'puppet/util/network_device/transport/base'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
def close
|
23
|
-
@telnet.close if @telnet
|
24
|
-
@telnet = nil
|
25
|
-
end
|
26
|
-
|
27
|
-
def expect(prompt)
|
28
|
-
@telnet.waitfor(prompt) do |out|
|
29
|
-
yield out if block_given?
|
4
|
+
|
5
|
+
if Puppet.features.telnet?
|
6
|
+
require 'net/telnet'
|
7
|
+
|
8
|
+
class Puppet::Util::NetworkDevice::Transport::Telnet < Puppet::Util::NetworkDevice::Transport::Base
|
9
|
+
def initialize(verbose = false)
|
10
|
+
super()
|
11
|
+
@verbose = verbose
|
12
|
+
end
|
13
|
+
|
14
|
+
def handles_login?
|
15
|
+
false
|
16
|
+
end
|
17
|
+
|
18
|
+
def connect
|
19
|
+
@telnet = Net::Telnet::new("Host" => host, "Port" => port || 23,
|
20
|
+
"Timeout" => 10,
|
21
|
+
"Prompt" => default_prompt)
|
30
22
|
end
|
31
|
-
end
|
32
23
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
yield output if block_given?
|
24
|
+
def close
|
25
|
+
@telnet.close if @telnet
|
26
|
+
@telnet = nil
|
37
27
|
end
|
38
|
-
end
|
39
28
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
29
|
+
def expect(prompt)
|
30
|
+
@telnet.waitfor(prompt) do |out|
|
31
|
+
yield out if block_given?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def command(cmd, options = {})
|
36
|
+
send(cmd)
|
37
|
+
expect(options[:prompt] || default_prompt) do |output|
|
38
|
+
yield output if block_given?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def send(line)
|
43
|
+
Puppet.debug("telnet: send #{line}") if @verbose
|
44
|
+
@telnet.puts(line)
|
45
|
+
end
|
46
|
+
end
|
44
47
|
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'cfpropertylist'
|
2
|
+
require 'puppet/util/execution'
|
3
|
+
|
4
|
+
module Puppet::Util::Plist
|
5
|
+
|
6
|
+
class FormatError < RuntimeError; end
|
7
|
+
|
8
|
+
# So I don't have to prepend every method name with 'self.' Most of the
|
9
|
+
# methods are going to be Provider methods (as opposed to methods of the
|
10
|
+
# INSTANCE of the provider).
|
11
|
+
class << self
|
12
|
+
# Defines the magic number for binary plists
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
def binary_plist_magic_number
|
16
|
+
"bplist00"
|
17
|
+
end
|
18
|
+
|
19
|
+
# Defines a default doctype string that should be at the top of most plist
|
20
|
+
# files. Useful if we need to modify an invalid doctype string in memory.
|
21
|
+
# In version 10.9 and lower of OS X the plist at
|
22
|
+
# /System/Library/LaunchDaemons/org.ntp.ntpd.plist had an invalid doctype
|
23
|
+
# string. This corrects for that.
|
24
|
+
def plist_xml_doctype
|
25
|
+
'<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">'
|
26
|
+
end
|
27
|
+
|
28
|
+
# Read a plist file, whether its format is XML or in Apple's "binary1"
|
29
|
+
# format, using the CFPropertyList gem.
|
30
|
+
def read_plist_file(file_path)
|
31
|
+
# We can't really read the file until we know the source encoding in
|
32
|
+
# Ruby 1.9.x, so we use the magic number to detect it.
|
33
|
+
# NOTE: We used IO.read originally to be Ruby 1.8.x compatible.
|
34
|
+
if read_file_with_offset(file_path, binary_plist_magic_number.length) == binary_plist_magic_number
|
35
|
+
plist_obj = new_cfpropertylist(:file => file_path)
|
36
|
+
convert_cfpropertylist_to_native_types(plist_obj)
|
37
|
+
else
|
38
|
+
plist_data = open_file_with_args(file_path, "r:UTF-8")
|
39
|
+
plist = parse_plist(plist_data, file_path)
|
40
|
+
return plist if plist
|
41
|
+
|
42
|
+
Puppet.debug "Plist #{file_path} ill-formatted, converting with plutil"
|
43
|
+
begin
|
44
|
+
plist = Puppet::Util::Execution.execute(['/usr/bin/plutil', '-convert', 'xml1', '-o', '/dev/stdout', file_path],
|
45
|
+
{:failonfail => true, :combine => true})
|
46
|
+
return parse_plist(plist)
|
47
|
+
rescue Puppet::ExecutionFailure => detail
|
48
|
+
Puppet.warning("Cannot read file #{path}; Puppet is skipping it.\n" + "Details: #{detail}")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Read plist text using the CFPropertyList gem.
|
54
|
+
def parse_plist(plist_data, file_path = '')
|
55
|
+
bad_xml_doctype = /^.*<!DOCTYPE plist PUBLIC -\/\/Apple Computer.*$/
|
56
|
+
if plist_data =~ bad_xml_doctype
|
57
|
+
plist_data.gsub!( bad_xml_doctype, plist_xml_doctype )
|
58
|
+
Puppet.debug("Had to fix plist with incorrect DOCTYPE declaration: #{file_path}")
|
59
|
+
end
|
60
|
+
|
61
|
+
begin
|
62
|
+
plist_obj = new_cfpropertylist(:data => plist_data)
|
63
|
+
rescue CFFormatError => e
|
64
|
+
Puppet.debug "Failed with #{e.class} on #{file_path}: #{e.inspect}"
|
65
|
+
return nil
|
66
|
+
end
|
67
|
+
convert_cfpropertylist_to_native_types(plist_obj)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Helper method to assist in reading a file. It's its own method for
|
71
|
+
# stubbing purposes
|
72
|
+
#
|
73
|
+
# @api private
|
74
|
+
def open_file_with_args(file, args)
|
75
|
+
File.open(file, args).read
|
76
|
+
end
|
77
|
+
|
78
|
+
# Helper method to assist in generating a new CFPropertList Plist. It's
|
79
|
+
# its own method for stubbing purposes
|
80
|
+
#
|
81
|
+
# @api private
|
82
|
+
def new_cfpropertylist(plist_opts)
|
83
|
+
CFPropertyList::List.new(plist_opts)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Helper method to assist in converting a native CFPropertList object to a
|
87
|
+
# native Ruby object (hash). It's its own method for stubbing purposes
|
88
|
+
#
|
89
|
+
# @api private
|
90
|
+
def convert_cfpropertylist_to_native_types(plist_obj)
|
91
|
+
CFPropertyList.native_types(plist_obj.value)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Helper method to assist in reading a file with an offset value. It's its
|
95
|
+
# own method for stubbing purposes
|
96
|
+
#
|
97
|
+
# @api private
|
98
|
+
def read_file_with_offset(file_path, offset)
|
99
|
+
IO.read(file_path, offset)
|
100
|
+
end
|
101
|
+
|
102
|
+
def to_format(format)
|
103
|
+
if format.to_sym == :xml
|
104
|
+
plist_format = CFPropertyList::List::FORMAT_XML
|
105
|
+
elsif format.to_sym == :binary
|
106
|
+
plist_format = CFPropertyList::List::FORMAT_BINARY
|
107
|
+
else
|
108
|
+
raise FormatError.new "Unknown plist format #{format}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# This method will write a plist file using a specified format (or XML
|
113
|
+
# by default)
|
114
|
+
def write_plist_file(plist, file_path, format = :xml)
|
115
|
+
begin
|
116
|
+
plist_to_save = CFPropertyList::List.new
|
117
|
+
plist_to_save.value = CFPropertyList.guess(plist)
|
118
|
+
plist_to_save.save(file_path, to_format(format))
|
119
|
+
rescue IOError => e
|
120
|
+
Puppet.error("Unable to write the file #{file_path}. #{e.inspect}")
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def dump_plist(plist_data, format = :xml)
|
125
|
+
plist_to_save = CFPropertyList::List.new
|
126
|
+
plist_to_save.value = CFPropertyList.guess(plist_data)
|
127
|
+
plist_to_save.to_str(to_format(format))
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -40,7 +40,7 @@ class Puppet::Util::ResourceTemplate
|
|
40
40
|
|
41
41
|
def evaluate
|
42
42
|
set_resource_variables
|
43
|
-
ERB.new(
|
43
|
+
ERB.new(Puppet::FileSystem.read(@file, :encoding => 'utf-8'), 0, "-").result(binding)
|
44
44
|
end
|
45
45
|
|
46
46
|
def initialize(file, resource)
|
data/lib/puppet/util/run_mode.rb
CHANGED
@@ -44,10 +44,10 @@ module Puppet
|
|
44
44
|
# select the system or the user directory depending on the context of
|
45
45
|
# this process. The most common use is determining filesystem path
|
46
46
|
# values for confdir and vardir. The intended semantics are:
|
47
|
-
# {
|
47
|
+
# {https://projects.puppetlabs.com/issues/16637 #16637} for Puppet 3.x
|
48
48
|
#
|
49
49
|
# @todo this code duplicates {Puppet::Settings#which\_configuration\_file}
|
50
|
-
# as described in {
|
50
|
+
# as described in {https://projects.puppetlabs.com/issues/16637 #16637}
|
51
51
|
def which_dir( system, user )
|
52
52
|
if Puppet.features.root?
|
53
53
|
File.expand_path(system)
|
@@ -3,7 +3,7 @@
|
|
3
3
|
# Represents an access control entry, which grants or denies a subject,
|
4
4
|
# identified by a SID, rights to a securable object.
|
5
5
|
#
|
6
|
-
# @see
|
6
|
+
# @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa374868(v=vs.85).aspx
|
7
7
|
# @api private
|
8
8
|
class Puppet::Util::Windows::AccessControlEntry
|
9
9
|
require 'puppet/util/windows/security'
|
@@ -2,7 +2,7 @@
|
|
2
2
|
#
|
3
3
|
# Represents a list of access control entries (ACEs).
|
4
4
|
#
|
5
|
-
# @see
|
5
|
+
# @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa374872(v=vs.85).aspx
|
6
6
|
# @api private
|
7
7
|
class Puppet::Util::Windows::AccessControlList
|
8
8
|
include Enumerable
|
@@ -76,7 +76,7 @@ class Puppet::Util::Windows::AccessControlList
|
|
76
76
|
else
|
77
77
|
new_ace.sid = new_sid
|
78
78
|
|
79
|
-
prepend_needed = old_sid ==
|
79
|
+
prepend_needed = old_sid == Puppet::Util::Windows::SID::LocalSystem
|
80
80
|
end
|
81
81
|
end
|
82
82
|
new_aces << new_ace
|
@@ -87,7 +87,7 @@ class Puppet::Util::Windows::AccessControlList
|
|
87
87
|
if prepend_needed
|
88
88
|
mask = Puppet::Util::Windows::File::STANDARD_RIGHTS_ALL | Puppet::Util::Windows::File::SPECIFIC_RIGHTS_ALL
|
89
89
|
ace = Puppet::Util::Windows::AccessControlEntry.new(
|
90
|
-
|
90
|
+
Puppet::Util::Windows::SID::LocalSystem,
|
91
91
|
mask)
|
92
92
|
@aces << ace
|
93
93
|
end
|
@@ -96,7 +96,7 @@ module Puppet::Util::Windows::ADSI
|
|
96
96
|
|
97
97
|
ffi_convention :stdcall
|
98
98
|
|
99
|
-
#
|
99
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx
|
100
100
|
# BOOL WINAPI GetComputerName(
|
101
101
|
# _Out_ LPTSTR lpBuffer,
|
102
102
|
# _Inout_ LPDWORD lpnSize
|
@@ -300,7 +300,7 @@ module Puppet::Util::Windows::ADSI
|
|
300
300
|
new(name, Puppet::Util::Windows::ADSI.create(name, 'user'))
|
301
301
|
end
|
302
302
|
|
303
|
-
# UNLEN from lmcons.h -
|
303
|
+
# UNLEN from lmcons.h - https://stackoverflow.com/a/2155176
|
304
304
|
MAX_USERNAME_LENGTH = 256
|
305
305
|
def self.current_user_name
|
306
306
|
user_name = ''
|
@@ -361,7 +361,7 @@ module Puppet::Util::Windows::ADSI
|
|
361
361
|
|
362
362
|
ffi_convention :stdcall
|
363
363
|
|
364
|
-
#
|
364
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724432(v=vs.85).aspx
|
365
365
|
# BOOL WINAPI GetUserName(
|
366
366
|
# _Out_ LPTSTR lpBuffer,
|
367
367
|
# _Inout_ LPDWORD lpnSize
|
@@ -376,7 +376,7 @@ module Puppet::Util::Windows::ADSI
|
|
376
376
|
begin
|
377
377
|
Puppet::Util::Windows::ADSI.wmi_connection.Delete("Win32_UserProfile.SID='#{sid}'")
|
378
378
|
rescue WIN32OLERuntimeError => e
|
379
|
-
#
|
379
|
+
# https://social.technet.microsoft.com/Forums/en/ITCG/thread/0f190051-ac96-4bf1-a47f-6b864bfacee5
|
380
380
|
# Prior to Vista SP1, there's no builtin way to programmatically
|
381
381
|
# delete user profiles (except for delprof.exe). So try to delete
|
382
382
|
# but warn if we fail
|
@@ -19,7 +19,6 @@ module Puppet::Util::Windows::APITypes
|
|
19
19
|
|
20
20
|
class ::FFI::Pointer
|
21
21
|
NULL_HANDLE = 0
|
22
|
-
NULL_TERMINATOR_WCHAR = 0
|
23
22
|
|
24
23
|
def self.from_string_to_wide_string(str, &block)
|
25
24
|
str = Puppet::Util::Windows::String.wide_string(str)
|
@@ -52,6 +51,7 @@ module Puppet::Util::Windows::APITypes
|
|
52
51
|
|
53
52
|
alias_method :read_wchar, :read_uint16
|
54
53
|
alias_method :read_word, :read_uint16
|
54
|
+
alias_method :read_array_of_wchar, :read_array_of_uint16
|
55
55
|
|
56
56
|
def read_wide_string(char_length, dst_encoding = Encoding::UTF_8)
|
57
57
|
# char_length is number of wide chars (typically excluding NULLs), *not* bytes
|
@@ -59,18 +59,24 @@ module Puppet::Util::Windows::APITypes
|
|
59
59
|
str.encode(dst_encoding)
|
60
60
|
end
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
62
|
+
# @param max_char_length [Integer] Maximum number of wide chars tp return (typically excluding NULLs), *not* bytes
|
63
|
+
# @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
|
64
|
+
# null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
|
65
|
+
# null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
|
66
|
+
def read_arbitrary_wide_string_up_to(max_char_length = 512, null_terminator = :single_null)
|
67
|
+
if null_terminator != :single_null && null_terminator != :double_null
|
68
|
+
raise "Unable to read wide strings with #{null_terminator} terminal nulls"
|
69
|
+
end
|
66
70
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
71
|
+
terminator_width = null_terminator == :single_null ? 1 : 2
|
72
|
+
reader_method = null_terminator == :single_null ? :get_uint16 : :get_uint32
|
73
|
+
|
74
|
+
# Look for a null terminating characters; if found, read up to that null (exclusive)
|
75
|
+
(0...max_char_length - terminator_width).each do |i|
|
76
|
+
return read_wide_string(i) if send(reader_method, (i * 2)) == 0
|
72
77
|
end
|
73
78
|
|
79
|
+
# String is longer than the max; read just to the max
|
74
80
|
read_wide_string(max_char_length)
|
75
81
|
end
|
76
82
|
|
@@ -113,10 +119,10 @@ module Puppet::Util::Windows::APITypes
|
|
113
119
|
# https://github.com/ffi/ffi/wiki/Types
|
114
120
|
|
115
121
|
# Windows - Common Data Types
|
116
|
-
#
|
122
|
+
# https://msdn.microsoft.com/en-us/library/cc230309.aspx
|
117
123
|
|
118
124
|
# Windows Data Types
|
119
|
-
#
|
125
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
|
120
126
|
|
121
127
|
FFI.typedef :uint16, :word
|
122
128
|
FFI.typedef :uint32, :dword
|
@@ -156,7 +162,7 @@ module Puppet::Util::Windows::APITypes
|
|
156
162
|
FFI.typedef :int32, :win32_long
|
157
163
|
# FFI bool can be only 1 byte at times,
|
158
164
|
# Win32 BOOL is a signed int, and is always 4 bytes, even on x64
|
159
|
-
#
|
165
|
+
# https://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
|
160
166
|
FFI.typedef :int32, :win32_bool
|
161
167
|
|
162
168
|
# Same as a LONG, a 32-bit signed integer
|
@@ -173,7 +179,7 @@ module Puppet::Util::Windows::APITypes
|
|
173
179
|
module ::FFI::WIN32
|
174
180
|
extend ::FFI::Library
|
175
181
|
|
176
|
-
#
|
182
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
|
177
183
|
# typedef struct _GUID {
|
178
184
|
# DWORD Data1;
|
179
185
|
# WORD Data2;
|
@@ -204,7 +210,7 @@ module Puppet::Util::Windows::APITypes
|
|
204
210
|
def ==(other) Windows.memcmp(other, self, size) == 0 end
|
205
211
|
end
|
206
212
|
|
207
|
-
#
|
213
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
|
208
214
|
# typedef struct _SYSTEMTIME {
|
209
215
|
# WORD wYear;
|
210
216
|
# WORD wMonth;
|
@@ -245,21 +251,21 @@ module Puppet::Util::Windows::APITypes
|
|
245
251
|
|
246
252
|
ffi_convention :stdcall
|
247
253
|
|
248
|
-
#
|
254
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
|
249
255
|
# HLOCAL WINAPI LocalFree(
|
250
256
|
# _In_ HLOCAL hMem
|
251
257
|
# );
|
252
258
|
ffi_lib :kernel32
|
253
259
|
attach_function :LocalFree, [:handle], :handle
|
254
260
|
|
255
|
-
#
|
261
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
|
256
262
|
# BOOL WINAPI CloseHandle(
|
257
263
|
# _In_ HANDLE hObject
|
258
264
|
# );
|
259
265
|
ffi_lib :kernel32
|
260
266
|
attach_function_private :CloseHandle, [:handle], :win32_bool
|
261
267
|
|
262
|
-
#
|
268
|
+
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
|
263
269
|
# void CoTaskMemFree(
|
264
270
|
# _In_opt_ LPVOID pv
|
265
271
|
# );
|