chef 16.0.287 → 16.2.73
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 +2 -3
- data/README.md +3 -3
- data/Rakefile +3 -2
- data/chef.gemspec +5 -5
- data/lib/chef/application/apply.rb +2 -1
- data/lib/chef/application/base.rb +1 -1
- data/lib/chef/application/client.rb +1 -1
- data/lib/chef/application/windows_service_manager.rb +1 -1
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +1 -1
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +2 -2
- data/lib/chef/chef_fs/file_system/repository/directory.rb +1 -1
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +1 -1
- data/lib/chef/chef_fs/path_utils.rb +4 -4
- data/lib/chef/cookbook/chefignore.rb +1 -1
- data/lib/chef/cookbook/file_system_file_vendor.rb +1 -1
- data/lib/chef/cookbook/metadata.rb +2 -2
- data/lib/chef/cookbook_loader.rb +1 -1
- data/lib/chef/cookbook_manifest.rb +1 -1
- data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
- data/lib/chef/cookbook_version.rb +4 -4
- data/lib/chef/data_bag.rb +4 -4
- data/lib/chef/data_collector.rb +1 -1
- data/lib/chef/data_collector/error_handlers.rb +1 -1
- data/lib/chef/decorator/lazy_array.rb +2 -2
- data/lib/chef/deprecated.rb +4 -0
- data/lib/chef/digester.rb +5 -4
- data/lib/chef/dsl/declare_resource.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +1 -1
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +1 -1
- data/lib/chef/file_access_control.rb +1 -1
- data/lib/chef/file_access_control/windows.rb +2 -2
- data/lib/chef/file_content_management/deploy/mv_unix.rb +1 -1
- data/lib/chef/formatters/base.rb +1 -1
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +1 -1
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +2 -2
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +7 -7
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +3 -3
- data/lib/chef/http.rb +19 -4
- data/lib/chef/http/decompressor.rb +1 -1
- data/lib/chef/http/http_request.rb +1 -1
- data/lib/chef/http/json_output.rb +1 -1
- data/lib/chef/http/ssl_policies.rb +18 -0
- data/lib/chef/json_compat.rb +1 -1
- data/lib/chef/key.rb +1 -1
- data/lib/chef/knife.rb +2 -2
- data/lib/chef/knife/bootstrap.rb +20 -14
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
- data/lib/chef/knife/bootstrap/client_builder.rb +1 -1
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +9 -9
- data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +3 -1
- data/lib/chef/knife/client_bulk_delete.rb +1 -1
- data/lib/chef/knife/config_get.rb +1 -1
- data/lib/chef/knife/config_use_profile.rb +15 -5
- data/lib/chef/knife/cookbook_delete.rb +1 -1
- data/lib/chef/knife/cookbook_upload.rb +1 -4
- data/lib/chef/knife/core/bootstrap_context.rb +1 -1
- data/lib/chef/knife/core/cookbook_scm_repo.rb +1 -1
- data/lib/chef/knife/core/hashed_command_loader.rb +1 -1
- data/lib/chef/knife/core/node_presenter.rb +1 -1
- data/lib/chef/knife/core/status_presenter.rb +1 -1
- data/lib/chef/knife/core/subcommand_loader.rb +1 -1
- data/lib/chef/knife/core/windows_bootstrap_context.rb +19 -4
- data/lib/chef/knife/data_bag_create.rb +1 -1
- data/lib/chef/knife/key_create_base.rb +1 -1
- data/lib/chef/knife/key_edit_base.rb +1 -1
- data/lib/chef/knife/node_bulk_delete.rb +1 -1
- data/lib/chef/knife/node_run_list_remove.rb +1 -1
- data/lib/chef/knife/role_bulk_delete.rb +1 -1
- data/lib/chef/knife/ssh.rb +2 -2
- data/lib/chef/knife/supermarket_share.rb +1 -1
- data/lib/chef/knife/supermarket_unshare.rb +1 -1
- data/lib/chef/log.rb +1 -1
- data/lib/chef/mixin/api_version_request_handling.rb +1 -1
- data/lib/chef/mixin/checksum.rb +0 -1
- data/lib/chef/mixin/openssl_helper.rb +4 -4
- data/lib/chef/mixin/properties.rb +2 -2
- data/lib/chef/mixin/securable.rb +2 -2
- data/lib/chef/mixin/shell_out.rb +1 -1
- data/lib/chef/node/attribute.rb +2 -2
- data/lib/chef/node/immutable_collections.rb +1 -1
- data/lib/chef/policy_builder/policyfile.rb +1 -1
- data/lib/chef/powershell.rb +1 -1
- data/lib/chef/property.rb +2 -2
- data/lib/chef/provider.rb +3 -3
- data/lib/chef/provider/batch.rb +3 -10
- data/lib/chef/provider/cron.rb +2 -14
- data/lib/chef/provider/directory.rb +1 -1
- data/lib/chef/provider/execute.rb +2 -1
- data/lib/chef/provider/file.rb +1 -1
- data/lib/chef/provider/group/dscl.rb +2 -2
- data/lib/chef/provider/group/windows.rb +1 -1
- data/lib/chef/provider/ifconfig.rb +7 -7
- data/lib/chef/provider/launchd.rb +11 -9
- data/lib/chef/provider/mount/aix.rb +1 -1
- data/lib/chef/provider/mount/windows.rb +2 -2
- data/lib/chef/provider/noop.rb +1 -1
- data/lib/chef/provider/package/cab.rb +1 -1
- data/lib/chef/provider/package/chocolatey.rb +1 -1
- data/lib/chef/provider/package/dpkg.rb +1 -1
- data/lib/chef/provider/package/openbsd.rb +1 -1
- data/lib/chef/provider/package/portage.rb +3 -2
- data/lib/chef/provider/package/powershell.rb +6 -2
- data/lib/chef/provider/package/rubygems.rb +3 -3
- data/lib/chef/provider/package/snap.rb +96 -27
- data/lib/chef/provider/package/windows.rb +2 -2
- data/lib/chef/provider/package/windows/msi.rb +3 -3
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +1 -1
- data/lib/chef/provider/package/yum.rb +1 -1
- data/lib/chef/provider/package/yum/yum_cache.rb +1 -1
- data/lib/chef/provider/powershell_script.rb +11 -15
- data/lib/chef/provider/remote_directory.rb +2 -2
- data/lib/chef/provider/remote_file/http.rb +4 -1
- data/lib/chef/provider/script.rb +4 -75
- data/lib/chef/provider/service/arch.rb +2 -2
- data/lib/chef/provider/service/debian.rb +2 -2
- data/lib/chef/provider/service/macosx.rb +9 -0
- data/lib/chef/provider/service/openbsd.rb +4 -4
- data/lib/chef/provider/service/redhat.rb +1 -1
- data/lib/chef/provider/service/upstart.rb +1 -1
- data/lib/chef/provider/service/windows.rb +1 -1
- data/lib/chef/provider/subversion.rb +2 -2
- data/lib/chef/provider/user/aix.rb +1 -1
- data/lib/chef/provider/user/dscl.rb +6 -6
- data/lib/chef/provider/user/linux.rb +3 -3
- data/lib/chef/provider/user/mac.rb +15 -11
- data/lib/chef/provider/windows_script.rb +87 -25
- data/lib/chef/provider/windows_task.rb +4 -2
- data/lib/chef/provider/zypper_repository.rb +30 -10
- data/lib/chef/resource.rb +25 -14
- data/lib/chef/resource/alternatives.rb +1 -1
- data/lib/chef/resource/apt_package.rb +1 -1
- data/lib/chef/resource/archive_file.rb +28 -8
- data/lib/chef/resource/bash.rb +0 -1
- data/lib/chef/resource/batch.rb +4 -2
- data/lib/chef/resource/chef_client_scheduled_task.rb +13 -1
- data/lib/chef/resource/chef_gem.rb +57 -21
- data/lib/chef/resource/chef_handler.rb +2 -2
- data/lib/chef/resource/chef_vault_secret.rb +1 -1
- data/lib/chef/resource/cron/_cron_shared.rb +98 -0
- data/lib/chef/resource/cron/cron.rb +46 -0
- data/lib/chef/resource/{cron_d.rb → cron/cron_d.rb} +7 -87
- data/lib/chef/resource/cron_access.rb +11 -3
- data/lib/chef/resource/csh.rb +0 -1
- data/lib/chef/resource/dmg_package.rb +2 -2
- data/lib/chef/resource/execute.rb +478 -8
- data/lib/chef/resource/file.rb +10 -8
- data/lib/chef/resource/freebsd_package.rb +1 -1
- data/lib/chef/resource/gem_package.rb +35 -2
- data/lib/chef/resource/helpers/cron_validations.rb +6 -3
- data/lib/chef/resource/homebrew_package.rb +30 -1
- data/lib/chef/resource/homebrew_update.rb +107 -0
- data/lib/chef/resource/hostname.rb +7 -20
- data/lib/chef/resource/kernel_module.rb +14 -1
- data/lib/chef/resource/launchd.rb +1 -1
- data/lib/chef/resource/locale.rb +3 -3
- data/lib/chef/resource/macos_userdefaults.rb +11 -6
- data/lib/chef/resource/mount.rb +1 -1
- data/lib/chef/resource/perl.rb +0 -1
- data/lib/chef/resource/plist.rb +23 -4
- data/lib/chef/resource/powershell_script.rb +4 -2
- data/lib/chef/resource/python.rb +0 -1
- data/lib/chef/resource/remote_file.rb +26 -10
- data/lib/chef/resource/ruby.rb +0 -1
- data/lib/chef/resource/scm/git.rb +1 -1
- data/lib/chef/resource/ssh_known_hosts_entry.rb +15 -0
- data/lib/chef/resource/sudo.rb +29 -2
- data/lib/chef/resource/swap_file.rb +17 -0
- data/lib/chef/resource/template.rb +1 -1
- data/lib/chef/resource/timezone.rb +15 -0
- data/lib/chef/resource/windows_ad_join.rb +30 -1
- data/lib/chef/resource/windows_audit_policy.rb +227 -0
- data/lib/chef/resource/windows_auto_run.rb +11 -0
- data/lib/chef/resource/windows_certificate.rb +27 -1
- data/lib/chef/resource/windows_dfs_server.rb +1 -1
- data/lib/chef/resource/windows_font.rb +3 -3
- data/lib/chef/resource/windows_package.rb +1 -1
- data/lib/chef/resource/windows_pagefile.rb +2 -2
- data/lib/chef/resource/windows_script.rb +2 -16
- data/lib/chef/resource/windows_security_policy.rb +47 -16
- data/lib/chef/resource/windows_shortcut.rb +1 -2
- data/lib/chef/resource/windows_task.rb +10 -10
- data/lib/chef/resource/windows_user_privilege.rb +70 -5
- data/lib/chef/resource/yum_repository.rb +9 -9
- data/lib/chef/resource_inspector.rb +4 -3
- data/lib/chef/resources.rb +4 -2
- data/lib/chef/run_context/cookbook_compiler.rb +1 -1
- data/lib/chef/search/query.rb +1 -1
- data/lib/chef/shell/ext.rb +1 -1
- data/lib/chef/util/diff.rb +2 -2
- data/lib/chef/util/windows/net_user.rb +1 -1
- data/lib/chef/util/windows/volume.rb +1 -1
- data/lib/chef/version.rb +1 -1
- data/lib/chef/win32/api.rb +2 -2
- data/lib/chef/win32/api/error.rb +3 -1
- data/lib/chef/win32/api/file.rb +1 -1
- data/lib/chef/win32/api/net.rb +1 -0
- data/lib/chef/win32/file.rb +1 -1
- data/lib/chef/win32/mutex.rb +1 -1
- data/lib/chef/win32/net.rb +1 -0
- data/lib/chef/win32/registry.rb +2 -2
- data/lib/chef/win32/security.rb +1 -1
- data/lib/chef/win32/security/sid.rb +4 -4
- data/spec/data/lwrp/providers/buck_passer.rb +1 -1
- data/spec/data/lwrp/providers/buck_passer_2.rb +1 -1
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +1 -1
- data/spec/functional/knife/configure_spec.rb +1 -1
- data/spec/functional/resource/aix_service_spec.rb +10 -1
- data/spec/functional/resource/aixinit_service_spec.rb +1 -1
- data/spec/functional/resource/bash_spec.rb +3 -2
- data/spec/functional/resource/bff_spec.rb +1 -1
- data/spec/functional/resource/chocolatey_package_spec.rb +4 -0
- data/spec/functional/resource/cron_spec.rb +20 -1
- data/spec/functional/resource/dnf_package_spec.rb +6 -3
- data/spec/functional/resource/execute_spec.rb +1 -1
- data/spec/functional/resource/git_spec.rb +6 -6
- data/spec/functional/resource/group_spec.rb +9 -1
- data/spec/functional/resource/ifconfig_spec.rb +9 -1
- data/spec/functional/resource/insserv_spec.rb +3 -2
- data/spec/functional/resource/launchd_spec.rb +232 -0
- data/spec/functional/resource/link_spec.rb +2 -5
- data/spec/functional/resource/mount_spec.rb +9 -1
- data/spec/functional/resource/msu_package_spec.rb +9 -3
- data/spec/functional/resource/powershell_script_spec.rb +4 -4
- data/spec/functional/resource/remote_file_spec.rb +8 -8
- data/spec/functional/resource/rpm_spec.rb +1 -1
- data/spec/functional/resource/timezone_spec.rb +2 -0
- data/spec/functional/resource/windows_package_spec.rb +0 -1
- data/spec/functional/resource/windows_path_spec.rb +4 -0
- data/spec/functional/resource/windows_security_policy_spec.rb +0 -1
- data/spec/functional/resource/windows_service_spec.rb +4 -0
- data/spec/functional/resource/windows_task_spec.rb +16 -15
- data/spec/functional/resource/windows_user_privilege_spec.rb +0 -1
- data/spec/functional/resource/yum_package_spec.rb +4 -1
- data/spec/functional/resource/zypper_package_spec.rb +4 -1
- data/spec/functional/shell_spec.rb +0 -1
- data/spec/functional/win32/crypto_spec.rb +1 -1
- data/spec/integration/knife/config_use_profile_spec.rb +55 -2
- data/spec/integration/knife/cookbook_upload_spec.rb +1 -1
- data/spec/integration/knife/data_bag_from_file_spec.rb +1 -1
- data/spec/integration/knife/environment_from_file_spec.rb +1 -1
- data/spec/integration/knife/node_from_file_spec.rb +1 -1
- data/spec/integration/knife/role_from_file_spec.rb +1 -1
- data/spec/integration/recipes/recipe_dsl_spec.rb +4 -0
- data/spec/integration/recipes/resource_load_spec.rb +2 -2
- data/spec/support/chef_helpers.rb +1 -1
- data/spec/support/platform_helpers.rb +1 -1
- data/spec/support/platforms/win32/spec_service.rb +1 -1
- data/spec/support/shared/functional/execute_resource.rb +1 -1
- data/spec/support/shared/functional/securable_resource.rb +1 -2
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +0 -1
- data/spec/support/shared/functional/windows_script.rb +3 -3
- data/spec/support/shared/unit/execute_resource.rb +1 -1
- data/spec/support/shared/unit/provider/file.rb +12 -8
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +4 -4
- data/spec/unit/application/solo_spec.rb +4 -2
- data/spec/unit/application_spec.rb +7 -0
- data/spec/unit/chef_fs/config_spec.rb +2 -2
- data/spec/unit/chef_fs/diff_spec.rb +8 -8
- data/spec/unit/client_spec.rb +4 -1
- data/spec/unit/cookbook/synchronizer_spec.rb +26 -24
- data/spec/unit/data_bag_spec.rb +6 -3
- data/spec/unit/decorator_spec.rb +23 -23
- data/spec/unit/environment_spec.rb +5 -1
- data/spec/unit/guard_interpreter_spec.rb +1 -1
- data/spec/unit/http/api_versions_spec.rb +1 -1
- data/spec/unit/http/ssl_policies_spec.rb +20 -0
- data/spec/unit/knife/bootstrap_spec.rb +3 -2
- data/spec/unit/knife/cookbook_download_spec.rb +2 -2
- data/spec/unit/knife/cookbook_show_spec.rb +6 -7
- data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +7 -1
- data/spec/unit/knife/data_bag_edit_spec.rb +1 -1
- data/spec/unit/lwrp_spec.rb +5 -2
- data/spec/unit/mixin/openssl_helper_spec.rb +4 -4
- data/spec/unit/mixin/powershell_out_spec.rb +2 -4
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +1 -1
- data/spec/unit/mixin/subclass_directive_spec.rb +2 -2
- data/spec/unit/mixin/unformatter_spec.rb +2 -2
- data/spec/unit/mixin/uris_spec.rb +1 -1
- data/spec/unit/mixin/user_context_spec.rb +1 -9
- data/spec/unit/node/attribute_spec.rb +1 -1
- data/spec/unit/property_spec.rb +1 -1
- data/spec/unit/provider/batch_spec.rb +130 -0
- data/spec/unit/provider/cron/unix_spec.rb +1 -1
- data/spec/unit/provider/cron_spec.rb +9 -49
- data/spec/unit/provider/dsc_resource_spec.rb +22 -38
- data/spec/unit/provider/dsc_script_spec.rb +10 -10
- data/spec/unit/provider/execute_spec.rb +1 -1
- data/spec/unit/provider/git_spec.rb +3 -3
- data/spec/unit/provider/group/groupadd_spec.rb +1 -1
- data/spec/unit/provider/launchd_spec.rb +0 -42
- data/spec/unit/provider/mdadm_spec.rb +1 -3
- data/spec/unit/provider/package/openbsd_spec.rb +1 -1
- data/spec/unit/provider/package/pacman_spec.rb +17 -20
- data/spec/unit/provider/package/portage_spec.rb +2 -2
- data/spec/unit/provider/package/powershell_spec.rb +96 -87
- data/spec/unit/provider/package/snap_spec.rb +1 -1
- data/spec/unit/provider/package/windows/registry_uninstall_entry_spec.rb +3 -3
- data/spec/unit/provider/powershell_script_spec.rb +3 -45
- data/spec/unit/provider/script_spec.rb +20 -110
- data/spec/unit/provider/user/dscl_spec.rb +2 -2
- data/spec/unit/provider/windows_env_spec.rb +5 -4
- data/spec/unit/provider/zypper_repository_spec.rb +60 -10
- data/spec/unit/resource/archive_file_spec.rb +11 -2
- data/spec/unit/resource/chef_client_cron_spec.rb +23 -7
- data/spec/unit/resource/chef_client_scheduled_task_spec.rb +17 -7
- data/spec/unit/resource/chef_client_systemd_timer_spec.rb +7 -4
- data/spec/unit/resource/cron_spec.rb +2 -2
- data/spec/unit/resource/file/verification_spec.rb +2 -1
- data/spec/unit/resource/helpers/cron_validations_spec.rb +5 -1
- data/spec/unit/resource/homebrew_update_spec.rb +30 -0
- data/spec/unit/resource/powershell_script_spec.rb +10 -15
- data/spec/unit/resource/timezone_spec.rb +1 -1
- data/spec/unit/resource/windows_audit_policy_spec.rb +64 -0
- data/spec/unit/resource/windows_dns_record_spec.rb +3 -3
- data/spec/unit/resource/windows_dns_zone_spec.rb +2 -2
- data/spec/unit/resource/windows_task_spec.rb +1 -1
- data/spec/unit/resource/windows_uac_spec.rb +2 -2
- data/spec/unit/resource/yum_repository_spec.rb +21 -21
- data/spec/unit/resource_spec.rb +84 -1
- data/spec/unit/role_spec.rb +23 -21
- data/spec/unit/util/backup_spec.rb +1 -1
- data/spec/unit/util/dsc/configuration_generator_spec.rb +1 -1
- data/spec/unit/util/powershell/ps_credential_spec.rb +2 -2
- data/spec/unit/util/selinux_spec.rb +2 -1
- data/spec/unit/util/threaded_job_queue_spec.rb +9 -0
- data/spec/unit/win32/registry_spec.rb +1 -1
- metadata +37 -31
- data/lib/chef/resource/cron.rb +0 -157
- data/spec/functional/resource/base.rb +0 -28
|
@@ -96,7 +96,7 @@ class Chef
|
|
|
96
96
|
passwd_s = shell_out("passwd", "-S", new_resource.username, returns: [ 0, 1 ])
|
|
97
97
|
|
|
98
98
|
# checking "does not exist" has to come before exit code handling since centos and ubuntu differ in exit codes
|
|
99
|
-
if
|
|
99
|
+
if /does not exist/.match?(passwd_s.stderr)
|
|
100
100
|
return false if whyrun_mode?
|
|
101
101
|
|
|
102
102
|
raise Chef::Exceptions::User, "User #{new_resource.username} does not exist when checking lock status for #{new_resource}"
|
|
@@ -108,8 +108,8 @@ class Chef
|
|
|
108
108
|
# now the actual output parsing
|
|
109
109
|
@locked = nil
|
|
110
110
|
status_line = passwd_s.stdout.split(" ")
|
|
111
|
-
@locked = false if status_line[1]
|
|
112
|
-
@locked = true if status_line[1]
|
|
111
|
+
@locked = false if /^[PN]/.match?(status_line[1])
|
|
112
|
+
@locked = true if /^L/.match?(status_line[1])
|
|
113
113
|
|
|
114
114
|
raise Chef::Exceptions::User, "Cannot determine if user #{new_resource.username} is locked for #{new_resource}" if @locked.nil?
|
|
115
115
|
|
|
@@ -102,7 +102,7 @@ class Chef
|
|
|
102
102
|
shadow_hash_hex = user_plist[:shadow_hash][0]
|
|
103
103
|
return unless shadow_hash_hex && shadow_hash_hex != ""
|
|
104
104
|
|
|
105
|
-
# The password
|
|
105
|
+
# The password information is stored in the ShadowHashData key in the
|
|
106
106
|
# plist. However, parsing it is a bit tricky as the value is itself
|
|
107
107
|
# another encoded binary plist. We have to extract the encoded plist,
|
|
108
108
|
# decode it from hex to a binary plist and then convert the binary
|
|
@@ -116,6 +116,8 @@ class Chef
|
|
|
116
116
|
#
|
|
117
117
|
# eg:
|
|
118
118
|
#
|
|
119
|
+
# spellchecker: disable
|
|
120
|
+
#
|
|
119
121
|
# <array>
|
|
120
122
|
# <string>77687920 63616e27 74206170 706c6520 6275696c 6420636f 6e736973 74656e74 20746f6f 6c696e67</string>
|
|
121
123
|
# </array>
|
|
@@ -126,6 +128,8 @@ class Chef
|
|
|
126
128
|
# <data>AADKAAAKAA4LAA0MAAAAAAAAAAA=</data>
|
|
127
129
|
# </array>
|
|
128
130
|
#
|
|
131
|
+
# spellchecker: disable
|
|
132
|
+
#
|
|
129
133
|
begin
|
|
130
134
|
shadow_binary_plist = [shadow_hash_hex.delete(" ")].pack("H*")
|
|
131
135
|
shadow_xml_plist = shell_out("plutil", "-convert", "xml1", "-o", "-", "-", input: shadow_binary_plist).stdout
|
|
@@ -159,7 +163,7 @@ class Chef
|
|
|
159
163
|
# a problem. We'll check stderr and make sure we see that it finished
|
|
160
164
|
# correctly.
|
|
161
165
|
res = run_sysadminctl(cmd)
|
|
162
|
-
unless
|
|
166
|
+
unless /creating user/.match?(res.downcase)
|
|
163
167
|
raise Chef::Exceptions::User, "error when creating user: #{res}"
|
|
164
168
|
end
|
|
165
169
|
|
|
@@ -179,7 +183,7 @@ class Chef
|
|
|
179
183
|
end
|
|
180
184
|
|
|
181
185
|
if new_resource.manage_home
|
|
182
|
-
# "
|
|
186
|
+
# "sysadminctl -addUser" will create the home directory if it's
|
|
183
187
|
# the default /Users/<username>, otherwise it sets it in plist
|
|
184
188
|
# but does not create it. Here we'll ensure that it gets created
|
|
185
189
|
# if we've been given a directory that is not the default.
|
|
@@ -305,7 +309,7 @@ class Chef
|
|
|
305
309
|
# sysadminctl doesn't exit with a non-zero exit code if it encounters
|
|
306
310
|
# a problem. We'll check stderr and make sure we see that it finished
|
|
307
311
|
res = run_sysadminctl(cmd)
|
|
308
|
-
unless
|
|
312
|
+
unless /deleting record|not found/.match?(res.downcase)
|
|
309
313
|
raise Chef::Exceptions::User, "error deleting user: #{res}"
|
|
310
314
|
end
|
|
311
315
|
|
|
@@ -368,7 +372,7 @@ class Chef
|
|
|
368
372
|
next_uid_guess = base_uid
|
|
369
373
|
users_uids = run_dscl("list", "/Users", "uid")
|
|
370
374
|
while next_uid_guess < search_limit + base_uid
|
|
371
|
-
if users_uids
|
|
375
|
+
if users_uids&.match?(Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n"))
|
|
372
376
|
next_uid_guess += 1
|
|
373
377
|
else
|
|
374
378
|
uid = next_uid_guess
|
|
@@ -426,7 +430,7 @@ class Chef
|
|
|
426
430
|
# sysadminctl doesn't exit with a non-zero exit code if it encounters
|
|
427
431
|
# a problem. We'll check stderr and make sure we see that it finished
|
|
428
432
|
res = run_sysadminctl(cmd)
|
|
429
|
-
unless res.downcase
|
|
433
|
+
unless /done/.match?(res.downcase)
|
|
430
434
|
raise Chef::Exceptions::User, "error when modifying SecureToken: #{res}"
|
|
431
435
|
end
|
|
432
436
|
|
|
@@ -491,7 +495,7 @@ class Chef
|
|
|
491
495
|
convert_to_binary(current_resource.salt),
|
|
492
496
|
current_resource.iterations.to_i,
|
|
493
497
|
128,
|
|
494
|
-
OpenSSL::Digest
|
|
498
|
+
OpenSSL::Digest.new("SHA512")
|
|
495
499
|
).unpack("H*")[0] != current_resource.password
|
|
496
500
|
end
|
|
497
501
|
|
|
@@ -517,7 +521,7 @@ class Chef
|
|
|
517
521
|
salt.string,
|
|
518
522
|
new_resource.iterations,
|
|
519
523
|
128,
|
|
520
|
-
OpenSSL::Digest
|
|
524
|
+
OpenSSL::Digest.new("SHA512")
|
|
521
525
|
)
|
|
522
526
|
)
|
|
523
527
|
end
|
|
@@ -554,7 +558,7 @@ class Chef
|
|
|
554
558
|
# 0x0A End of record denoted by \n
|
|
555
559
|
# 0x5C Escaping is denoted by \
|
|
556
560
|
# 0x3A Fields are separated by :
|
|
557
|
-
# 0x2C Values are
|
|
561
|
+
# 0x2C Values are separated by ,
|
|
558
562
|
# dsRecTypeStandard:Users The record type we're configuring
|
|
559
563
|
# 2 How many properties we're going to set
|
|
560
564
|
# dsAttrTypeStandard:RecordName Property 1: our users record name
|
|
@@ -598,7 +602,7 @@ class Chef
|
|
|
598
602
|
|
|
599
603
|
def run_sysadminctl(args)
|
|
600
604
|
# sysadminctl doesn't exit with a non-zero code when errors are encountered
|
|
601
|
-
# and
|
|
605
|
+
# and outputs everything to STDERR instead of STDOUT and STDERR. Therefore we'll
|
|
602
606
|
# return the STDERR and let the caller handle it.
|
|
603
607
|
shell_out!("sysadminctl", args).stderr
|
|
604
608
|
end
|
|
@@ -607,7 +611,7 @@ class Chef
|
|
|
607
611
|
result = shell_out("dscl", "-plist", ".", "-#{args[0]}", args[1..-1])
|
|
608
612
|
return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 )
|
|
609
613
|
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") unless result.exitstatus == 0
|
|
610
|
-
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if
|
|
614
|
+
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if /No such key: /.match?(result.stdout)
|
|
611
615
|
|
|
612
616
|
result.stdout
|
|
613
617
|
end
|
|
@@ -18,57 +18,119 @@
|
|
|
18
18
|
|
|
19
19
|
require_relative "script"
|
|
20
20
|
require_relative "../mixin/windows_architecture_helper"
|
|
21
|
+
require_relative "../win32/security" if ChefUtils.windows?
|
|
22
|
+
require "tempfile" unless defined?(Tempfile)
|
|
21
23
|
|
|
22
24
|
class Chef
|
|
23
25
|
class Provider
|
|
24
26
|
class WindowsScript < Chef::Provider::Script
|
|
25
27
|
|
|
26
|
-
attr_reader :is_forced_32bit
|
|
27
|
-
|
|
28
28
|
protected
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def initialize( new_resource, run_context, script_extension = "")
|
|
33
|
-
super( new_resource, run_context )
|
|
34
|
-
@script_extension = script_extension
|
|
30
|
+
attr_accessor :script_file_path
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
node_windows_architecture(run_context.node)
|
|
38
|
-
else
|
|
39
|
-
new_resource.architecture
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
@is_wow64 = wow64_architecture_override_required?(run_context.node, target_architecture)
|
|
32
|
+
include Chef::Mixin::WindowsArchitectureHelper
|
|
43
33
|
|
|
44
|
-
|
|
34
|
+
def target_architecture
|
|
35
|
+
@target_architecture ||= if new_resource.architecture.nil?
|
|
36
|
+
node_windows_architecture(run_context.node)
|
|
37
|
+
else
|
|
38
|
+
new_resource.architecture
|
|
39
|
+
end
|
|
45
40
|
end
|
|
46
41
|
|
|
47
|
-
|
|
42
|
+
def basepath
|
|
43
|
+
if forced_32bit_override_required?(run_context.node, target_architecture)
|
|
44
|
+
wow64_directory
|
|
45
|
+
else
|
|
46
|
+
run_context.node["kernel"]["os_info"]["system_directory"]
|
|
47
|
+
end
|
|
48
|
+
end
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
def with_wow64_redirection_disabled
|
|
50
51
|
wow64_redirection_state = nil
|
|
51
52
|
|
|
52
|
-
if
|
|
53
|
-
wow64_redirection_state = disable_wow64_file_redirection(
|
|
53
|
+
if wow64_architecture_override_required?(run_context.node, target_architecture)
|
|
54
|
+
wow64_redirection_state = disable_wow64_file_redirection(run_context.node)
|
|
54
55
|
end
|
|
55
56
|
|
|
56
57
|
begin
|
|
57
|
-
|
|
58
|
+
yield
|
|
58
59
|
rescue
|
|
59
60
|
raise
|
|
60
61
|
ensure
|
|
61
62
|
unless wow64_redirection_state.nil?
|
|
62
|
-
restore_wow64_file_redirection(
|
|
63
|
+
restore_wow64_file_redirection(run_context.node, wow64_redirection_state)
|
|
63
64
|
end
|
|
64
65
|
end
|
|
65
66
|
end
|
|
66
67
|
|
|
67
|
-
def
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
def command
|
|
69
|
+
"\"#{interpreter}\" #{flags} \"#{script_file_path}\""
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def grant_alternate_user_read_access(file_path)
|
|
73
|
+
# Do nothing if an alternate user isn't specified -- the file
|
|
74
|
+
# will already have the correct permissions for the user as part
|
|
75
|
+
# of the default ACL behavior on Windows.
|
|
76
|
+
return if new_resource.user.nil?
|
|
77
|
+
|
|
78
|
+
# Duplicate the script file's existing DACL
|
|
79
|
+
# so we can add an ACE later
|
|
80
|
+
securable_object = Chef::ReservedNames::Win32::Security::SecurableObject.new(file_path)
|
|
81
|
+
aces = securable_object.security_descriptor.dacl.reduce([]) { |result, current| result.push(current) }
|
|
82
|
+
|
|
83
|
+
username = new_resource.user
|
|
84
|
+
|
|
85
|
+
if new_resource.domain
|
|
86
|
+
username = new_resource.domain + '\\' + new_resource.user
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Create an ACE that allows the alternate user read access to the script
|
|
90
|
+
# file so it can be read and executed.
|
|
91
|
+
user_sid = Chef::ReservedNames::Win32::Security::SID.from_account(username)
|
|
92
|
+
read_ace = Chef::ReservedNames::Win32::Security::ACE.access_allowed(user_sid, Chef::ReservedNames::Win32::API::Security::GENERIC_READ | Chef::ReservedNames::Win32::API::Security::GENERIC_EXECUTE, 0)
|
|
93
|
+
aces.push(read_ace)
|
|
94
|
+
acl = Chef::ReservedNames::Win32::Security::ACL.create(aces)
|
|
95
|
+
|
|
96
|
+
# This actually applies the modified DACL to the file
|
|
97
|
+
# Use parentheses to bypass RuboCop / ChefStyle warning
|
|
98
|
+
# about useless setter
|
|
99
|
+
(securable_object.dacl = acl)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def with_temp_script_file
|
|
103
|
+
Tempfile.open(["chef-script", script_extension]) do |script_file|
|
|
104
|
+
script_file.puts(code)
|
|
105
|
+
script_file.close
|
|
106
|
+
|
|
107
|
+
grant_alternate_user_read_access(script_file.path)
|
|
108
|
+
|
|
109
|
+
# This needs to be set here so that the call to #command in Execute works.
|
|
110
|
+
self.script_file_path = script_file.path
|
|
111
|
+
|
|
112
|
+
yield
|
|
113
|
+
|
|
114
|
+
self.script_file_path = nil
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def input
|
|
119
|
+
nil
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
public
|
|
123
|
+
|
|
124
|
+
action :run do
|
|
125
|
+
with_wow64_redirection_disabled do
|
|
126
|
+
with_temp_script_file do
|
|
127
|
+
super()
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
70
131
|
|
|
71
|
-
|
|
132
|
+
def script_extension
|
|
133
|
+
raise Chef::Exceptions::Override, "You must override #{__method__} in #{self}"
|
|
72
134
|
end
|
|
73
135
|
end
|
|
74
136
|
end
|
|
@@ -72,6 +72,7 @@ class Chef
|
|
|
72
72
|
6 => TaskScheduler::TASK_SIXTH,
|
|
73
73
|
7 => TaskScheduler::TASK_SEVENTH,
|
|
74
74
|
8 => TaskScheduler::TASK_EIGHTH,
|
|
75
|
+
# cspell:disable-next-line
|
|
75
76
|
9 => TaskScheduler::TASK_NINETH,
|
|
76
77
|
10 => TaskScheduler::TASK_TENTH,
|
|
77
78
|
11 => TaskScheduler::TASK_ELEVENTH,
|
|
@@ -93,6 +94,7 @@ class Chef
|
|
|
93
94
|
27 => TaskScheduler::TASK_TWENTY_SEVENTH,
|
|
94
95
|
28 => TaskScheduler::TASK_TWENTY_EIGHTH,
|
|
95
96
|
29 => TaskScheduler::TASK_TWENTY_NINTH,
|
|
97
|
+
# cspell:disable-next-line
|
|
96
98
|
30 => TaskScheduler::TASK_THIRTYETH,
|
|
97
99
|
31 => TaskScheduler::TASK_THIRTY_FIRST,
|
|
98
100
|
}.freeze
|
|
@@ -229,7 +231,7 @@ class Chef
|
|
|
229
231
|
|
|
230
232
|
private
|
|
231
233
|
|
|
232
|
-
#
|
|
234
|
+
# separated command arguments from :command property
|
|
233
235
|
def set_command_and_arguments
|
|
234
236
|
cmd, *args = Chef::Util::PathHelper.split_args(new_resource.command)
|
|
235
237
|
new_resource.command = cmd
|
|
@@ -577,7 +579,7 @@ class Chef
|
|
|
577
579
|
|
|
578
580
|
def logon_type
|
|
579
581
|
# Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/aa383566(v=vs.85).aspx
|
|
580
|
-
# if nothing is passed as logon_type the TASK_LOGON_SERVICE_ACCOUNT is getting set as default so using that for
|
|
582
|
+
# if nothing is passed as logon_type the TASK_LOGON_SERVICE_ACCOUNT is getting set as default so using that for comparison.
|
|
581
583
|
user_id = new_resource.user.to_s
|
|
582
584
|
password = new_resource.password.to_s
|
|
583
585
|
if Chef::ReservedNames::Win32::Security::SID.service_account_user?(user_id)
|
|
@@ -115,28 +115,48 @@ class Chef
|
|
|
115
115
|
end
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
+
# the version of gpg installed on the system
|
|
119
|
+
#
|
|
120
|
+
# @return [Gem::Version] the version of GPG
|
|
121
|
+
def gpg_version
|
|
122
|
+
so = shell_out!("gpg --version")
|
|
123
|
+
# matches 2.0 and 2.2 versions from SLES 12 and 15: https://rubular.com/r/e6D0WfGK6SXvUp
|
|
124
|
+
version = /gpg \(GnuPG\)\s*(.*)/.match(so.stdout)[1]
|
|
125
|
+
logger.trace("GPG package version is #{version}")
|
|
126
|
+
Gem::Version.new(version)
|
|
127
|
+
end
|
|
128
|
+
|
|
118
129
|
# is the provided key already installed
|
|
119
130
|
# @param [String] key_path the path to the key on the local filesystem
|
|
120
131
|
#
|
|
121
132
|
# @return [boolean] is the key already known by rpm
|
|
122
133
|
def key_installed?(key_path)
|
|
123
|
-
so = shell_out("rpm -qa gpg-pubkey*")
|
|
134
|
+
so = shell_out("/bin/rpm -qa gpg-pubkey*")
|
|
124
135
|
# expected output & match: http://rubular.com/r/RdF7EcXEtb
|
|
125
|
-
status = /gpg-pubkey-#{
|
|
136
|
+
status = /gpg-pubkey-#{short_key_id(key_path)}/.match(so.stdout)
|
|
126
137
|
logger.trace("GPG key at #{key_path} is known by rpm? #{status ? "true" : "false"}")
|
|
127
138
|
status
|
|
128
139
|
end
|
|
129
140
|
|
|
130
|
-
# extract the gpg key
|
|
141
|
+
# extract the gpg key's short key id from a local file. Learning moment: This 8 hex value ID
|
|
142
|
+
# is sometimes incorrectly called the fingerprint. The fingerprint is the full length value
|
|
143
|
+
# and googling for that will just result in sad times.
|
|
144
|
+
#
|
|
131
145
|
# @param [String] key_path the path to the key on the local filesystem
|
|
132
146
|
#
|
|
133
|
-
# @return [String] the
|
|
134
|
-
def
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
147
|
+
# @return [String] the short key id of the key
|
|
148
|
+
def short_key_id(key_path)
|
|
149
|
+
if gpg_version >= Gem::Version.new("2.2") # SLES 15+
|
|
150
|
+
so = shell_out!("gpg --import-options import-show --dry-run --import --with-colons #{key_path}")
|
|
151
|
+
# expected output and match: https://rubular.com/r/uXWJo3yfkli1qA
|
|
152
|
+
short_key_id = /fpr:*\h*(\h{8}):/.match(so.stdout)[1].downcase
|
|
153
|
+
else # SLES 12 and earlier
|
|
154
|
+
so = shell_out!("gpg --with-fingerprint #{key_path}")
|
|
155
|
+
# expected output and match: http://rubular.com/r/BpfMjxySQM
|
|
156
|
+
short_key_id = %r{pub\s*\S*/(\S*)}.match(so.stdout)[1].downcase
|
|
157
|
+
end
|
|
158
|
+
logger.trace("GPG short key ID of key at #{key_path} is #{short_key_id}")
|
|
159
|
+
short_key_id
|
|
140
160
|
end
|
|
141
161
|
|
|
142
162
|
# install the provided gpg key
|
data/lib/chef/resource.rb
CHANGED
|
@@ -451,6 +451,17 @@ class Chef
|
|
|
451
451
|
description: "Determines whether or not the resource is executed during the compile time phase.",
|
|
452
452
|
default: false, desired_state: false
|
|
453
453
|
|
|
454
|
+
# Set a umask to be used for the duration of converging the resource.
|
|
455
|
+
# Defaults to `nil`, which means to use the system umask.
|
|
456
|
+
#
|
|
457
|
+
# @param arg [String] The umask to apply while converging the resource.
|
|
458
|
+
# @return [Boolean] The umask to apply while converging the resource.
|
|
459
|
+
#
|
|
460
|
+
property :umask, String,
|
|
461
|
+
desired_state: false,
|
|
462
|
+
introduced: "16.2",
|
|
463
|
+
description: "Set a umask to be used for the duration of converging the resource. Defaults to `nil`, which means to use the system umask. Unsupported on Windows because Windows lacks a direct equivalent to UNIX's umask."
|
|
464
|
+
|
|
454
465
|
# The time it took (in seconds) to run the most recently-run action. Not
|
|
455
466
|
# cumulative across actions. This is set to 0 as soon as a new action starts
|
|
456
467
|
# running, and set to the elapsed time at the end of the action.
|
|
@@ -588,7 +599,9 @@ class Chef
|
|
|
588
599
|
begin
|
|
589
600
|
return if should_skip?(action)
|
|
590
601
|
|
|
591
|
-
|
|
602
|
+
with_umask do
|
|
603
|
+
provider_for_action(action).run_action
|
|
604
|
+
end
|
|
592
605
|
rescue StandardError => e
|
|
593
606
|
if ignore_failure
|
|
594
607
|
logger.error("#{custom_exception_message(e)}; ignore_failure is set, continuing")
|
|
@@ -612,6 +625,13 @@ class Chef
|
|
|
612
625
|
events.resource_completed(self)
|
|
613
626
|
end
|
|
614
627
|
|
|
628
|
+
def with_umask
|
|
629
|
+
old_value = ::File.umask(umask.oct) if umask
|
|
630
|
+
yield
|
|
631
|
+
ensure
|
|
632
|
+
::File.umask(old_value) if umask
|
|
633
|
+
end
|
|
634
|
+
|
|
615
635
|
#
|
|
616
636
|
# If we are currently initializing the resource, this will be true.
|
|
617
637
|
#
|
|
@@ -930,7 +950,7 @@ class Chef
|
|
|
930
950
|
end
|
|
931
951
|
|
|
932
952
|
#
|
|
933
|
-
# A hook called after a resource is created. Meant to be
|
|
953
|
+
# A hook called after a resource is created. Meant to be overridden by
|
|
934
954
|
# subclasses.
|
|
935
955
|
#
|
|
936
956
|
def after_created
|
|
@@ -950,16 +970,7 @@ class Chef
|
|
|
950
970
|
def self.resource_name(name = NOT_PASSED)
|
|
951
971
|
# Setter
|
|
952
972
|
if name != NOT_PASSED
|
|
953
|
-
|
|
954
|
-
@resource_name = name.to_sym
|
|
955
|
-
name = name.to_sym
|
|
956
|
-
# FIXME: determine a way to deprecate this magic behavior
|
|
957
|
-
unless Chef::ResourceResolver.includes_handler?(name, self)
|
|
958
|
-
provides name
|
|
959
|
-
end
|
|
960
|
-
else
|
|
961
|
-
@resource_name = nil
|
|
962
|
-
end
|
|
973
|
+
@resource_name = name.to_sym rescue nil
|
|
963
974
|
end
|
|
964
975
|
|
|
965
976
|
@resource_name = nil unless defined?(@resource_name)
|
|
@@ -1114,7 +1125,7 @@ class Chef
|
|
|
1114
1125
|
# `action_class` method, the presence of either indicates that this is
|
|
1115
1126
|
# going to be a Chef-12.5 custom resource. If we never see one of these
|
|
1116
1127
|
# directives then we are constructing an old-style Resource+Provider or
|
|
1117
|
-
# LWRP or
|
|
1128
|
+
# LWRP or whatever.
|
|
1118
1129
|
#
|
|
1119
1130
|
# If a block is passed, the action_class is always created and the block is
|
|
1120
1131
|
# run inside it.
|
|
@@ -1327,7 +1338,7 @@ class Chef
|
|
|
1327
1338
|
# Once we no longer care about supporting chef < 14.4 then we can deprecate
|
|
1328
1339
|
# this API.
|
|
1329
1340
|
#
|
|
1330
|
-
# @param arg [String] version
|
|
1341
|
+
# @param arg [String] version constraint to match against (e.g. "> 14")
|
|
1331
1342
|
#
|
|
1332
1343
|
def self.chef_version_for_provides(constraint)
|
|
1333
1344
|
@chef_version_for_provides = constraint
|