chef 12.8.1-universal-mingw32 → 12.9.38-universal-mingw32
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/CONTRIBUTING.md +208 -208
- data/Gemfile +54 -49
- data/LICENSE +201 -201
- data/README.md +139 -139
- data/Rakefile +87 -86
- data/VERSION +1 -1
- data/acceptance/.gitignore +2 -2
- data/acceptance/.shared/kitchen_acceptance/.kitchen.digitalocean.yml +33 -33
- data/acceptance/.shared/kitchen_acceptance/.kitchen.ec2.yml +292 -290
- data/acceptance/.shared/kitchen_acceptance/.kitchen.vagrant.yml +59 -59
- data/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb +51 -51
- data/acceptance/.shared/kitchen_acceptance/metadata.rb +1 -1
- data/acceptance/Gemfile +13 -14
- data/acceptance/README.md +132 -132
- data/acceptance/basics/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/basics/.acceptance/acceptance-cookbook/metadata.rb +3 -3
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/basics/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/basics/.kitchen.yml +4 -4
- data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +19 -19
- data/acceptance/basics/test/integration/chef-current-install/serverspec/spec_helper.rb +6 -6
- data/acceptance/fips/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/fips/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/fips/.kitchen.yml +4 -4
- data/acceptance/fips/test/integration/fips/serverspec/Gemfile +3 -3
- data/acceptance/fips/test/integration/fips/serverspec/fips_spec.rb +39 -39
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/.gitignore +2 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/metadata.rb +1 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -0
- data/acceptance/omnitruck/.acceptance/acceptance-cookbook/recipes/verify.rb +61 -0
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/cookbook_kitchen.rb +43 -43
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/libraries/top_cookbooks.rb +45 -23
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/metadata.rb +3 -3
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/top-cookbooks/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/top-cookbooks/.gitignore +1 -1
- data/acceptance/top-cookbooks/.kitchen.chocolatey.yml +6 -0
- data/acceptance/top-cookbooks/.kitchen.docker.yml +12 -12
- data/acceptance/top-cookbooks/.kitchen.git.yml +11 -11
- data/acceptance/top-cookbooks/.kitchen.iis.yml +4 -0
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-rhel.yml +7 -7
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-ubuntu.yml +7 -7
- data/acceptance/top-cookbooks/.kitchen.learn-the-basics-windows.yml +7 -7
- data/acceptance/top-cookbooks/.kitchen.powershell.yml +4 -0
- data/acceptance/top-cookbooks/.kitchen.sql_server.yml +5 -0
- data/acceptance/top-cookbooks/.kitchen.winbox.yml +8 -0
- data/acceptance/top-cookbooks/.kitchen.windows.yml +38 -0
- data/acceptance/trivial/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/trivial/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/trivial/.kitchen.yml +7 -7
- data/acceptance/trivial/test/integration/chef-current-install/inspec/chef_client_spec.rb +5 -5
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/.gitignore +2 -2
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/metadata.rb +2 -2
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/destroy.rb +1 -1
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/provision.rb +1 -1
- data/acceptance/windows-service/.acceptance/acceptance-cookbook/recipes/verify.rb +1 -1
- data/acceptance/windows-service/.kitchen.yml +7 -7
- data/acceptance/windows-service/test/integration/chef-windows-service/inspec/chef_windows_service_spec.rb +58 -58
- data/bin/chef-apply +25 -25
- data/bin/chef-client +26 -26
- data/bin/chef-service-manager +38 -38
- data/bin/chef-shell +34 -34
- data/bin/chef-solo +25 -25
- data/bin/chef-windows-service +35 -35
- data/bin/knife +25 -25
- data/chef-windows.gemspec +24 -24
- data/chef.gemspec +64 -63
- data/distro/common/html/_sources/ctl_chef_client.txt +35 -35
- data/distro/common/html/_sources/ctl_chef_server.txt +341 -341
- data/distro/common/html/_sources/ctl_chef_shell.txt +15 -15
- data/distro/common/html/_sources/ctl_chef_solo.txt +25 -25
- data/distro/common/html/_sources/index.txt +135 -135
- data/distro/common/html/_sources/knife.txt +74 -74
- data/distro/common/html/_sources/knife_bootstrap.txt +56 -56
- data/distro/common/html/_sources/knife_client.txt +150 -150
- data/distro/common/html/_sources/knife_common_options.txt +6 -6
- data/distro/common/html/_sources/knife_configure.txt +29 -29
- data/distro/common/html/_sources/knife_cookbook.txt +236 -236
- data/distro/common/html/_sources/knife_cookbook_site.txt +157 -157
- data/distro/common/html/_sources/knife_data_bag.txt +159 -159
- data/distro/common/html/_sources/knife_delete.txt +26 -26
- data/distro/common/html/_sources/knife_deps.txt +61 -61
- data/distro/common/html/_sources/knife_diff.txt +34 -34
- data/distro/common/html/_sources/knife_download.txt +44 -44
- data/distro/common/html/_sources/knife_edit.txt +26 -26
- data/distro/common/html/_sources/knife_environment.txt +158 -158
- data/distro/common/html/_sources/knife_exec.txt +47 -47
- data/distro/common/html/_sources/knife_index_rebuild.txt +20 -20
- data/distro/common/html/_sources/knife_list.txt +33 -33
- data/distro/common/html/_sources/knife_node.txt +250 -250
- data/distro/common/html/_sources/knife_raw.txt +35 -35
- data/distro/common/html/_sources/knife_recipe_list.txt +23 -23
- data/distro/common/html/_sources/knife_role.txt +157 -157
- data/distro/common/html/_sources/knife_search.txt +53 -53
- data/distro/common/html/_sources/knife_serve.txt +18 -18
- data/distro/common/html/_sources/knife_show.txt +26 -26
- data/distro/common/html/_sources/knife_ssh.txt +43 -43
- data/distro/common/html/_sources/knife_ssl_check.txt +41 -41
- data/distro/common/html/_sources/knife_ssl_fetch.txt +41 -41
- data/distro/common/html/_sources/knife_status.txt +37 -37
- data/distro/common/html/_sources/knife_tag.txt +69 -69
- data/distro/common/html/_sources/knife_upload.txt +49 -49
- data/distro/common/html/_sources/knife_user.txt +127 -127
- data/distro/common/html/_sources/knife_using.txt +43 -43
- data/distro/common/html/_sources/knife_xargs.txt +30 -30
- data/distro/common/html/_static/basic.css +536 -536
- data/distro/common/html/_static/doctools.js +238 -238
- data/distro/common/html/_static/guide.css +504 -504
- data/distro/common/html/_static/pygments.css +61 -61
- data/distro/common/html/_static/searchtools.js +621 -621
- data/distro/common/html/_static/underscore.js +31 -31
- data/distro/common/html/_static/websupport.js +808 -808
- data/distro/common/html/ctl_chef_client.html +269 -269
- data/distro/common/html/ctl_chef_server.html +727 -727
- data/distro/common/html/ctl_chef_shell.html +162 -162
- data/distro/common/html/ctl_chef_solo.html +193 -193
- data/distro/common/html/index.html +201 -201
- data/distro/common/html/knife.html +169 -169
- data/distro/common/html/knife_bootstrap.html +284 -284
- data/distro/common/html/knife_client.html +284 -284
- data/distro/common/html/knife_common_options.html +95 -95
- data/distro/common/html/knife_configure.html +104 -104
- data/distro/common/html/knife_cookbook.html +486 -486
- data/distro/common/html/knife_cookbook_site.html +375 -375
- data/distro/common/html/knife_data_bag.html +373 -373
- data/distro/common/html/knife_delete.html +92 -92
- data/distro/common/html/knife_deps.html +142 -142
- data/distro/common/html/knife_diff.html +122 -122
- data/distro/common/html/knife_download.html +144 -144
- data/distro/common/html/knife_edit.html +88 -88
- data/distro/common/html/knife_environment.html +325 -325
- data/distro/common/html/knife_exec.html +219 -219
- data/distro/common/html/knife_index_rebuild.html +82 -82
- data/distro/common/html/knife_list.html +113 -113
- data/distro/common/html/knife_node.html +457 -457
- data/distro/common/html/knife_raw.html +109 -109
- data/distro/common/html/knife_recipe_list.html +90 -90
- data/distro/common/html/knife_role.html +294 -294
- data/distro/common/html/knife_search.html +202 -202
- data/distro/common/html/knife_serve.html +78 -78
- data/distro/common/html/knife_show.html +103 -103
- data/distro/common/html/knife_ssh.html +176 -176
- data/distro/common/html/knife_ssl_check.html +150 -150
- data/distro/common/html/knife_ssl_fetch.html +150 -150
- data/distro/common/html/knife_status.html +143 -143
- data/distro/common/html/knife_tag.html +137 -137
- data/distro/common/html/knife_upload.html +152 -152
- data/distro/common/html/knife_user.html +241 -241
- data/distro/common/html/knife_using.html +209 -209
- data/distro/common/html/knife_xargs.html +121 -121
- data/distro/common/html/search.html +81 -81
- data/distro/common/man/man1/README.md +58 -58
- data/distro/common/man/man1/chef-shell.1 +194 -194
- data/distro/common/man/man1/knife-bootstrap.1 +215 -215
- data/distro/common/man/man1/knife-client.1 +443 -443
- data/distro/common/man/man1/knife-configure.1 +161 -161
- data/distro/common/man/man1/knife-cookbook-site.1 +552 -552
- data/distro/common/man/man1/knife-cookbook.1 +770 -770
- data/distro/common/man/man1/knife-data-bag.1 +617 -617
- data/distro/common/man/man1/knife-delete.1 +127 -127
- data/distro/common/man/man1/knife-deps.1 +246 -246
- data/distro/common/man/man1/knife-diff.1 +226 -226
- data/distro/common/man/man1/knife-download.1 +258 -258
- data/distro/common/man/man1/knife-edit.1 +121 -121
- data/distro/common/man/man1/knife-environment.1 +508 -508
- data/distro/common/man/man1/knife-exec.1 +362 -362
- data/distro/common/man/man1/knife-index-rebuild.1 +63 -63
- data/distro/common/man/man1/knife-list.1 +174 -174
- data/distro/common/man/man1/knife-node.1 +716 -716
- data/distro/common/man/man1/knife-raw.1 +172 -172
- data/distro/common/man/man1/knife-recipe-list.1 +85 -85
- data/distro/common/man/man1/knife-role.1 +426 -426
- data/distro/common/man/man1/knife-search.1 +359 -359
- data/distro/common/man/man1/knife-serve.1 +109 -109
- data/distro/common/man/man1/knife-show.1 +160 -160
- data/distro/common/man/man1/knife-ssh.1 +284 -284
- data/distro/common/man/man1/knife-ssl-check.1 +207 -207
- data/distro/common/man/man1/knife-ssl-fetch.1 +207 -207
- data/distro/common/man/man1/knife-status.1 +234 -234
- data/distro/common/man/man1/knife-tag.1 +189 -189
- data/distro/common/man/man1/knife-upload.1 +280 -280
- data/distro/common/man/man1/knife-user.1 +356 -356
- data/distro/common/man/man1/knife-xargs.1 +189 -189
- data/distro/common/man/man1/knife.1 +332 -332
- data/distro/common/man/man8/chef-apply.8 +86 -86
- data/distro/common/man/man8/chef-client.8 +398 -398
- data/distro/common/man/man8/chef-solo.8 +260 -260
- data/distro/common/markdown/README +3 -3
- data/distro/common/markdown/man1/chef-shell.mkd +195 -195
- data/distro/common/markdown/man1/knife-bootstrap.mkd +141 -141
- data/distro/common/markdown/man1/knife-client.mkd +103 -103
- data/distro/common/markdown/man1/knife-configure.mkd +70 -70
- data/distro/common/markdown/man1/knife-cookbook-site.mkd +123 -123
- data/distro/common/markdown/man1/knife-cookbook.mkd +263 -263
- data/distro/common/markdown/man1/knife-data-bag.mkd +121 -121
- data/distro/common/markdown/man1/knife-environment.mkd +151 -151
- data/distro/common/markdown/man1/knife-exec.mkd +42 -42
- data/distro/common/markdown/man1/knife-index.mkd +30 -30
- data/distro/common/markdown/man1/knife-node.mkd +130 -130
- data/distro/common/markdown/man1/knife-role.mkd +85 -85
- data/distro/common/markdown/man1/knife-search.mkd +180 -180
- data/distro/common/markdown/man1/knife-ssh.mkd +69 -69
- data/distro/common/markdown/man1/knife-status.mkd +36 -36
- data/distro/common/markdown/man1/knife-tag.mkd +39 -39
- data/distro/common/markdown/man1/knife.mkd +213 -213
- data/distro/common/markdown/man8/chef-client.mkd +75 -75
- data/distro/common/markdown/man8/chef-expander.mkd +81 -81
- data/distro/common/markdown/man8/chef-expanderctl.mkd +57 -57
- data/distro/common/markdown/man8/chef-server-webui.mkd +121 -121
- data/distro/common/markdown/man8/chef-server.mkd +120 -120
- data/distro/common/markdown/man8/chef-solo.mkd +107 -107
- data/distro/common/markdown/man8/chef-solr.mkd +89 -89
- data/distro/powershell/chef/chef.psm1 +327 -327
- data/ext/win32-eventlog/Rakefile +53 -53
- data/ext/win32-eventlog/chef-log.man +56 -56
- data/lib-backcompat/chef/chef_fs/file_system/acl_entry.rb +5 -5
- data/lib-backcompat/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +5 -5
- data/lib-backcompat/chef/chef_fs/file_system/chef_server_root_dir.rb +5 -5
- data/lib/chef.rb +35 -35
- data/lib/chef/api_client.rb +233 -233
- data/lib/chef/api_client/registration.rb +192 -192
- data/lib/chef/api_client_v1.rb +325 -325
- data/lib/chef/application.rb +357 -342
- data/lib/chef/application/apply.rb +221 -221
- data/lib/chef/application/client.rb +520 -513
- data/lib/chef/application/knife.rb +208 -208
- data/lib/chef/application/solo.rb +334 -334
- data/lib/chef/application/windows_service.rb +338 -338
- data/lib/chef/application/windows_service_manager.rb +202 -202
- data/lib/chef/applications.rb +4 -4
- data/lib/chef/audit/audit_event_proxy.rb +93 -93
- data/lib/chef/audit/audit_reporter.rb +172 -172
- data/lib/chef/audit/control_group_data.rb +139 -139
- data/lib/chef/audit/logger.rb +36 -36
- data/lib/chef/audit/rspec_formatter.rb +37 -37
- data/lib/chef/audit/runner.rb +196 -196
- data/lib/chef/chef_class.rb +228 -228
- data/lib/chef/chef_fs.rb +59 -59
- data/lib/chef/chef_fs/chef_fs_data_store.rb +871 -871
- data/lib/chef/chef_fs/command_line.rb +285 -285
- data/lib/chef/chef_fs/config.rb +284 -283
- data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +26 -26
- data/lib/chef/chef_fs/data_handler/client_data_handler.rb +39 -39
- data/lib/chef/chef_fs/data_handler/client_key_data_handler.rb +11 -11
- data/lib/chef/chef_fs/data_handler/container_data_handler.rb +35 -35
- data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +38 -38
- data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +62 -62
- data/lib/chef/chef_fs/data_handler/data_handler_base.rb +204 -204
- data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +40 -40
- data/lib/chef/chef_fs/data_handler/group_data_handler.rb +55 -55
- data/lib/chef/chef_fs/data_handler/node_data_handler.rb +36 -36
- data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +36 -36
- data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -17
- data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -17
- data/lib/chef/chef_fs/data_handler/policy_data_handler.rb +48 -48
- data/lib/chef/chef_fs/data_handler/policy_group_data_handler.rb +33 -33
- data/lib/chef/chef_fs/data_handler/role_data_handler.rb +40 -40
- data/lib/chef/chef_fs/data_handler/user_data_handler.rb +29 -29
- data/lib/chef/chef_fs/file_pattern.rb +301 -301
- data/lib/chef/chef_fs/file_system.rb +429 -429
- data/lib/chef/chef_fs/file_system/already_exists_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/base_fs_dir.rb +47 -47
- data/lib/chef/chef_fs/file_system/base_fs_object.rb +183 -183
- data/lib/chef/chef_fs/file_system/chef_server/acl_dir.rb +65 -65
- data/lib/chef/chef_fs/file_system/chef_server/acl_entry.rb +60 -60
- data/lib/chef/chef_fs/file_system/chef_server/acls_dir.rb +75 -75
- data/lib/chef/chef_fs/file_system/chef_server/chef_server_root_dir.rb +196 -196
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifact_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_artifacts_dir.rb +102 -102
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_dir.rb +222 -222
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_file.rb +84 -84
- data/lib/chef/chef_fs/file_system/chef_server/cookbook_subdir.rb +61 -61
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_acl_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/chef_server/cookbooks_dir.rb +102 -102
- data/lib/chef/chef_fs/file_system/chef_server/data_bag_dir.rb +71 -71
- data/lib/chef/chef_fs/file_system/chef_server/data_bags_dir.rb +69 -69
- data/lib/chef/chef_fs/file_system/chef_server/environments_dir.rb +57 -57
- data/lib/chef/chef_fs/file_system/chef_server/nodes_dir.rb +53 -53
- data/lib/chef/chef_fs/file_system/chef_server/org_entry.rb +31 -31
- data/lib/chef/chef_fs/file_system/chef_server/organization_invites_entry.rb +61 -61
- data/lib/chef/chef_fs/file_system/chef_server/organization_members_entry.rb +60 -60
- data/lib/chef/chef_fs/file_system/chef_server/policies_acl_dir.rb +41 -41
- data/lib/chef/chef_fs/file_system/chef_server/policies_dir.rb +160 -160
- data/lib/chef/chef_fs/file_system/chef_server/policy_group_entry.rb +137 -137
- data/lib/chef/chef_fs/file_system/chef_server/policy_groups_dir.rb +43 -43
- data/lib/chef/chef_fs/file_system/chef_server/policy_revision_entry.rb +34 -34
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_dir.rb +178 -178
- data/lib/chef/chef_fs/file_system/chef_server/rest_list_entry.rb +187 -187
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbook_dir.rb +45 -45
- data/lib/chef/chef_fs/file_system/chef_server/versioned_cookbooks_dir.rb +107 -107
- data/lib/chef/chef_fs/file_system/cookbook_frozen_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/default_environment_cannot_be_modified_error.rb +32 -32
- data/lib/chef/chef_fs/file_system/file_system_error.rb +44 -44
- data/lib/chef/chef_fs/file_system/memory/memory_dir.rb +53 -53
- data/lib/chef/chef_fs/file_system/memory/memory_file.rb +20 -20
- data/lib/chef/chef_fs/file_system/memory/memory_root.rb +23 -23
- data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +64 -64
- data/lib/chef/chef_fs/file_system/must_delete_recursively_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/nonexistent_fs_object.rb +36 -36
- data/lib/chef/chef_fs/file_system/not_found_error.rb +28 -28
- data/lib/chef/chef_fs/file_system/operation_failed_error.rb +42 -42
- data/lib/chef/chef_fs/file_system/operation_not_allowed_error.rb +46 -46
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_acls_dir.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_client_keys_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_artifact_dir.rb +41 -41
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_dir.rb +146 -146
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_cookbook_entry.rb +176 -176
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_entry.rb +83 -83
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_policies_dir.rb +38 -38
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_root_dir.rb +214 -214
- data/lib/chef/chef_fs/file_system/repository/chef_repository_file_system_versioned_cookbook_dir.rb +42 -42
- data/lib/chef/chef_fs/file_system/repository/cookbook_artifacts_dir.rb +36 -36
- data/lib/chef/chef_fs/file_system/repository/cookbooks_dir.rb +52 -52
- data/lib/chef/chef_fs/file_system/repository/data_bag.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/data_bag_item.rb +114 -114
- data/lib/chef/chef_fs/file_system/repository/data_bags_dir.rb +39 -39
- data/lib/chef/chef_fs/file_system/repository/directory.rb +139 -139
- data/lib/chef/chef_fs/file_system/repository/file_system_entry.rb +117 -117
- data/lib/chef/chef_fs/file_system/repository/file_system_root_dir.rb +33 -33
- data/lib/chef/chef_fs/file_system/repository/versioned_cookbooks_dir.rb +34 -34
- data/lib/chef/chef_fs/knife.rb +161 -161
- data/lib/chef/chef_fs/parallelizer.rb +105 -105
- data/lib/chef/chef_fs/parallelizer/flatten_enumerable.rb +35 -35
- data/lib/chef/chef_fs/parallelizer/parallel_enumerable.rb +281 -281
- data/lib/chef/chef_fs/path_utils.rb +127 -127
- data/lib/chef/client.rb +966 -967
- data/lib/chef/config.rb +85 -85
- data/lib/chef/config_fetcher.rb +72 -72
- data/lib/chef/constants.rb +28 -28
- data/lib/chef/cookbook/chefignore.rb +74 -74
- data/lib/chef/cookbook/cookbook_collection.rb +63 -63
- data/lib/chef/cookbook/cookbook_version_loader.rb +352 -352
- data/lib/chef/cookbook/file_system_file_vendor.rb +59 -59
- data/lib/chef/cookbook/file_vendor.rb +71 -71
- data/lib/chef/cookbook/gem_installer.rb +83 -118
- data/lib/chef/cookbook/metadata.rb +904 -904
- data/lib/chef/cookbook/remote_file_vendor.rb +87 -87
- data/lib/chef/cookbook/synchronizer.rb +298 -298
- data/lib/chef/cookbook/syntax_check.rb +260 -260
- data/lib/chef/cookbook_loader.rb +200 -200
- data/lib/chef/cookbook_manifest.rb +290 -290
- data/lib/chef/cookbook_site_streaming_uploader.rb +243 -244
- data/lib/chef/cookbook_uploader.rb +157 -157
- data/lib/chef/cookbook_version.rb +637 -631
- data/lib/chef/daemon.rb +131 -131
- data/lib/chef/data_bag.rb +176 -176
- data/lib/chef/data_bag_item.rb +218 -218
- data/lib/chef/delayed_evaluator.rb +21 -21
- data/lib/chef/deprecation/mixin/template.rb +48 -48
- data/lib/chef/deprecation/provider/cookbook_file.rb +54 -54
- data/lib/chef/deprecation/provider/file.rb +198 -198
- data/lib/chef/deprecation/provider/remote_directory.rb +52 -52
- data/lib/chef/deprecation/provider/remote_file.rb +85 -85
- data/lib/chef/deprecation/provider/template.rb +63 -63
- data/lib/chef/deprecation/warnings.rb +37 -38
- data/lib/chef/digester.rb +74 -74
- data/lib/chef/dsl.rb +6 -6
- data/lib/chef/dsl/audit.rb +51 -51
- data/lib/chef/dsl/chef_provisioning.rb +57 -57
- data/lib/chef/dsl/cheffish.rb +64 -64
- data/lib/chef/dsl/core.rb +42 -0
- data/lib/chef/dsl/data_query.rb +89 -89
- data/lib/chef/dsl/declare_resource.rb +106 -108
- data/lib/chef/dsl/definitions.rb +43 -43
- data/lib/chef/dsl/include_attribute.rb +61 -61
- data/lib/chef/dsl/include_recipe.rb +44 -44
- data/lib/chef/dsl/method_missing.rb +75 -0
- data/lib/chef/dsl/platform_introspection.rb +254 -254
- data/lib/chef/dsl/powershell.rb +29 -29
- data/lib/chef/dsl/reboot_pending.rb +64 -64
- data/lib/chef/dsl/recipe.rb +89 -134
- data/lib/chef/dsl/registry_helper.rb +63 -63
- data/lib/chef/dsl/resources.rb +58 -58
- data/lib/chef/encrypted_data_bag_item.rb +155 -155
- data/lib/chef/encrypted_data_bag_item/assertions.rb +54 -54
- data/lib/chef/encrypted_data_bag_item/check_encrypted.rb +56 -56
- data/lib/chef/encrypted_data_bag_item/decryption_failure.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/decryptor.rb +227 -227
- data/lib/chef/encrypted_data_bag_item/encrypted_data_bag_item_assertions.rb +37 -37
- data/lib/chef/encrypted_data_bag_item/encryption_failure.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/encryptor.rb +225 -225
- data/lib/chef/encrypted_data_bag_item/unacceptable_encrypted_data_bag_item_format.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/unsupported_cipher.rb +22 -22
- data/lib/chef/encrypted_data_bag_item/unsupported_encrypted_data_bag_item_format.rb +22 -22
- data/lib/chef/environment.rb +326 -326
- data/lib/chef/event_dispatch/base.rb +426 -420
- data/lib/chef/event_dispatch/dispatcher.rb +62 -62
- data/lib/chef/event_dispatch/dsl.rb +65 -65
- data/lib/chef/event_dispatch/events_output_stream.rb +37 -37
- data/lib/chef/event_loggers/base.rb +62 -62
- data/lib/chef/event_loggers/windows_eventlog.rb +101 -101
- data/lib/chef/exceptions.rb +504 -504
- data/lib/chef/file_access_control.rb +75 -75
- data/lib/chef/file_access_control/unix.rb +290 -290
- data/lib/chef/file_access_control/windows.rb +335 -335
- data/lib/chef/file_cache.rb +221 -221
- data/lib/chef/file_content_management/content_base.rb +56 -56
- data/lib/chef/file_content_management/deploy.rb +37 -37
- data/lib/chef/file_content_management/deploy/cp.rb +48 -48
- data/lib/chef/file_content_management/deploy/mv_unix.rb +76 -76
- data/lib/chef/file_content_management/deploy/mv_windows.rb +103 -103
- data/lib/chef/file_content_management/tempfile.rb +97 -97
- data/lib/chef/formatters/base.rb +237 -237
- data/lib/chef/formatters/doc.rb +438 -422
- data/lib/chef/formatters/{error_descriptor.rb → error_description.rb} +69 -67
- data/lib/chef/formatters/error_inspectors.rb +19 -19
- data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +184 -184
- data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +154 -154
- data/lib/chef/formatters/error_inspectors/cookbook_resolve_error_inspector.rb +168 -168
- data/lib/chef/formatters/error_inspectors/cookbook_sync_error_inspector.rb +82 -82
- data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +128 -128
- data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +147 -147
- data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +124 -124
- data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +121 -121
- data/lib/chef/formatters/error_mapper.rb +85 -85
- data/lib/chef/formatters/indentable_output_stream.rb +170 -170
- data/lib/chef/formatters/minimal.rb +233 -233
- data/lib/chef/guard_interpreter.rb +32 -32
- data/lib/chef/guard_interpreter/default_guard_interpreter.rb +43 -43
- data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +138 -138
- data/lib/chef/handler.rb +235 -235
- data/lib/chef/handler/error_report.rb +33 -33
- data/lib/chef/handler/json_file.rb +63 -63
- data/lib/chef/http.rb +460 -430
- data/lib/chef/http/auth_credentials.rb +57 -57
- data/lib/chef/http/authenticator.rb +106 -106
- data/lib/chef/http/basic_client.rb +149 -169
- data/lib/chef/http/cookie_jar.rb +31 -31
- data/lib/chef/http/cookie_manager.rb +59 -59
- data/lib/chef/http/decompressor.rb +142 -142
- data/lib/chef/http/http_request.rb +186 -186
- data/lib/chef/http/json_input.rb +73 -73
- data/lib/chef/http/json_output.rb +78 -78
- data/lib/chef/http/json_to_model_output.rb +34 -34
- data/lib/chef/http/remote_request_id.rb +46 -46
- data/lib/chef/http/simple.rb +40 -40
- data/lib/chef/http/simple_json.rb +43 -43
- data/lib/chef/http/socketless_chef_zero_client.rb +208 -207
- data/lib/chef/http/ssl_policies.rb +130 -130
- data/lib/chef/http/validate_content_length.rb +114 -115
- data/lib/chef/json_compat.rb +164 -164
- data/lib/chef/key.rb +273 -273
- data/lib/chef/knife.rb +587 -587
- data/lib/chef/knife/bootstrap.rb +480 -480
- data/lib/chef/knife/bootstrap/chef_vault_handler.rb +159 -159
- data/lib/chef/knife/bootstrap/client_builder.rb +208 -208
- data/lib/chef/knife/bootstrap/templates/README.md +11 -11
- data/lib/chef/knife/bootstrap/templates/chef-full.erb +236 -236
- data/lib/chef/knife/client_bulk_delete.rb +104 -104
- data/lib/chef/knife/client_create.rb +111 -111
- data/lib/chef/knife/client_delete.rb +60 -60
- data/lib/chef/knife/client_edit.rb +53 -53
- data/lib/chef/knife/client_key_create.rb +67 -67
- data/lib/chef/knife/client_key_delete.rb +76 -76
- data/lib/chef/knife/client_key_edit.rb +79 -79
- data/lib/chef/knife/client_key_list.rb +69 -69
- data/lib/chef/knife/client_key_show.rb +76 -76
- data/lib/chef/knife/client_list.rb +42 -42
- data/lib/chef/knife/client_reregister.rb +59 -59
- data/lib/chef/knife/client_show.rb +49 -49
- data/lib/chef/knife/configure.rb +171 -171
- data/lib/chef/knife/configure_client.rb +50 -50
- data/lib/chef/knife/cookbook_bulk_delete.rb +71 -71
- data/lib/chef/knife/cookbook_create.rb +458 -448
- data/lib/chef/knife/cookbook_delete.rb +151 -151
- data/lib/chef/knife/cookbook_download.rb +143 -143
- data/lib/chef/knife/cookbook_list.rb +47 -47
- data/lib/chef/knife/cookbook_metadata.rb +107 -108
- data/lib/chef/knife/cookbook_metadata_from_file.rb +44 -44
- data/lib/chef/knife/cookbook_show.rb +98 -98
- data/lib/chef/knife/cookbook_site_download.rb +109 -109
- data/lib/chef/knife/cookbook_site_install.rb +192 -192
- data/lib/chef/knife/cookbook_site_list.rb +58 -58
- data/lib/chef/knife/cookbook_site_search.rb +46 -46
- data/lib/chef/knife/cookbook_site_share.rb +169 -169
- data/lib/chef/knife/cookbook_site_show.rb +55 -55
- data/lib/chef/knife/cookbook_site_unshare.rb +56 -56
- data/lib/chef/knife/cookbook_site_vendor.rb +46 -46
- data/lib/chef/knife/cookbook_test.rb +95 -95
- data/lib/chef/knife/cookbook_upload.rb +308 -308
- data/lib/chef/knife/core/bootstrap_context.rb +233 -233
- data/lib/chef/knife/core/cookbook_scm_repo.rb +159 -159
- data/lib/chef/knife/core/custom_manifest_loader.rb +69 -69
- data/lib/chef/knife/core/gem_glob_loader.rb +138 -138
- data/lib/chef/knife/core/generic_presenter.rb +222 -222
- data/lib/chef/knife/core/hashed_command_loader.rb +99 -99
- data/lib/chef/knife/core/node_editor.rb +130 -130
- data/lib/chef/knife/core/node_presenter.rb +159 -159
- data/lib/chef/knife/core/object_loader.rb +115 -115
- data/lib/chef/knife/core/status_presenter.rb +157 -157
- data/lib/chef/knife/core/subcommand_loader.rb +212 -212
- data/lib/chef/knife/core/text_formatter.rb +85 -85
- data/lib/chef/knife/core/ui.rb +284 -284
- data/lib/chef/knife/data_bag_create.rb +78 -78
- data/lib/chef/knife/data_bag_delete.rb +49 -49
- data/lib/chef/knife/data_bag_edit.rb +74 -74
- data/lib/chef/knife/data_bag_from_file.rb +114 -114
- data/lib/chef/knife/data_bag_list.rb +42 -42
- data/lib/chef/knife/data_bag_secret_options.rb +142 -142
- data/lib/chef/knife/data_bag_show.rb +69 -69
- data/lib/chef/knife/delete.rb +107 -107
- data/lib/chef/knife/deps.rb +140 -140
- data/lib/chef/knife/diff.rb +68 -68
- data/lib/chef/knife/download.rb +68 -68
- data/lib/chef/knife/edit.rb +72 -72
- data/lib/chef/knife/environment_compare.rb +127 -127
- data/lib/chef/knife/environment_create.rb +53 -53
- data/lib/chef/knife/environment_delete.rb +45 -45
- data/lib/chef/knife/environment_edit.rb +45 -45
- data/lib/chef/knife/environment_from_file.rb +82 -82
- data/lib/chef/knife/environment_list.rb +42 -42
- data/lib/chef/knife/environment_show.rb +48 -48
- data/lib/chef/knife/exec.rb +87 -87
- data/lib/chef/knife/help.rb +101 -101
- data/lib/chef/knife/help_topics.rb +4 -4
- data/lib/chef/knife/index_rebuild.rb +133 -133
- data/lib/chef/knife/key_create.rb +112 -112
- data/lib/chef/knife/key_create_base.rb +50 -50
- data/lib/chef/knife/key_delete.rb +55 -55
- data/lib/chef/knife/key_edit.rb +118 -118
- data/lib/chef/knife/key_edit_base.rb +55 -55
- data/lib/chef/knife/key_list.rb +88 -88
- data/lib/chef/knife/key_list_base.rb +45 -45
- data/lib/chef/knife/key_show.rb +53 -53
- data/lib/chef/knife/list.rb +157 -157
- data/lib/chef/knife/node_bulk_delete.rb +74 -74
- data/lib/chef/knife/node_create.rb +47 -47
- data/lib/chef/knife/node_delete.rb +46 -46
- data/lib/chef/knife/node_edit.rb +70 -70
- data/lib/chef/knife/node_environment_set.rb +54 -54
- data/lib/chef/knife/node_from_file.rb +51 -51
- data/lib/chef/knife/node_list.rb +44 -44
- data/lib/chef/knife/node_run_list_add.rb +104 -104
- data/lib/chef/knife/node_run_list_remove.rb +67 -67
- data/lib/chef/knife/node_run_list_set.rb +66 -66
- data/lib/chef/knife/node_show.rb +66 -66
- data/lib/chef/knife/null.rb +10 -10
- data/lib/chef/knife/osc_user_create.rb +97 -97
- data/lib/chef/knife/osc_user_delete.rb +51 -51
- data/lib/chef/knife/osc_user_edit.rb +58 -58
- data/lib/chef/knife/osc_user_list.rb +47 -47
- data/lib/chef/knife/osc_user_reregister.rb +64 -64
- data/lib/chef/knife/osc_user_show.rb +54 -54
- data/lib/chef/knife/raw.rb +103 -103
- data/lib/chef/knife/recipe_list.rb +32 -32
- data/lib/chef/knife/rehash.rb +65 -65
- data/lib/chef/knife/role_bulk_delete.rb +65 -65
- data/lib/chef/knife/role_create.rb +53 -53
- data/lib/chef/knife/role_delete.rb +46 -46
- data/lib/chef/knife/role_edit.rb +45 -45
- data/lib/chef/knife/role_env_run_list_add.rb +86 -86
- data/lib/chef/knife/role_env_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_env_run_list_remove.rb +57 -57
- data/lib/chef/knife/role_env_run_list_replace.rb +59 -59
- data/lib/chef/knife/role_env_run_list_set.rb +70 -70
- data/lib/chef/knife/role_from_file.rb +51 -51
- data/lib/chef/knife/role_list.rb +42 -42
- data/lib/chef/knife/role_run_list_add.rb +86 -86
- data/lib/chef/knife/role_run_list_clear.rb +55 -55
- data/lib/chef/knife/role_run_list_remove.rb +57 -57
- data/lib/chef/knife/role_run_list_replace.rb +59 -59
- data/lib/chef/knife/role_run_list_set.rb +70 -70
- data/lib/chef/knife/role_show.rb +49 -49
- data/lib/chef/knife/search.rb +201 -201
- data/lib/chef/knife/serve.rb +48 -48
- data/lib/chef/knife/show.rb +56 -56
- data/lib/chef/knife/ssh.rb +582 -572
- data/lib/chef/knife/ssl_check.rb +282 -281
- data/lib/chef/knife/ssl_fetch.rb +157 -157
- data/lib/chef/knife/status.rb +110 -110
- data/lib/chef/knife/tag_create.rb +52 -52
- data/lib/chef/knife/tag_delete.rb +60 -60
- data/lib/chef/knife/tag_list.rb +47 -47
- data/lib/chef/knife/upload.rb +70 -70
- data/lib/chef/knife/user_create.rb +150 -150
- data/lib/chef/knife/user_delete.rb +95 -95
- data/lib/chef/knife/user_edit.rb +81 -81
- data/lib/chef/knife/user_key_create.rb +69 -69
- data/lib/chef/knife/user_key_delete.rb +76 -76
- data/lib/chef/knife/user_key_edit.rb +79 -79
- data/lib/chef/knife/user_key_list.rb +69 -69
- data/lib/chef/knife/user_key_show.rb +76 -76
- data/lib/chef/knife/user_list.rb +45 -45
- data/lib/chef/knife/user_reregister.rb +89 -89
- data/lib/chef/knife/user_show.rb +78 -78
- data/lib/chef/knife/xargs.rb +266 -266
- data/lib/chef/local_mode.rb +128 -128
- data/lib/chef/log.rb +68 -68
- data/lib/chef/log/syslog.rb +45 -45
- data/lib/chef/log/winevt.rb +99 -99
- data/lib/chef/mash.rb +226 -226
- data/lib/chef/mixin/api_version_request_handling.rb +66 -66
- data/lib/chef/mixin/checksum.rb +32 -32
- data/lib/chef/mixin/command.rb +193 -193
- data/lib/chef/mixin/command/unix.rb +220 -220
- data/lib/chef/mixin/command/windows.rb +71 -71
- data/lib/chef/mixin/convert_to_class_name.rb +126 -126
- data/lib/chef/mixin/create_path.rb +73 -73
- data/lib/chef/mixin/deep_merge.rb +140 -140
- data/lib/chef/mixin/deprecation.rb +123 -123
- data/lib/chef/mixin/descendants_tracker.rb +81 -81
- data/lib/chef/mixin/enforce_ownership_and_permissions.rb +39 -39
- data/lib/chef/mixin/file_class.rb +35 -35
- data/lib/chef/mixin/from_file.rb +50 -50
- data/lib/chef/mixin/get_source_from_package.rb +47 -47
- data/lib/chef/mixin/homebrew_user.rb +68 -68
- data/lib/chef/mixin/language.rb +48 -48
- data/lib/chef/mixin/language_include_attribute.rb +34 -34
- data/lib/chef/mixin/language_include_recipe.rb +31 -31
- data/lib/chef/mixin/lazy_module_include.rb +77 -0
- data/lib/chef/mixin/params_validate.rb +489 -489
- data/lib/chef/mixin/path_sanity.rb +68 -68
- data/lib/chef/mixin/powershell_out.rb +98 -98
- data/lib/chef/mixin/powershell_type_coercions.rb +84 -84
- data/lib/chef/mixin/properties.rb +303 -303
- data/lib/chef/mixin/provides.rb +28 -28
- data/lib/chef/mixin/proxified_socket.rb +42 -38
- data/lib/chef/mixin/recipe_definition_dsl_core.rb +35 -35
- data/lib/chef/mixin/securable.rb +196 -196
- data/lib/chef/mixin/shell_out.rb +117 -117
- data/lib/chef/mixin/subclass_directive.rb +37 -37
- data/lib/chef/mixin/template.rb +262 -262
- data/lib/chef/mixin/unformatter.rb +32 -32
- data/lib/chef/mixin/uris.rb +43 -43
- data/lib/chef/mixin/which.rb +37 -37
- data/lib/chef/mixin/why_run.rb +331 -331
- data/lib/chef/mixin/wide_string.rb +72 -72
- data/lib/chef/mixin/windows_architecture_helper.rb +114 -114
- data/lib/chef/mixin/windows_env_helper.rb +67 -67
- data/lib/chef/mixin/xml_escape.rb +140 -140
- data/lib/chef/mixins.rb +13 -13
- data/lib/chef/monkey_patches/net-ssh-multi.rb +141 -140
- data/lib/chef/monkey_patches/net_http.rb +60 -60
- data/lib/chef/monkey_patches/webrick-utils.rb +51 -51
- data/lib/chef/monkey_patches/win32/registry.rb +75 -72
- data/lib/chef/monologger.rb +88 -88
- data/lib/chef/nil_argument.rb +3 -3
- data/lib/chef/node.rb +700 -700
- data/lib/chef/node/attribute.rb +586 -586
- data/lib/chef/node/attribute_collections.rb +323 -323
- data/lib/chef/node/immutable_collections.rb +219 -219
- data/lib/chef/node_map.rb +222 -222
- data/lib/chef/null_logger.rb +72 -72
- data/lib/chef/org.rb +149 -149
- data/lib/chef/platform.rb +30 -30
- data/lib/chef/platform/handler_map.rb +40 -40
- data/lib/chef/platform/priority_map.rb +41 -41
- data/lib/chef/platform/provider_handler_map.rb +29 -29
- data/lib/chef/platform/provider_mapping.rb +214 -214
- data/lib/chef/platform/provider_priority_map.rb +11 -11
- data/lib/chef/platform/query_helpers.rb +112 -112
- data/lib/chef/platform/rebooter.rb +54 -54
- data/lib/chef/platform/resource_handler_map.rb +29 -29
- data/lib/chef/platform/resource_priority_map.rb +11 -11
- data/lib/chef/platform/service_helpers.rb +122 -122
- data/lib/chef/policy_builder.rb +42 -42
- data/lib/chef/policy_builder/dynamic.rb +185 -185
- data/lib/chef/policy_builder/expand_node_object.rb +278 -278
- data/lib/chef/policy_builder/policyfile.rb +523 -527
- data/lib/chef/property.rb +674 -673
- data/lib/chef/provider.rb +458 -461
- data/lib/chef/provider/apt_repository.rb +255 -0
- data/lib/chef/provider/apt_update.rb +80 -79
- data/lib/chef/provider/batch.rb +45 -45
- data/lib/chef/provider/breakpoint.rb +38 -38
- data/lib/chef/provider/cookbook_file.rb +53 -53
- data/lib/chef/provider/cookbook_file/content.rb +49 -49
- data/lib/chef/provider/cron.rb +263 -263
- data/lib/chef/provider/cron/aix.rb +50 -50
- data/lib/chef/provider/cron/solaris.rb +22 -22
- data/lib/chef/provider/cron/unix.rb +83 -83
- data/lib/chef/provider/deploy.rb +476 -476
- data/lib/chef/provider/deploy/revision.rb +109 -109
- data/lib/chef/provider/deploy/timestamped.rb +34 -34
- data/lib/chef/provider/directory.rb +152 -152
- data/lib/chef/provider/dsc_resource.rb +197 -197
- data/lib/chef/provider/dsc_script.rb +185 -185
- data/lib/chef/provider/env.rb +169 -169
- data/lib/chef/provider/env/windows.rb +72 -72
- data/lib/chef/provider/erl_call.rb +108 -108
- data/lib/chef/provider/execute.rb +125 -125
- data/lib/chef/provider/file.rb +495 -495
- data/lib/chef/provider/file/content.rb +39 -39
- data/lib/chef/provider/git.rb +332 -332
- data/lib/chef/provider/group.rb +183 -183
- data/lib/chef/provider/group/aix.rb +86 -86
- data/lib/chef/provider/group/dscl.rb +170 -170
- data/lib/chef/provider/group/gpasswd.rb +58 -58
- data/lib/chef/provider/group/groupadd.rb +137 -137
- data/lib/chef/provider/group/groupmod.rb +128 -128
- data/lib/chef/provider/group/pw.rb +140 -140
- data/lib/chef/provider/group/suse.rb +64 -62
- data/lib/chef/provider/group/usermod.rb +91 -91
- data/lib/chef/provider/group/windows.rb +98 -98
- data/lib/chef/provider/http_request.rb +122 -122
- data/lib/chef/provider/ifconfig.rb +226 -226
- data/lib/chef/provider/ifconfig/aix.rb +99 -99
- data/lib/chef/provider/ifconfig/debian.rb +84 -84
- data/lib/chef/provider/ifconfig/redhat.rb +48 -48
- data/lib/chef/provider/launchd.rb +208 -208
- data/lib/chef/provider/link.rb +159 -159
- data/lib/chef/provider/log.rb +57 -57
- data/lib/chef/provider/lwrp_base.rb +99 -99
- data/lib/chef/provider/mdadm.rb +92 -92
- data/lib/chef/provider/mount.rb +169 -173
- data/lib/chef/provider/mount/aix.rb +180 -180
- data/lib/chef/provider/mount/mount.rb +270 -270
- data/lib/chef/provider/mount/solaris.rb +271 -271
- data/lib/chef/provider/mount/windows.rb +92 -86
- data/lib/chef/provider/noop.rb +37 -0
- data/lib/chef/provider/ohai.rb +49 -49
- data/lib/chef/provider/osx_profile.rb +256 -256
- data/lib/chef/provider/package.rb +565 -565
- data/lib/chef/provider/package/aix.rb +136 -136
- data/lib/chef/provider/package/apt.rb +185 -185
- data/lib/chef/provider/package/chocolatey.rb +275 -275
- data/lib/chef/provider/package/dpkg.rb +226 -226
- data/lib/chef/provider/package/easy_install.rb +133 -133
- data/lib/chef/provider/package/freebsd/base.rb +89 -89
- data/lib/chef/provider/package/freebsd/pkg.rb +114 -114
- data/lib/chef/provider/package/freebsd/pkgng.rb +78 -78
- data/lib/chef/provider/package/freebsd/port.rb +60 -60
- data/lib/chef/provider/package/homebrew.rb +137 -137
- data/lib/chef/provider/package/ips.rb +91 -91
- data/lib/chef/provider/package/macports.rb +101 -101
- data/lib/chef/provider/package/openbsd.rb +136 -136
- data/lib/chef/provider/package/pacman.rb +104 -104
- data/lib/chef/provider/package/paludis.rb +86 -86
- data/lib/chef/provider/package/portage.rb +140 -140
- data/lib/chef/provider/package/rpm.rb +123 -123
- data/lib/chef/provider/package/rubygems.rb +586 -586
- data/lib/chef/provider/package/smartos.rb +92 -92
- data/lib/chef/provider/package/solaris.rb +138 -138
- data/lib/chef/provider/package/windows.rb +269 -269
- data/lib/chef/provider/package/windows/exe.rb +117 -117
- data/lib/chef/provider/package/windows/msi.rb +93 -93
- data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +89 -89
- data/lib/chef/provider/package/yum-dump.py +307 -307
- data/lib/chef/provider/package/yum.rb +1421 -1421
- data/lib/chef/provider/package/zypper.rb +143 -143
- data/lib/chef/provider/powershell_script.rb +215 -215
- data/lib/chef/provider/reboot.rb +70 -70
- data/lib/chef/provider/registry_key.rb +155 -155
- data/lib/chef/provider/remote_directory.rb +281 -281
- data/lib/chef/provider/remote_file.rb +53 -53
- data/lib/chef/provider/remote_file/cache_control_data.rb +195 -195
- data/lib/chef/provider/remote_file/content.rb +81 -81
- data/lib/chef/provider/remote_file/fetcher.rb +57 -55
- data/lib/chef/provider/remote_file/ftp.rb +172 -183
- data/lib/chef/provider/remote_file/http.rb +135 -117
- data/lib/chef/provider/remote_file/local_file.rb +60 -60
- data/lib/chef/provider/remote_file/network_file.rb +48 -48
- data/lib/chef/provider/remote_file/sftp.rb +105 -0
- data/lib/chef/provider/resource_update.rb +52 -52
- data/lib/chef/provider/route.rb +229 -229
- data/lib/chef/provider/ruby_block.rb +44 -44
- data/lib/chef/provider/script.rb +85 -85
- data/lib/chef/provider/service.rb +259 -250
- data/lib/chef/provider/service/aix.rb +129 -129
- data/lib/chef/provider/service/aixinit.rb +117 -117
- data/lib/chef/provider/service/arch.rb +118 -118
- data/lib/chef/provider/service/debian.rb +182 -182
- data/lib/chef/provider/service/freebsd.rb +195 -195
- data/lib/chef/provider/service/gentoo.rb +71 -71
- data/lib/chef/provider/service/init.rb +94 -94
- data/lib/chef/provider/service/insserv.rb +59 -59
- data/lib/chef/provider/service/invokercd.rb +41 -41
- data/lib/chef/provider/service/macosx.rb +250 -250
- data/lib/chef/provider/service/openbsd.rb +217 -217
- data/lib/chef/provider/service/redhat.rb +126 -120
- data/lib/chef/provider/service/simple.rb +175 -175
- data/lib/chef/provider/service/solaris.rb +122 -117
- data/lib/chef/provider/service/systemd.rb +188 -155
- data/lib/chef/provider/service/upstart.rb +242 -242
- data/lib/chef/provider/service/windows.rb +313 -313
- data/lib/chef/provider/subversion.rb +233 -221
- data/lib/chef/provider/template.rb +65 -65
- data/lib/chef/provider/template/content.rb +70 -70
- data/lib/chef/provider/template_finder.rb +62 -62
- data/lib/chef/provider/user.rb +211 -211
- data/lib/chef/provider/user/aix.rb +97 -97
- data/lib/chef/provider/user/dscl.rb +710 -710
- data/lib/chef/provider/user/pw.rb +114 -114
- data/lib/chef/provider/user/solaris.rb +121 -121
- data/lib/chef/provider/user/useradd.rb +163 -163
- data/lib/chef/provider/user/windows.rb +128 -128
- data/lib/chef/provider/whyrun_safe_ruby_block.rb +32 -32
- data/lib/chef/provider/windows_script.rb +72 -72
- data/lib/chef/provider_resolver.rb +170 -170
- data/lib/chef/providers.rb +145 -142
- data/lib/chef/recipe.rb +118 -119
- data/lib/chef/request_id.rb +37 -37
- data/lib/chef/reserved_names.rb +9 -9
- data/lib/chef/resource.rb +1581 -1581
- data/lib/chef/resource/action_class.rb +90 -87
- data/lib/chef/resource/apt_package.rb +32 -32
- data/lib/chef/resource/apt_repository.rb +47 -0
- data/lib/chef/resource/apt_update.rb +33 -33
- data/lib/chef/resource/bash.rb +33 -33
- data/lib/chef/resource/batch.rb +33 -33
- data/lib/chef/resource/bff_package.rb +27 -27
- data/lib/chef/resource/breakpoint.rb +32 -32
- data/lib/chef/resource/chef_gem.rb +51 -51
- data/lib/chef/resource/chocolatey_package.rb +39 -39
- data/lib/chef/resource/conditional.rb +127 -127
- data/lib/chef/resource/conditional_action_not_nothing.rb +48 -48
- data/lib/chef/resource/cookbook_file.rb +49 -49
- data/lib/chef/resource/cron.rb +216 -216
- data/lib/chef/resource/csh.rb +33 -33
- data/lib/chef/resource/deploy.rb +443 -443
- data/lib/chef/resource/deploy_revision.rb +31 -31
- data/lib/chef/resource/directory.rb +62 -62
- data/lib/chef/resource/dpkg_package.rb +30 -30
- data/lib/chef/resource/dsc_resource.rb +121 -121
- data/lib/chef/resource/dsc_script.rb +140 -140
- data/lib/chef/resource/easy_install_package.rb +32 -32
- data/lib/chef/resource/env.rb +65 -65
- data/lib/chef/resource/erl_call.rb +85 -85
- data/lib/chef/resource/execute.rb +172 -172
- data/lib/chef/resource/file.rb +83 -83
- data/lib/chef/resource/file/verification.rb +128 -128
- data/lib/chef/resource/freebsd_package.rb +62 -62
- data/lib/chef/resource/gem_package.rb +41 -41
- data/lib/chef/resource/git.rb +44 -44
- data/lib/chef/resource/group.rb +102 -102
- data/lib/chef/resource/homebrew_package.rb +34 -34
- data/lib/chef/resource/http_request.rb +66 -66
- data/lib/chef/resource/ifconfig.rb +147 -147
- data/lib/chef/resource/ips_package.rb +34 -34
- data/lib/chef/resource/ksh.rb +32 -32
- data/lib/chef/resource/launchd.rb +104 -104
- data/lib/chef/resource/link.rb +107 -107
- data/lib/chef/resource/log.rb +76 -76
- data/lib/chef/resource/lwrp_base.rb +124 -124
- data/lib/chef/resource/macosx_service.rb +58 -58
- data/lib/chef/resource/macports_package.rb +27 -27
- data/lib/chef/resource/mdadm.rb +103 -103
- data/lib/chef/resource/mount.rb +187 -187
- data/lib/chef/resource/ohai.rb +53 -53
- data/lib/chef/resource/openbsd_package.rb +35 -35
- data/lib/chef/resource/osx_profile.rb +74 -74
- data/lib/chef/resource/package.rb +47 -47
- data/lib/chef/resource/pacman_package.rb +28 -28
- data/lib/chef/resource/paludis_package.rb +33 -33
- data/lib/chef/resource/perl.rb +32 -32
- data/lib/chef/resource/portage_package.rb +32 -32
- data/lib/chef/resource/powershell_script.rb +50 -50
- data/lib/chef/resource/python.rb +31 -31
- data/lib/chef/resource/reboot.rb +48 -48
- data/lib/chef/resource/registry_key.rb +144 -144
- data/lib/chef/resource/remote_directory.rb +122 -122
- data/lib/chef/resource/remote_file.rb +158 -149
- data/lib/chef/resource/resource_notification.rb +122 -122
- data/lib/chef/resource/route.rb +137 -137
- data/lib/chef/resource/rpm_package.rb +32 -32
- data/lib/chef/resource/ruby.rb +31 -31
- data/lib/chef/resource/ruby_block.rb +53 -53
- data/lib/chef/resource/scm.rb +185 -185
- data/lib/chef/resource/script.rb +74 -74
- data/lib/chef/resource/service.rb +217 -208
- data/lib/chef/resource/smartos_package.rb +29 -29
- data/lib/chef/resource/solaris_package.rb +31 -31
- data/lib/chef/resource/subversion.rb +44 -44
- data/lib/chef/resource/template.rb +215 -215
- data/lib/chef/resource/timestamped_deploy.rb +26 -26
- data/lib/chef/resource/user.rb +160 -160
- data/lib/chef/resource/whyrun_safe_ruby_block.rb +24 -24
- data/lib/chef/resource/windows_package.rb +55 -55
- data/lib/chef/resource/windows_script.rb +65 -65
- data/lib/chef/resource/windows_service.rb +71 -71
- data/lib/chef/resource/yum_package.rb +47 -47
- data/lib/chef/resource/zypper_package.rb +28 -28
- data/lib/chef/resource_builder.rb +151 -151
- data/lib/chef/resource_collection.rb +131 -89
- data/lib/chef/resource_collection/resource_collection_serialization.rb +59 -59
- data/lib/chef/resource_collection/resource_list.rb +90 -90
- data/lib/chef/resource_collection/resource_set.rb +170 -170
- data/lib/chef/resource_collection/stepable_iterator.rb +124 -124
- data/lib/chef/resource_definition.rb +68 -68
- data/lib/chef/resource_definition_list.rb +38 -38
- data/lib/chef/resource_reporter.rb +327 -327
- data/lib/chef/resource_resolver.rb +185 -185
- data/lib/chef/resources.rb +89 -88
- data/lib/chef/rest.rb +209 -209
- data/lib/chef/role.rb +280 -280
- data/lib/chef/run_context.rb +694 -670
- data/lib/chef/run_context/cookbook_compiler.rb +290 -289
- data/lib/chef/run_list.rb +168 -168
- data/lib/chef/run_list/run_list_expansion.rb +234 -234
- data/lib/chef/run_list/run_list_item.rb +98 -98
- data/lib/chef/run_list/versioned_recipe_list.rb +102 -102
- data/lib/chef/run_lock.rb +197 -197
- data/lib/chef/run_status.rb +125 -125
- data/lib/chef/runner.rb +143 -141
- data/lib/chef/sandbox.rb +20 -20
- data/lib/chef/scan_access_control.rb +138 -138
- data/lib/chef/search/query.rb +180 -180
- data/lib/chef/server_api.rb +78 -78
- data/lib/chef/shell.rb +327 -327
- data/lib/chef/shell/ext.rb +593 -593
- data/lib/chef/shell/model_wrapper.rb +120 -120
- data/lib/chef/shell/shell_session.rb +299 -299
- data/lib/chef/shell_out.rb +13 -13
- data/lib/chef/tasks/chef_repo.rake +200 -200
- data/lib/chef/user.rb +199 -199
- data/lib/chef/user_v1.rb +330 -330
- data/lib/chef/util/backup.rb +94 -94
- data/lib/chef/util/diff.rb +184 -184
- data/lib/chef/util/dsc/configuration_generator.rb +139 -139
- data/lib/chef/util/dsc/lcm_output_parser.rb +137 -137
- data/lib/chef/util/dsc/local_configuration_manager.rb +141 -141
- data/lib/chef/util/dsc/resource_info.rb +26 -26
- data/lib/chef/util/dsc/resource_store.rb +109 -109
- data/lib/chef/util/editor.rb +91 -91
- data/lib/chef/util/file_edit.rb +100 -100
- data/lib/chef/util/path_helper.rb +25 -25
- data/lib/chef/util/powershell/cmdlet.rb +170 -170
- data/lib/chef/util/powershell/cmdlet_result.rb +61 -61
- data/lib/chef/util/powershell/ps_credential.rb +41 -41
- data/lib/chef/util/selinux.rb +92 -92
- data/lib/chef/util/threaded_job_queue.rb +61 -61
- data/lib/chef/util/windows.rb +24 -24
- data/lib/chef/util/windows/net_group.rb +84 -84
- data/lib/chef/util/windows/net_use.rb +85 -85
- data/lib/chef/util/windows/net_user.rb +170 -170
- data/lib/chef/util/windows/volume.rb +59 -59
- data/lib/chef/version.rb +34 -34
- data/lib/chef/version/platform.rb +44 -44
- data/lib/chef/version_class.rb +70 -70
- data/lib/chef/version_constraint.rb +118 -118
- data/lib/chef/version_constraint/platform.rb +26 -26
- data/lib/chef/whitelist.rb +86 -86
- data/lib/chef/win32/api.rb +374 -374
- data/lib/chef/win32/api/crypto.rb +63 -63
- data/lib/chef/win32/api/error.rb +953 -953
- data/lib/chef/win32/api/file.rb +625 -625
- data/lib/chef/win32/api/installer.rb +165 -165
- data/lib/chef/win32/api/memory.rb +105 -105
- data/lib/chef/win32/api/net.rb +312 -312
- data/lib/chef/win32/api/process.rb +42 -42
- data/lib/chef/win32/api/psapi.rb +51 -51
- data/lib/chef/win32/api/registry.rb +51 -51
- data/lib/chef/win32/api/security.rb +460 -460
- data/lib/chef/win32/api/synchronization.rb +89 -89
- data/lib/chef/win32/api/system.rb +238 -238
- data/lib/chef/win32/api/unicode.rb +135 -135
- data/lib/chef/win32/crypto.rb +50 -50
- data/lib/chef/win32/error.rb +86 -86
- data/lib/chef/win32/eventlog.rb +31 -31
- data/lib/chef/win32/file.rb +218 -218
- data/lib/chef/win32/file/info.rb +99 -99
- data/lib/chef/win32/file/version_info.rb +93 -93
- data/lib/chef/win32/handle.rb +55 -55
- data/lib/chef/win32/memory.rb +101 -101
- data/lib/chef/win32/mutex.rb +116 -116
- data/lib/chef/win32/net.rb +311 -311
- data/lib/chef/win32/process.rb +97 -97
- data/lib/chef/win32/registry.rb +374 -372
- data/lib/chef/win32/security.rb +665 -665
- data/lib/chef/win32/security/ace.rb +123 -123
- data/lib/chef/win32/security/acl.rb +103 -103
- data/lib/chef/win32/security/securable_object.rb +109 -109
- data/lib/chef/win32/security/security_descriptor.rb +93 -93
- data/lib/chef/win32/security/sid.rb +304 -304
- data/lib/chef/win32/security/token.rb +72 -72
- data/lib/chef/win32/system.rb +62 -62
- data/lib/chef/win32/unicode.rb +60 -60
- data/lib/chef/win32/version.rb +158 -158
- data/lib/chef/workstation_config_loader.rb +23 -23
- data/spec/data/apt/chef-integration-test-1.0/debian/changelog +5 -5
- data/spec/data/apt/chef-integration-test-1.0/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test-1.0/debian/control +13 -13
- data/spec/data/apt/chef-integration-test-1.0/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test-1.0/debian/files +1 -1
- data/spec/data/apt/chef-integration-test-1.0/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test-1.0/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/changelog +11 -11
- data/spec/data/apt/chef-integration-test-1.1/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/control +13 -13
- data/spec/data/apt/chef-integration-test-1.1/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test-1.1/debian/files +1 -1
- data/spec/data/apt/chef-integration-test-1.1/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test-1.1/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -5
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -45
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -10
- data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -13
- data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -34
- data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -1
- data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -13
- data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -1
- data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -18
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -91
- data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -31
- data/spec/data/apt/chef-integration-test_1.0-1_amd64.changes +22 -22
- data/spec/data/apt/chef-integration-test_1.1-1_amd64.changes +22 -22
- data/spec/data/apt/var/www/apt/conf/distributions +7 -7
- data/spec/data/apt/var/www/apt/conf/incoming +4 -4
- data/spec/data/apt/var/www/apt/conf/pulls +3 -3
- data/spec/data/apt/var/www/apt/db/version +4 -4
- data/spec/data/apt/var/www/apt/dists/sid/Release +19 -19
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Packages +16 -16
- data/spec/data/apt/var/www/apt/dists/sid/main/binary-amd64/Release +5 -5
- data/spec/data/bootstrap/encrypted_data_bag_secret +1 -1
- data/spec/data/bootstrap/no_proxy.erb +2 -2
- data/spec/data/bootstrap/secret.erb +9 -9
- data/spec/data/bootstrap/test-hints.erb +12 -12
- data/spec/data/bootstrap/test.erb +1 -1
- data/spec/data/cb_version_cookbooks/tatft/README.rdoc +2 -2
- data/spec/data/cb_version_cookbooks/tatft/attributes/default.rb +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-600hhz-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ahd2gq-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-api8ux-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-b0r1m1-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-bfygsi-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-el14l6-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ivrl3y-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-kkbs85-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ory1ux-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-pgsq76-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ra8uim-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t7k1g-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-t8g0sv-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0 +1 -1
- data/spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0 +1 -1
- data/spec/data/client.d_00/00-foo.rb +2 -2
- data/spec/data/client.d_00/01-bar.rb +1 -1
- data/spec/data/client.d_00/bar +1 -1
- data/spec/data/client.d_01/foo/bar.rb +1 -1
- data/spec/data/client.d_02/foo.rb/foo.txt +1 -1
- data/spec/data/config.rb +6 -6
- data/spec/data/cookbooks/angrybash/metadata.rb +2 -2
- data/spec/data/cookbooks/angrybash/recipes/default.rb +8 -8
- data/spec/data/cookbooks/apache2/files/default/apache2_module_conf_generate.pl +2 -2
- data/spec/data/cookbooks/apache2/metadata.rb +2 -2
- data/spec/data/cookbooks/apache2/recipes/default.rb +2 -2
- data/spec/data/cookbooks/borken/metadata.rb +2 -2
- data/spec/data/cookbooks/borken/recipes/default.rb +1 -1
- data/spec/data/cookbooks/borken/templates/default/borken.erb +1 -1
- data/spec/data/cookbooks/chefignore +8 -8
- data/spec/data/cookbooks/ignorken/files/default/not_me.rb +2 -2
- data/spec/data/cookbooks/ignorken/metadata.rb +2 -2
- data/spec/data/cookbooks/ignorken/recipes/ignoreme.rb +1 -1
- data/spec/data/cookbooks/ignorken/templates/ubuntu-12.10/not_me.rb +2 -2
- data/spec/data/cookbooks/java/files/default/java.response +1 -1
- data/spec/data/cookbooks/java/metadata.rb +2 -2
- data/spec/data/cookbooks/name-mismatch-versionnumber/README.md +4 -4
- data/spec/data/cookbooks/name-mismatch-versionnumber/metadata.rb +8 -8
- data/spec/data/cookbooks/name-mismatch-versionnumber/recipes/default.rb +8 -8
- data/spec/data/cookbooks/openldap/attributes/default.rb +16 -16
- data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
- data/spec/data/cookbooks/openldap/definitions/client.rb +5 -5
- data/spec/data/cookbooks/openldap/definitions/server.rb +5 -5
- data/spec/data/cookbooks/openldap/files/default/.dotfile +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/.a_dotdir/.a_dotfile_in_a_dotdir +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/not_a_template.erb +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file1.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remote_dir_file2.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/.a_dotfile +1 -1
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file1.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/remotesubdir/remote_subdir_file2.txt +2 -2
- data/spec/data/cookbooks/openldap/files/default/remotedir/subdir_with_no_file_just_a_subsubdir/the_subsubdir/some_file.txt +3 -3
- data/spec/data/cookbooks/openldap/libraries/openldap.rb +4 -4
- data/spec/data/cookbooks/openldap/libraries/openldap/version.rb +3 -3
- data/spec/data/cookbooks/openldap/metadata.rb +8 -8
- data/spec/data/cookbooks/openldap/recipes/default.rb +4 -4
- data/spec/data/cookbooks/openldap/recipes/gigantor.rb +3 -3
- data/spec/data/cookbooks/openldap/recipes/one.rb +15 -15
- data/spec/data/cookbooks/openldap/recipes/return.rb +2 -2
- data/spec/data/cookbooks/openldap/templates/default/helper_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -14
- data/spec/data/cookbooks/openldap/templates/default/helpers_via_partial_test.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/no_windows_line_endings.erb +4 -4
- data/spec/data/cookbooks/openldap/templates/default/openldap_variable_stuff.conf.erb +1 -1
- data/spec/data/cookbooks/openldap/templates/default/test.erb +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-file.seed +1 -1
- data/spec/data/cookbooks/preseed/files/default/preseed-template.seed +4 -4
- data/spec/data/cookbooks/preseed/metadata.rb +2 -2
- data/spec/data/cookbooks/preseed/templates/default/preseed-template-variables.seed +1 -1
- data/spec/data/cookbooks/preseed/templates/default/preseed-template.seed +1 -1
- data/spec/data/cookbooks/supports-platform-constraints/metadata.rb +5 -5
- data/spec/data/definitions/test.rb +4 -4
- data/spec/data/environment-config.rb +4 -4
- data/spec/data/file-providers-method-snapshot-chef-11-4.json +127 -127
- data/spec/data/fileedit/hosts +4 -4
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/README.md +4 -4
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/metadata.rb +13 -13
- data/spec/data/incomplete-metadata-chef-repo/incomplete-metadata/recipes/default.rb +8 -8
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/README.md +4 -4
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/metadata.rb +9 -9
- data/spec/data/invalid-metadata-chef-repo/invalid-metadata/recipes/default.rb +8 -8
- data/spec/data/kitchen/chefignore +6 -6
- data/spec/data/kitchen/openldap/attributes/default.rb +3 -3
- data/spec/data/kitchen/openldap/attributes/robinson.rb +2 -2
- data/spec/data/kitchen/openldap/definitions/client.rb +3 -3
- data/spec/data/kitchen/openldap/definitions/drewbarrymore.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/gigantor.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/ignoreme.rb +2 -2
- data/spec/data/kitchen/openldap/recipes/woot.rb +3 -3
- data/spec/data/knife_subcommand/test_explicit_category.rb +6 -6
- data/spec/data/knife_subcommand/test_name_mapping.rb +4 -4
- data/spec/data/knife_subcommand/test_yourself.rb +21 -21
- data/spec/data/lwrp/providers/buck_passer.rb +28 -28
- data/spec/data/lwrp/providers/buck_passer_2.rb +26 -26
- data/spec/data/lwrp/providers/embedded_resource_accesses_providers_scope.rb +28 -28
- data/spec/data/lwrp/providers/inline_compiler.rb +26 -26
- data/spec/data/lwrp/providers/monkey_name_printer.rb +5 -5
- data/spec/data/lwrp/providers/paint_drying_watcher.rb +7 -7
- data/spec/data/lwrp/providers/thumb_twiddler.rb +7 -7
- data/spec/data/lwrp/resources/bar.rb +2 -2
- data/spec/data/lwrp/resources/foo.rb +4 -4
- data/spec/data/lwrp/resources_with_default_attributes/nodeattr.rb +1 -1
- data/spec/data/lwrp_override/providers/buck_passer.rb +5 -5
- data/spec/data/lwrp_override/resources/foo.rb +10 -10
- data/spec/data/mac_users/10.7-8.plist.xml +559 -559
- data/spec/data/mac_users/10.7-8.shadow.xml +11 -11
- data/spec/data/mac_users/10.7.plist.xml +559 -559
- data/spec/data/mac_users/10.7.shadow.xml +11 -11
- data/spec/data/mac_users/10.8.plist.xml +559 -559
- data/spec/data/mac_users/10.8.shadow.xml +21 -21
- data/spec/data/mac_users/10.9.plist.xml +560 -560
- data/spec/data/mac_users/10.9.shadow.xml +21 -21
- data/spec/data/metadata/quick_start/metadata.rb +19 -19
- data/spec/data/nested.json +2 -2
- data/spec/data/nodes/default.rb +15 -15
- data/spec/data/nodes/test.example.com.rb +17 -17
- data/spec/data/nodes/test.rb +15 -15
- data/spec/data/null_config.rb +1 -1
- data/spec/data/object_loader/environments/test.json +7 -7
- data/spec/data/object_loader/environments/test.rb +2 -2
- data/spec/data/object_loader/environments/test_json_class.json +8 -8
- data/spec/data/object_loader/nodes/test.json +7 -7
- data/spec/data/object_loader/nodes/test.rb +2 -2
- data/spec/data/object_loader/nodes/test_json_class.json +8 -8
- data/spec/data/object_loader/roles/test.json +7 -7
- data/spec/data/object_loader/roles/test.rb +2 -2
- data/spec/data/object_loader/roles/test_json_class.json +8 -8
- data/spec/data/partial_one.erb +1 -1
- data/spec/data/recipes/test.rb +7 -7
- data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -4
- data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -3
- data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -3
- data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -3
- data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -24
- data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -3
- data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -3
- data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -2
- data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -3
- data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -1
- data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
- data/spec/data/run_context/cookbooks/test/definitions/new_animals.rb +9 -9
- data/spec/data/run_context/cookbooks/test/definitions/new_cat.rb +5 -5
- data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -1
- data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -1
- data/spec/data/run_context/cookbooks/test/recipes/default.rb +5 -5
- data/spec/data/run_context/cookbooks/test/recipes/one.rb +7 -7
- data/spec/data/run_context/cookbooks/test/recipes/two.rb +7 -7
- data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -1
- data/spec/data/run_context/nodes/run_context.rb +5 -5
- data/spec/data/search_queries_to_transform.txt +98 -98
- data/spec/data/shef-config.rb +10 -10
- data/spec/data/ssl/5e707473.0 +18 -18
- data/spec/data/ssl/chef-rspec.cert +27 -27
- data/spec/data/ssl/chef-rspec.key +27 -27
- data/spec/data/ssl/key.pem +15 -15
- data/spec/data/ssl/private_key.pem +27 -27
- data/spec/data/ssl/private_key_with_whitespace.pem +32 -32
- data/spec/data/standalone_cookbook/chefignore +9 -9
- data/spec/data/standalone_cookbook/recipes/default.rb +2 -2
- data/spec/data/trusted_certs/example.crt +22 -22
- data/spec/data/trusted_certs/intermediate.pem +27 -27
- data/spec/data/trusted_certs/opscode.pem +57 -57
- data/spec/data/trusted_certs/root.pem +22 -22
- data/spec/functional/application_spec.rb +58 -58
- data/spec/functional/assets/chefinittest +34 -34
- data/spec/functional/assets/testchefsubsys +10 -10
- data/spec/functional/audit/rspec_formatter_spec.rb +54 -54
- data/spec/functional/audit/runner_spec.rb +121 -121
- data/spec/functional/dsl/reboot_pending_spec.rb +106 -106
- data/spec/functional/dsl/registry_helper_spec.rb +61 -61
- data/spec/functional/event_loggers/windows_eventlog_spec.rb +101 -101
- data/spec/functional/file_content_management/deploy_strategies_spec.rb +229 -229
- data/spec/functional/http/simple_spec.rb +140 -140
- data/spec/functional/knife/configure_spec.rb +33 -33
- data/spec/functional/knife/cookbook_delete_spec.rb +167 -167
- data/spec/functional/knife/exec_spec.rb +55 -55
- data/spec/functional/knife/rehash_spec.rb +39 -39
- data/spec/functional/knife/smoke_test.rb +42 -42
- data/spec/functional/knife/ssh_spec.rb +284 -284
- data/spec/functional/mixin/powershell_out_spec.rb +43 -43
- data/spec/functional/mixin/shell_out_spec.rb +48 -48
- data/spec/functional/notifications_spec.rb +238 -238
- data/spec/functional/provider/remote_file/cache_control_data_spec.rb +100 -100
- data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -51
- data/spec/functional/rebooter_spec.rb +105 -105
- data/spec/functional/resource/aix_service_spec.rb +138 -138
- data/spec/functional/resource/aixinit_service_spec.rb +211 -211
- data/spec/functional/resource/base.rb +28 -28
- data/spec/functional/resource/bash_spec.rb +88 -88
- data/spec/functional/resource/batch_spec.rb +30 -30
- data/spec/functional/resource/bff_spec.rb +120 -120
- data/spec/functional/resource/chocolatey_package_spec.rb +130 -130
- data/spec/functional/resource/cookbook_file_spec.rb +81 -81
- data/spec/functional/resource/cron_spec.rb +172 -172
- data/spec/functional/resource/deploy_revision_spec.rb +881 -881
- data/spec/functional/resource/directory_spec.rb +43 -43
- data/spec/functional/resource/dpkg_package_spec.rb +339 -339
- data/spec/functional/resource/dsc_resource_spec.rb +90 -90
- data/spec/functional/resource/dsc_script_spec.rb +479 -479
- data/spec/functional/resource/env_spec.rb +192 -192
- data/spec/functional/resource/execute_spec.rb +154 -154
- data/spec/functional/resource/file_spec.rb +167 -167
- data/spec/functional/resource/git_spec.rb +259 -259
- data/spec/functional/resource/group_spec.rb +461 -461
- data/spec/functional/resource/ifconfig_spec.rb +165 -165
- data/spec/functional/resource/link_spec.rb +613 -613
- data/spec/functional/resource/mount_spec.rb +203 -203
- data/spec/functional/resource/ohai_spec.rb +62 -62
- data/spec/functional/resource/package_spec.rb +386 -386
- data/spec/functional/resource/powershell_script_spec.rb +601 -601
- data/spec/functional/resource/reboot_spec.rb +103 -103
- data/spec/functional/resource/registry_spec.rb +560 -560
- data/spec/functional/resource/remote_directory_spec.rb +220 -220
- data/spec/functional/resource/remote_file_spec.rb +240 -240
- data/spec/functional/resource/rpm_spec.rb +123 -123
- data/spec/functional/resource/template_spec.rb +212 -212
- data/spec/functional/resource/user/dscl_spec.rb +198 -198
- data/spec/functional/resource/user/useradd_spec.rb +692 -692
- data/spec/functional/resource/user/windows_spec.rb +133 -133
- data/spec/functional/resource/windows_package_spec.rb +168 -168
- data/spec/functional/resource/windows_service_spec.rb +102 -102
- data/spec/functional/rest_spec.rb +95 -95
- data/spec/functional/run_lock_spec.rb +466 -466
- data/spec/functional/shell_spec.rb +148 -148
- data/spec/functional/tiny_server_spec.rb +78 -78
- data/spec/functional/util/path_helper_spec.rb +37 -37
- data/spec/functional/util/powershell/cmdlet_spec.rb +111 -111
- data/spec/functional/version_spec.rb +35 -35
- data/spec/functional/win32/crypto_spec.rb +54 -54
- data/spec/functional/win32/registry_spec.rb +623 -623
- data/spec/functional/win32/security_spec.rb +100 -100
- data/spec/functional/win32/service_manager_spec.rb +220 -220
- data/spec/functional/win32/sid_spec.rb +55 -55
- data/spec/functional/win32/version_info_spec.rb +50 -50
- data/spec/functional/win32/versions_spec.rb +117 -117
- data/spec/integration/client/client_spec.rb +500 -500
- data/spec/integration/client/ipv6_spec.rb +134 -134
- data/spec/integration/knife/chef_fs_data_store_spec.rb +556 -556
- data/spec/integration/knife/chef_repo_path_spec.rb +890 -890
- data/spec/integration/knife/chef_repository_file_system_spec.rb +296 -292
- data/spec/integration/knife/chefignore_spec.rb +300 -300
- data/spec/integration/knife/common_options_spec.rb +155 -155
- data/spec/integration/knife/cookbook_api_ipv6_spec.rb +112 -112
- data/spec/integration/knife/delete_spec.rb +1017 -1017
- data/spec/integration/knife/deps_spec.rb +706 -706
- data/spec/integration/knife/diff_spec.rb +602 -602
- data/spec/integration/knife/download_spec.rb +1314 -1314
- data/spec/integration/knife/list_spec.rb +1067 -1067
- data/spec/integration/knife/raw_spec.rb +242 -242
- data/spec/integration/knife/redirection_spec.rb +52 -52
- data/spec/integration/knife/serve_spec.rb +57 -57
- data/spec/integration/knife/show_spec.rb +167 -167
- data/spec/integration/knife/upload_spec.rb +1529 -1529
- data/spec/integration/recipes/lwrp_inline_resources_spec.rb +175 -148
- data/spec/integration/recipes/lwrp_spec.rb +53 -53
- data/spec/integration/recipes/noop_resource_spec.rb +24 -0
- data/spec/integration/recipes/notifies_spec.rb +334 -0
- data/spec/integration/recipes/provider_choice.rb +37 -37
- data/spec/integration/recipes/recipe_dsl_spec.rb +1519 -1519
- data/spec/integration/recipes/remote_directory.rb +74 -74
- data/spec/integration/recipes/resource_action_spec.rb +569 -569
- data/spec/integration/recipes/resource_converge_if_changed_spec.rb +496 -496
- data/spec/integration/recipes/resource_load_spec.rb +208 -208
- data/spec/integration/solo/solo_spec.rb +176 -176
- data/spec/rcov.opts +2 -2
- data/spec/scripts/ssl-serve.rb +47 -47
- data/spec/spec_helper.rb +248 -248
- data/spec/stress/win32/file_spec.rb +37 -37
- data/spec/stress/win32/memory_spec.rb +22 -22
- data/spec/stress/win32/security_spec.rb +69 -69
- data/spec/support/chef_helpers.rb +95 -95
- data/spec/support/key_helpers.rb +104 -104
- data/spec/support/lib/chef/provider/easy.rb +35 -35
- data/spec/support/lib/chef/provider/openldap_includer.rb +29 -29
- data/spec/support/lib/chef/provider/snakeoil.rb +41 -41
- data/spec/support/lib/chef/resource/cat.rb +38 -38
- data/spec/support/lib/chef/resource/one_two_three_four.rb +37 -37
- data/spec/support/lib/chef/resource/openldap_includer.rb +26 -26
- data/spec/support/lib/chef/resource/with_state.rb +28 -28
- data/spec/support/lib/chef/resource/zen_follower.rb +35 -35
- data/spec/support/lib/chef/resource/zen_master.rb +41 -41
- data/spec/support/lib/library_load_order.rb +20 -20
- data/spec/support/matchers/leak.rb +98 -98
- data/spec/support/mock/constant.rb +52 -52
- data/spec/support/mock/platform.rb +25 -25
- data/spec/support/platform_helpers.rb +214 -214
- data/spec/support/platforms/prof/gc.rb +53 -53
- data/spec/support/platforms/prof/win32.rb +45 -45
- data/spec/support/platforms/win32/spec_service.rb +59 -59
- data/spec/support/shared/context/client.rb +285 -285
- data/spec/support/shared/context/config.rb +21 -21
- data/spec/support/shared/context/win32.rb +34 -34
- data/spec/support/shared/examples/client.rb +53 -53
- data/spec/support/shared/functional/diff_disabled.rb +10 -10
- data/spec/support/shared/functional/directory_resource.rb +176 -176
- data/spec/support/shared/functional/file_resource.rb +1049 -1049
- data/spec/support/shared/functional/http.rb +248 -248
- data/spec/support/shared/functional/knife.rb +37 -37
- data/spec/support/shared/functional/securable_resource.rb +547 -547
- data/spec/support/shared/functional/securable_resource_with_reporting.rb +394 -394
- data/spec/support/shared/functional/win32_service.rb +59 -59
- data/spec/support/shared/functional/windows_script.rb +202 -202
- data/spec/support/shared/integration/app_server_support.rb +42 -42
- data/spec/support/shared/integration/integration_helper.rb +154 -154
- data/spec/support/shared/integration/knife_support.rb +173 -173
- data/spec/support/shared/matchers/exit_with_code.rb +32 -32
- data/spec/support/shared/matchers/match_environment_variable.rb +17 -17
- data/spec/support/shared/shared_examples.rb +14 -14
- data/spec/support/shared/unit/api_error_inspector.rb +190 -190
- data/spec/support/shared/unit/api_versioning.rb +77 -77
- data/spec/support/shared/unit/application_dot_d.rb +70 -70
- data/spec/support/shared/unit/execute_resource.rb +133 -133
- data/spec/support/shared/unit/file_system_support.rb +69 -69
- data/spec/support/shared/unit/knife_shared.rb +39 -39
- data/spec/support/shared/unit/mock_shellout.rb +49 -49
- data/spec/support/shared/unit/platform_introspector.rb +189 -189
- data/spec/support/shared/unit/provider/file.rb +835 -835
- data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +433 -433
- data/spec/support/shared/unit/resource/static_provider_resolution.rb +63 -63
- data/spec/support/shared/unit/script_resource.rb +98 -98
- data/spec/support/shared/unit/user_and_client_shared.rb +114 -114
- data/spec/support/shared/unit/windows_script_resource.rb +80 -80
- data/spec/tiny_server.rb +207 -207
- data/spec/unit/api_client/registration_spec.rb +278 -278
- data/spec/unit/api_client_spec.rb +341 -341
- data/spec/unit/api_client_v1_spec.rb +455 -455
- data/spec/unit/application/apply_spec.rb +110 -110
- data/spec/unit/application/client_spec.rb +495 -435
- data/spec/unit/application/knife_spec.rb +229 -229
- data/spec/unit/application/solo_spec.rb +170 -170
- data/spec/unit/application_spec.rb +411 -384
- data/spec/unit/audit/audit_event_proxy_spec.rb +311 -311
- data/spec/unit/audit/audit_reporter_spec.rb +430 -430
- data/spec/unit/audit/control_group_data_spec.rb +477 -477
- data/spec/unit/audit/logger_spec.rb +42 -42
- data/spec/unit/audit/rspec_formatter_spec.rb +29 -29
- data/spec/unit/audit/runner_spec.rb +144 -144
- data/spec/unit/chef_class_spec.rb +110 -110
- data/spec/unit/chef_fs/config_spec.rb +106 -106
- data/spec/unit/chef_fs/data_handler/group_handler_spec.rb +63 -63
- data/spec/unit/chef_fs/diff_spec.rb +328 -328
- data/spec/unit/chef_fs/file_pattern_spec.rb +512 -512
- data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -34
- data/spec/unit/chef_fs/file_system/operation_failed_error_spec.rb +47 -47
- data/spec/unit/chef_fs/file_system_spec.rb +148 -148
- data/spec/unit/chef_fs/parallelizer.rb +479 -479
- data/spec/unit/chef_fs/path_util_spec.rb +108 -108
- data/spec/unit/chef_spec.rb +25 -25
- data/spec/unit/client_spec.rb +544 -544
- data/spec/unit/config_fetcher_spec.rb +125 -125
- data/spec/unit/config_spec.rb +31 -31
- data/spec/unit/cookbook/chefignore_spec.rb +49 -49
- data/spec/unit/cookbook/cookbook_version_loader_spec.rb +198 -198
- data/spec/unit/cookbook/file_vendor_spec.rb +97 -97
- data/spec/unit/cookbook/metadata_spec.rb +952 -952
- data/spec/unit/cookbook/synchronizer_spec.rb +520 -520
- data/spec/unit/cookbook/syntax_check_spec.rb +219 -219
- data/spec/unit/cookbook_loader_spec.rb +299 -299
- data/spec/unit/cookbook_manifest_spec.rb +243 -243
- data/spec/unit/cookbook_site_streaming_uploader_spec.rb +203 -203
- data/spec/unit/cookbook_spec.rb +66 -66
- data/spec/unit/cookbook_uploader_spec.rb +199 -199
- data/spec/unit/cookbook_version_file_specificity_spec.rb +576 -553
- data/spec/unit/cookbook_version_spec.rb +359 -359
- data/spec/unit/daemon_spec.rb +174 -174
- data/spec/unit/data_bag_item_spec.rb +388 -388
- data/spec/unit/data_bag_spec.rb +260 -260
- data/spec/unit/deprecation_spec.rb +150 -150
- data/spec/unit/digester_spec.rb +49 -49
- data/spec/unit/dsl/audit_spec.rb +43 -43
- data/spec/unit/dsl/data_query_spec.rb +106 -106
- data/spec/unit/dsl/platform_introspection_spec.rb +129 -129
- data/spec/unit/dsl/reboot_pending_spec.rb +100 -100
- data/spec/unit/dsl/recipe_spec.rb +93 -80
- data/spec/unit/dsl/{regsitry_helper_spec.rb → registry_helper_spec.rb} +52 -52
- data/spec/unit/dsl/resources_spec.rb +85 -85
- data/spec/unit/encrypted_data_bag_item/check_encrypted_spec.rb +95 -95
- data/spec/unit/encrypted_data_bag_item_spec.rb +437 -437
- data/spec/unit/environment_spec.rb +470 -470
- data/spec/unit/event_dispatch/dispatcher_spec.rb +122 -122
- data/spec/unit/event_dispatch/dsl_spec.rb +83 -83
- data/spec/unit/exceptions_spec.rb +130 -130
- data/spec/unit/file_access_control_spec.rb +308 -308
- data/spec/unit/file_cache_spec.rb +114 -114
- data/spec/unit/file_content_management/deploy/cp_spec.rb +44 -44
- data/spec/unit/file_content_management/deploy/mv_unix_spec.rb +101 -101
- data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +232 -232
- data/spec/unit/file_content_management/tempfile_spec.rb +85 -85
- data/spec/unit/formatters/base_spec.rb +71 -71
- data/spec/unit/formatters/doc_spec.rb +92 -78
- data/spec/unit/formatters/error_description_spec.rb +96 -0
- data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +76 -76
- data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +265 -265
- data/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +126 -126
- data/spec/unit/formatters/error_inspectors/cookbook_sync_error_inspector_spec.rb +43 -43
- data/spec/unit/formatters/error_inspectors/node_load_error_inspector_spec.rb +26 -26
- data/spec/unit/formatters/error_inspectors/registration_error_inspector_spec.rb +26 -26
- data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +191 -191
- data/spec/unit/formatters/error_inspectors/run_list_expansion_error_inspector_spec.rb +91 -91
- data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +155 -155
- data/spec/unit/guard_interpreter_spec.rb +41 -41
- data/spec/unit/handler/json_file_spec.rb +63 -63
- data/spec/unit/handler_spec.rb +215 -215
- data/spec/unit/http/authenticator_spec.rb +80 -80
- data/spec/unit/http/basic_client_spec.rb +52 -129
- data/spec/unit/http/http_request_spec.rb +91 -91
- data/spec/unit/http/json_input_spec.rb +128 -128
- data/spec/unit/http/simple_spec.rb +32 -32
- data/spec/unit/http/socketless_chef_zero_client_spec.rb +173 -173
- data/spec/unit/http/ssl_policies_spec.rb +169 -169
- data/spec/unit/http/validate_content_length_spec.rb +207 -207
- data/spec/unit/http_spec.rb +206 -206
- data/spec/unit/json_compat_spec.rb +105 -105
- data/spec/unit/key_spec.rb +631 -631
- data/spec/unit/knife/bootstrap/chef_vault_handler_spec.rb +152 -152
- data/spec/unit/knife/bootstrap/client_builder_spec.rb +207 -207
- data/spec/unit/knife/bootstrap_spec.rb +822 -822
- data/spec/unit/knife/client_bulk_delete_spec.rb +166 -166
- data/spec/unit/knife/client_create_spec.rb +186 -186
- data/spec/unit/knife/client_delete_spec.rb +83 -83
- data/spec/unit/knife/client_edit_spec.rb +53 -53
- data/spec/unit/knife/client_list_spec.rb +34 -34
- data/spec/unit/knife/client_reregister_spec.rb +62 -62
- data/spec/unit/knife/client_show_spec.rb +52 -52
- data/spec/unit/knife/configure_client_spec.rb +83 -83
- data/spec/unit/knife/configure_spec.rb +241 -241
- data/spec/unit/knife/cookbook_bulk_delete_spec.rb +87 -87
- data/spec/unit/knife/cookbook_create_spec.rb +260 -260
- data/spec/unit/knife/cookbook_delete_spec.rb +239 -239
- data/spec/unit/knife/cookbook_download_spec.rb +237 -237
- data/spec/unit/knife/cookbook_list_spec.rb +88 -88
- data/spec/unit/knife/cookbook_metadata_from_file_spec.rb +65 -65
- data/spec/unit/knife/cookbook_metadata_spec.rb +179 -179
- data/spec/unit/knife/cookbook_show_spec.rb +222 -222
- data/spec/unit/knife/cookbook_site_download_spec.rb +149 -149
- data/spec/unit/knife/cookbook_site_install_spec.rb +197 -197
- data/spec/unit/knife/cookbook_site_share_spec.rb +209 -209
- data/spec/unit/knife/cookbook_site_unshare_spec.rb +77 -77
- data/spec/unit/knife/cookbook_test_spec.rb +84 -84
- data/spec/unit/knife/cookbook_upload_spec.rb +331 -331
- data/spec/unit/knife/core/bootstrap_context_spec.rb +257 -257
- data/spec/unit/knife/core/cookbook_scm_repo_spec.rb +187 -187
- data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -41
- data/spec/unit/knife/core/gem_glob_loader_spec.rb +209 -209
- data/spec/unit/knife/core/hashed_command_loader_spec.rb +109 -109
- data/spec/unit/knife/core/node_editor_spec.rb +211 -211
- data/spec/unit/knife/core/object_loader_spec.rb +81 -81
- data/spec/unit/knife/core/subcommand_loader_spec.rb +70 -70
- data/spec/unit/knife/core/ui_spec.rb +598 -598
- data/spec/unit/knife/data_bag_create_spec.rb +109 -109
- data/spec/unit/knife/data_bag_edit_spec.rb +127 -127
- data/spec/unit/knife/data_bag_from_file_spec.rb +172 -172
- data/spec/unit/knife/data_bag_secret_options_spec.rb +165 -165
- data/spec/unit/knife/data_bag_show_spec.rb +123 -123
- data/spec/unit/knife/environment_compare_spec.rb +112 -112
- data/spec/unit/knife/environment_create_spec.rb +91 -91
- data/spec/unit/knife/environment_delete_spec.rb +71 -71
- data/spec/unit/knife/environment_edit_spec.rb +79 -79
- data/spec/unit/knife/environment_from_file_spec.rb +90 -90
- data/spec/unit/knife/environment_list_spec.rb +54 -54
- data/spec/unit/knife/environment_show_spec.rb +52 -52
- data/spec/unit/knife/index_rebuild_spec.rb +125 -125
- data/spec/unit/knife/key_create_spec.rb +223 -223
- data/spec/unit/knife/key_delete_spec.rb +133 -133
- data/spec/unit/knife/key_edit_spec.rb +264 -264
- data/spec/unit/knife/key_helper.rb +74 -74
- data/spec/unit/knife/key_list_spec.rb +216 -216
- data/spec/unit/knife/key_show_spec.rb +126 -126
- data/spec/unit/knife/knife_help.rb +92 -92
- data/spec/unit/knife/node_bulk_delete_spec.rb +94 -94
- data/spec/unit/knife/node_delete_spec.rb +68 -68
- data/spec/unit/knife/node_edit_spec.rb +114 -114
- data/spec/unit/knife/node_environment_set_spec.rb +80 -80
- data/spec/unit/knife/node_from_file_spec.rb +59 -59
- data/spec/unit/knife/node_list_spec.rb +62 -62
- data/spec/unit/knife/node_run_list_add_spec.rb +145 -145
- data/spec/unit/knife/node_run_list_remove_spec.rb +106 -106
- data/spec/unit/knife/node_run_list_set_spec.rb +140 -140
- data/spec/unit/knife/node_show_spec.rb +65 -65
- data/spec/unit/knife/osc_user_create_spec.rb +93 -93
- data/spec/unit/knife/osc_user_delete_spec.rb +44 -44
- data/spec/unit/knife/osc_user_edit_spec.rb +52 -52
- data/spec/unit/knife/osc_user_list_spec.rb +37 -37
- data/spec/unit/knife/osc_user_reregister_spec.rb +58 -58
- data/spec/unit/knife/osc_user_show_spec.rb +46 -46
- data/spec/unit/knife/raw_spec.rb +43 -43
- data/spec/unit/knife/role_bulk_delete_spec.rb +80 -80
- data/spec/unit/knife/role_create_spec.rb +80 -80
- data/spec/unit/knife/role_delete_spec.rb +67 -67
- data/spec/unit/knife/role_edit_spec.rb +77 -77
- data/spec/unit/knife/role_env_run_list_add_spec.rb +217 -217
- data/spec/unit/knife/role_env_run_list_clear_spec.rb +94 -94
- data/spec/unit/knife/role_env_run_list_remove_spec.rb +102 -102
- data/spec/unit/knife/role_env_run_list_replace_spec.rb +105 -105
- data/spec/unit/knife/role_env_run_list_set_spec.rb +99 -99
- data/spec/unit/knife/role_from_file_spec.rb +69 -69
- data/spec/unit/knife/role_list_spec.rb +54 -54
- data/spec/unit/knife/role_run_list_add_spec.rb +179 -179
- data/spec/unit/knife/role_run_list_clear_spec.rb +84 -84
- data/spec/unit/knife/role_run_list_remove_spec.rb +92 -92
- data/spec/unit/knife/role_run_list_replace_spec.rb +98 -98
- data/spec/unit/knife/role_run_list_set_spec.rb +89 -89
- data/spec/unit/knife/role_show_spec.rb +59 -59
- data/spec/unit/knife/ssh_spec.rb +428 -410
- data/spec/unit/knife/ssl_check_spec.rb +240 -240
- data/spec/unit/knife/ssl_fetch_spec.rb +184 -184
- data/spec/unit/knife/status_spec.rb +108 -108
- data/spec/unit/knife/tag_create_spec.rb +23 -23
- data/spec/unit/knife/tag_delete_spec.rb +25 -25
- data/spec/unit/knife/tag_list_spec.rb +23 -23
- data/spec/unit/knife/user_create_spec.rb +214 -214
- data/spec/unit/knife/user_delete_spec.rb +65 -65
- data/spec/unit/knife/user_edit_spec.rb +66 -66
- data/spec/unit/knife/user_list_spec.rb +36 -36
- data/spec/unit/knife/user_reregister_spec.rb +74 -74
- data/spec/unit/knife/user_show_spec.rb +65 -65
- data/spec/unit/knife_spec.rb +529 -529
- data/spec/unit/lib_backcompat_spec.rb +34 -34
- data/spec/unit/log/syslog_spec.rb +53 -53
- data/spec/unit/log/winevt_spec.rb +55 -55
- data/spec/unit/log_spec.rb +24 -24
- data/spec/unit/lwrp_spec.rb +778 -720
- data/spec/unit/mash_spec.rb +51 -51
- data/spec/unit/mixin/api_version_request_handling_spec.rb +126 -126
- data/spec/unit/mixin/checksum_spec.rb +40 -40
- data/spec/unit/mixin/command_spec.rb +104 -104
- data/spec/unit/mixin/convert_to_class_name_spec.rb +54 -54
- data/spec/unit/mixin/deep_merge_spec.rb +342 -342
- data/spec/unit/mixin/deprecation_spec.rb +57 -57
- data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +96 -96
- data/spec/unit/mixin/homebrew_user_spec.rb +100 -100
- data/spec/unit/mixin/lazy_module_include.rb +71 -0
- data/spec/unit/mixin/params_validate_spec.rb +409 -409
- data/spec/unit/mixin/path_sanity_spec.rb +92 -92
- data/spec/unit/mixin/powershell_out_spec.rb +70 -70
- data/spec/unit/mixin/powershell_type_coercions_spec.rb +83 -83
- data/spec/unit/mixin/properties_spec.rb +97 -97
- data/spec/unit/mixin/proxified_socket_spec.rb +97 -94
- data/spec/unit/mixin/securable_spec.rb +314 -314
- data/spec/unit/mixin/shell_out_spec.rb +299 -299
- data/spec/unit/mixin/subclass_directive_spec.rb +45 -45
- data/spec/unit/mixin/template_spec.rb +276 -276
- data/spec/unit/mixin/unformatter_spec.rb +61 -61
- data/spec/unit/mixin/uris_spec.rb +57 -57
- data/spec/unit/mixin/windows_architecture_helper_spec.rb +85 -85
- data/spec/unit/mixin/xml_escape_spec.rb +54 -54
- data/spec/unit/monkey_patches/uri_spec.rb +34 -34
- data/spec/unit/monologger_spec.rb +45 -45
- data/spec/unit/node/attribute_spec.rb +1179 -1179
- data/spec/unit/node/immutable_collections_spec.rb +197 -197
- data/spec/unit/node_map_spec.rb +170 -170
- data/spec/unit/node_spec.rb +1565 -1565
- data/spec/unit/org_spec.rb +196 -196
- data/spec/unit/platform/query_helpers_spec.rb +220 -220
- data/spec/unit/platform_spec.rb +241 -241
- data/spec/unit/policy_builder/dynamic_spec.rb +273 -273
- data/spec/unit/policy_builder/expand_node_object_spec.rb +336 -336
- data/spec/unit/policy_builder/policyfile_spec.rb +745 -745
- data/spec/unit/policy_builder_spec.rb +26 -26
- data/spec/unit/property/state_spec.rb +508 -508
- data/spec/unit/property/validation_spec.rb +704 -704
- data/spec/unit/property_spec.rb +1227 -1227
- data/spec/unit/provider/apt_repository_spec.rb +178 -0
- data/spec/unit/provider/apt_update_spec.rb +113 -113
- data/spec/unit/provider/breakpoint_spec.rb +53 -53
- data/spec/unit/provider/cookbook_file/content_spec.rb +39 -39
- data/spec/unit/provider/cookbook_file_spec.rb +58 -58
- data/spec/unit/provider/cron/unix_spec.rb +139 -139
- data/spec/unit/provider/cron_spec.rb +1010 -1010
- data/spec/unit/provider/deploy/revision_spec.rb +110 -110
- data/spec/unit/provider/deploy/timestamped_spec.rb +40 -40
- data/spec/unit/provider/deploy_spec.rb +641 -641
- data/spec/unit/provider/directory_spec.rb +287 -287
- data/spec/unit/provider/dsc_resource_spec.rb +167 -167
- data/spec/unit/provider/dsc_script_spec.rb +173 -173
- data/spec/unit/provider/env/windows_spec.rb +103 -103
- data/spec/unit/provider/env_spec.rb +310 -310
- data/spec/unit/provider/erl_call_spec.rb +85 -85
- data/spec/unit/provider/execute_spec.rb +243 -243
- data/spec/unit/provider/file/content_spec.rb +114 -114
- data/spec/unit/provider/file_spec.rb +56 -56
- data/spec/unit/provider/git_spec.rb +668 -668
- data/spec/unit/provider/group/dscl_spec.rb +331 -331
- data/spec/unit/provider/group/gpasswd_spec.rb +116 -116
- data/spec/unit/provider/group/groupadd_spec.rb +174 -174
- data/spec/unit/provider/group/groupmod_spec.rb +133 -133
- data/spec/unit/provider/group/pw_spec.rb +138 -138
- data/spec/unit/provider/group/usermod_spec.rb +115 -115
- data/spec/unit/provider/group/windows_spec.rb +101 -101
- data/spec/unit/provider/group_spec.rb +286 -286
- data/spec/unit/provider/http_request_spec.rb +159 -159
- data/spec/unit/provider/ifconfig/aix_spec.rb +180 -180
- data/spec/unit/provider/ifconfig/debian_spec.rb +344 -344
- data/spec/unit/provider/ifconfig/redhat_spec.rb +73 -73
- data/spec/unit/provider/ifconfig_spec.rb +200 -200
- data/spec/unit/provider/launchd_spec.rb +189 -189
- data/spec/unit/provider/link_spec.rb +252 -252
- data/spec/unit/provider/log_spec.rb +75 -75
- data/spec/unit/provider/mdadm_spec.rb +131 -131
- data/spec/unit/provider/mount/aix_spec.rb +237 -238
- data/spec/unit/provider/mount/mount_spec.rb +474 -480
- data/spec/unit/provider/mount/solaris_spec.rb +822 -822
- data/spec/unit/provider/mount/windows_spec.rb +149 -151
- data/spec/unit/provider/mount_spec.rb +184 -203
- data/spec/unit/provider/ohai_spec.rb +84 -84
- data/spec/unit/provider/osx_profile_spec.rb +249 -249
- data/spec/unit/provider/package/aix_spec.rb +172 -172
- data/spec/unit/provider/package/apt_spec.rb +386 -386
- data/spec/unit/provider/package/chocolatey_spec.rb +501 -501
- data/spec/unit/provider/package/dpkg_spec.rb +287 -287
- data/spec/unit/provider/package/easy_install_spec.rb +108 -108
- data/spec/unit/provider/package/freebsd/pkg_spec.rb +274 -274
- data/spec/unit/provider/package/freebsd/pkgng_spec.rb +148 -148
- data/spec/unit/provider/package/freebsd/port_spec.rb +163 -163
- data/spec/unit/provider/package/homebrew_spec.rb +292 -292
- data/spec/unit/provider/package/ips_spec.rb +227 -227
- data/spec/unit/provider/package/macports_spec.rb +203 -203
- data/spec/unit/provider/package/openbsd_spec.rb +132 -132
- data/spec/unit/provider/package/pacman_spec.rb +194 -194
- data/spec/unit/provider/package/paludis_spec.rb +134 -134
- data/spec/unit/provider/package/portage_spec.rb +310 -310
- data/spec/unit/provider/package/rpm_spec.rb +429 -429
- data/spec/unit/provider/package/rubygems_spec.rb +782 -782
- data/spec/unit/provider/package/smartos_spec.rb +110 -110
- data/spec/unit/provider/package/solaris_spec.rb +167 -167
- data/spec/unit/provider/package/windows/exe_spec.rb +187 -187
- data/spec/unit/provider/package/windows/msi_spec.rb +159 -159
- data/spec/unit/provider/package/windows_spec.rb +397 -397
- data/spec/unit/provider/package/yum_spec.rb +2267 -2267
- data/spec/unit/provider/package/zypper_spec.rb +268 -268
- data/spec/unit/provider/package_spec.rb +870 -870
- data/spec/unit/provider/powershell_script_spec.rb +106 -106
- data/spec/unit/provider/registry_key_spec.rb +295 -295
- data/spec/unit/provider/remote_directory_spec.rb +221 -221
- data/spec/unit/provider/remote_file/cache_control_data_spec.rb +245 -245
- data/spec/unit/provider/remote_file/content_spec.rb +252 -252
- data/spec/unit/provider/remote_file/fetcher_spec.rb +94 -94
- data/spec/unit/provider/remote_file/ftp_spec.rb +217 -219
- data/spec/unit/provider/remote_file/http_spec.rb +322 -301
- data/spec/unit/provider/remote_file/local_file_spec.rb +103 -103
- data/spec/unit/provider/remote_file/network_file_spec.rb +45 -45
- data/spec/unit/provider/remote_file/sftp_spec.rb +150 -0
- data/spec/unit/provider/remote_file_spec.rb +61 -61
- data/spec/unit/provider/route_spec.rb +242 -242
- data/spec/unit/provider/ruby_block_spec.rb +45 -45
- data/spec/unit/provider/script_spec.rb +114 -114
- data/spec/unit/provider/service/aix_service_spec.rb +195 -195
- data/spec/unit/provider/service/aixinit_service_spec.rb +272 -272
- data/spec/unit/provider/service/arch_service_spec.rb +324 -324
- data/spec/unit/provider/service/debian_service_spec.rb +375 -375
- data/spec/unit/provider/service/freebsd_service_spec.rb +613 -613
- data/spec/unit/provider/service/gentoo_service_spec.rb +144 -144
- data/spec/unit/provider/service/init_service_spec.rb +235 -235
- data/spec/unit/provider/service/insserv_service_spec.rb +75 -75
- data/spec/unit/provider/service/invokercd_service_spec.rb +211 -211
- data/spec/unit/provider/service/macosx_spec.rb +335 -335
- data/spec/unit/provider/service/openbsd_service_spec.rb +545 -545
- data/spec/unit/provider/service/redhat_spec.rb +250 -236
- data/spec/unit/provider/service/simple_service_spec.rb +169 -169
- data/spec/unit/provider/service/solaris_smf_service_spec.rb +255 -255
- data/spec/unit/provider/service/systemd_service_spec.rb +370 -344
- data/spec/unit/provider/service/upstart_service_spec.rb +342 -342
- data/spec/unit/provider/service/windows_spec.rb +463 -463
- data/spec/unit/provider/service_spec.rb +168 -168
- data/spec/unit/provider/subversion_spec.rb +352 -298
- data/spec/unit/provider/template/content_spec.rb +169 -169
- data/spec/unit/provider/template_spec.rb +89 -89
- data/spec/unit/provider/user/dscl_spec.rb +901 -901
- data/spec/unit/provider/user/pw_spec.rb +252 -252
- data/spec/unit/provider/user/solaris_spec.rb +139 -139
- data/spec/unit/provider/user/useradd_spec.rb +51 -51
- data/spec/unit/provider/user/windows_spec.rb +185 -185
- data/spec/unit/provider/user_spec.rb +474 -474
- data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +46 -46
- data/spec/unit/provider_resolver_spec.rb +893 -893
- data/spec/unit/provider_spec.rb +198 -198
- data/spec/unit/pure_application_spec.rb +32 -32
- data/spec/unit/recipe_spec.rb +699 -699
- data/spec/unit/resource/apt_package_spec.rb +38 -38
- data/spec/unit/resource/apt_repository_spec.rb +34 -0
- data/spec/unit/resource/apt_update_spec.rb +38 -38
- data/spec/unit/resource/bash_spec.rb +40 -40
- data/spec/unit/resource/batch_spec.rb +49 -49
- data/spec/unit/resource/breakpoint_spec.rb +47 -47
- data/spec/unit/resource/chef_gem_spec.rb +157 -157
- data/spec/unit/resource/chocolatey_package_spec.rb +67 -67
- data/spec/unit/resource/conditional_action_not_nothing_spec.rb +45 -45
- data/spec/unit/resource/conditional_spec.rb +208 -208
- data/spec/unit/resource/cookbook_file_spec.rb +88 -88
- data/spec/unit/resource/cron_spec.rb +186 -186
- data/spec/unit/resource/csh_spec.rb +40 -40
- data/spec/unit/resource/deploy_revision_spec.rb +42 -42
- data/spec/unit/resource/deploy_spec.rb +283 -283
- data/spec/unit/resource/directory_spec.rb +82 -82
- data/spec/unit/resource/dpkg_package_spec.rb +32 -32
- data/spec/unit/resource/dsc_resource_spec.rb +96 -96
- data/spec/unit/resource/dsc_script_spec.rb +134 -134
- data/spec/unit/resource/easy_install_package_spec.rb +39 -39
- data/spec/unit/resource/env_spec.rb +85 -85
- data/spec/unit/resource/erl_call_spec.rb +81 -81
- data/spec/unit/resource/execute_spec.rb +35 -35
- data/spec/unit/resource/file/verification_spec.rb +139 -139
- data/spec/unit/resource/file_spec.rb +130 -130
- data/spec/unit/resource/freebsd_package_spec.rb +87 -87
- data/spec/unit/resource/gem_package_spec.rb +42 -42
- data/spec/unit/resource/git_spec.rb +50 -50
- data/spec/unit/resource/group_spec.rb +162 -162
- data/spec/unit/resource/homebrew_package_spec.rb +50 -50
- data/spec/unit/resource/http_request_spec.rb +59 -59
- data/spec/unit/resource/ifconfig_spec.rb +109 -109
- data/spec/unit/resource/ips_package_spec.rb +40 -40
- data/spec/unit/resource/ksh_spec.rb +40 -40
- data/spec/unit/resource/launchd_spec.rb +31 -31
- data/spec/unit/resource/link_spec.rb +134 -134
- data/spec/unit/resource/log_spec.rb +73 -73
- data/spec/unit/resource/macports_package_spec.rb +32 -32
- data/spec/unit/resource/mdadm_spec.rb +102 -102
- data/spec/unit/resource/mount_spec.rb +214 -214
- data/spec/unit/resource/ohai_spec.rb +61 -61
- data/spec/unit/resource/openbsd_package_spec.rb +48 -48
- data/spec/unit/resource/osx_profile_spec.rb +61 -61
- data/spec/unit/resource/package_spec.rb +93 -93
- data/spec/unit/resource/pacman_package_spec.rb +32 -32
- data/spec/unit/resource/perl_spec.rb +40 -40
- data/spec/unit/resource/portage_package_spec.rb +38 -38
- data/spec/unit/resource/powershell_script_spec.rb +136 -136
- data/spec/unit/resource/python_spec.rb +40 -40
- data/spec/unit/resource/registry_key_spec.rb +199 -199
- data/spec/unit/resource/remote_directory_spec.rb +97 -97
- data/spec/unit/resource/remote_file_spec.rb +207 -207
- data/spec/unit/resource/resource_notification_spec.rb +169 -169
- data/spec/unit/resource/route_spec.rb +107 -107
- data/spec/unit/resource/rpm_package_spec.rb +46 -46
- data/spec/unit/resource/ruby_block_spec.rb +61 -61
- data/spec/unit/resource/ruby_spec.rb +40 -40
- data/spec/unit/resource/scm_spec.rb +193 -193
- data/spec/unit/resource/script_spec.rb +44 -44
- data/spec/unit/resource/service_spec.rb +179 -179
- data/spec/unit/resource/smartos_package_spec.rb +33 -33
- data/spec/unit/resource/solaris_package_spec.rb +42 -42
- data/spec/unit/resource/subversion_spec.rb +71 -71
- data/spec/unit/resource/template_spec.rb +210 -210
- data/spec/unit/resource/timestamped_deploy_spec.rb +32 -32
- data/spec/unit/resource/user_spec.rb +133 -133
- data/spec/unit/resource/windows_package_spec.rb +95 -95
- data/spec/unit/resource/windows_service_spec.rb +49 -49
- data/spec/unit/resource/yum_package_spec.rb +89 -89
- data/spec/unit/resource_builder_spec.rb +1 -1
- data/spec/unit/resource_collection/resource_list_spec.rb +137 -137
- data/spec/unit/resource_collection/resource_set_spec.rb +199 -199
- data/spec/unit/resource_collection/stepable_iterator_spec.rb +144 -144
- data/spec/unit/resource_collection_spec.rb +369 -299
- data/spec/unit/resource_definition_spec.rb +117 -117
- data/spec/unit/resource_reporter_spec.rb +758 -758
- data/spec/unit/resource_resolver_spec.rb +52 -52
- data/spec/unit/resource_spec.rb +1101 -1101
- data/spec/unit/rest/auth_credentials_spec.rb +292 -296
- data/spec/unit/rest_spec.rb +753 -753
- data/spec/unit/role_spec.rb +358 -358
- data/spec/unit/run_context/child_run_context_spec.rb +133 -133
- data/spec/unit/run_context/cookbook_compiler_spec.rb +184 -184
- data/spec/unit/run_context_spec.rb +241 -241
- data/spec/unit/run_list/run_list_expansion_spec.rb +144 -144
- data/spec/unit/run_list/run_list_item_spec.rb +117 -117
- data/spec/unit/run_list/versioned_recipe_list_spec.rb +194 -194
- data/spec/unit/run_list_spec.rb +312 -312
- data/spec/unit/run_lock_spec.rb +140 -140
- data/spec/unit/run_status_spec.rb +144 -144
- data/spec/unit/runner_spec.rb +411 -411
- data/spec/unit/scan_access_control_spec.rb +183 -183
- data/spec/unit/search/query_spec.rb +289 -289
- data/spec/unit/shell/model_wrapper_spec.rb +96 -96
- data/spec/unit/shell/shell_ext_spec.rb +153 -153
- data/spec/unit/shell/shell_session_spec.rb +195 -195
- data/spec/unit/shell_out_spec.rb +18 -18
- data/spec/unit/shell_spec.rb +162 -162
- data/spec/unit/user_spec.rb +275 -275
- data/spec/unit/user_v1_spec.rb +583 -583
- data/spec/unit/util/backup_spec.rb +141 -141
- data/spec/unit/util/diff_spec.rb +576 -576
- data/spec/unit/util/dsc/configuration_generator_spec.rb +193 -193
- data/spec/unit/util/dsc/lcm_output_parser_spec.rb +164 -164
- data/spec/unit/util/dsc/local_configuration_manager_spec.rb +138 -138
- data/spec/unit/util/dsc/resource_store.rb +76 -76
- data/spec/unit/util/editor_spec.rb +152 -152
- data/spec/unit/util/file_edit_spec.rb +224 -224
- data/spec/unit/util/powershell/cmdlet_spec.rb +106 -106
- data/spec/unit/util/powershell/ps_credential_spec.rb +44 -44
- data/spec/unit/util/selinux_spec.rb +171 -171
- data/spec/unit/util/threaded_job_queue_spec.rb +51 -51
- data/spec/unit/version/platform_spec.rb +60 -60
- data/spec/unit/version_class_spec.rb +171 -171
- data/spec/unit/version_constraint/platform_spec.rb +45 -45
- data/spec/unit/version_constraint_spec.rb +179 -179
- data/spec/unit/win32/registry_spec.rb +394 -394
- data/spec/unit/windows_service_spec.rb +116 -116
- data/tasks/cbgb.rb +84 -84
- data/tasks/external_tests.rb +64 -64
- data/tasks/maintainers.rb +210 -210
- data/tasks/rspec.rb +89 -89
- metadata +55 -464
@@ -1,97 +1,97 @@
|
|
1
|
-
#
|
2
|
-
# Copyright:: Copyright 2012-2016, Chef Software Inc.
|
3
|
-
# License:: Apache License, Version 2.0
|
4
|
-
#
|
5
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
# you may not use this file except in compliance with the License.
|
7
|
-
# You may obtain a copy of the License at
|
8
|
-
#
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
# See the License for the specific language governing permissions and
|
15
|
-
# limitations under the License.
|
16
|
-
|
17
|
-
class Chef
|
18
|
-
class Provider
|
19
|
-
class User
|
20
|
-
class Aix < Chef::Provider::User::Useradd
|
21
|
-
provides :user, platform: %w{aix}
|
22
|
-
|
23
|
-
UNIVERSAL_OPTIONS = [[:comment, "-c"], [:gid, "-g"], [:shell, "-s"], [:uid, "-u"]]
|
24
|
-
|
25
|
-
def create_user
|
26
|
-
super
|
27
|
-
add_password
|
28
|
-
end
|
29
|
-
|
30
|
-
def manage_user
|
31
|
-
add_password
|
32
|
-
manage_home
|
33
|
-
super
|
34
|
-
end
|
35
|
-
|
36
|
-
# Aix does not support -r like other unix, sytem account is created by adding to 'system' group
|
37
|
-
def useradd_options
|
38
|
-
opts = []
|
39
|
-
opts << "-g" << "system" if new_resource.system
|
40
|
-
opts
|
41
|
-
end
|
42
|
-
|
43
|
-
def check_lock
|
44
|
-
lock_info = shell_out!("lsuser -a account_locked #{new_resource.username}")
|
45
|
-
if whyrun_mode? && passwd_s.stdout.empty? && lock_info.stderr.match(/does not exist/)
|
46
|
-
# if we're in whyrun mode and the user is not yet created we assume it would be
|
47
|
-
return false
|
48
|
-
end
|
49
|
-
raise Chef::Exceptions::User, "Cannot determine if #{@new_resource} is locked!" if lock_info.stdout.empty?
|
50
|
-
|
51
|
-
status = /\S+\s+account_locked=(\S+)/.match(lock_info.stdout)
|
52
|
-
if status && status[1] == "true"
|
53
|
-
@locked = true
|
54
|
-
else
|
55
|
-
@locked = false
|
56
|
-
end
|
57
|
-
|
58
|
-
@locked
|
59
|
-
end
|
60
|
-
|
61
|
-
def lock_user
|
62
|
-
shell_out!("chuser account_locked=true #{new_resource.username}")
|
63
|
-
end
|
64
|
-
|
65
|
-
def unlock_user
|
66
|
-
shell_out!("chuser account_locked=false #{new_resource.username}")
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def add_password
|
72
|
-
if @current_resource.password != @new_resource.password && @new_resource.password
|
73
|
-
Chef::Log.debug("#{@new_resource.username} setting password to #{@new_resource.password}")
|
74
|
-
command = "echo '#{@new_resource.username}:#{@new_resource.password}' | chpasswd -e"
|
75
|
-
shell_out!(command)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# Aix specific handling to update users home directory.
|
80
|
-
def manage_home
|
81
|
-
# -m option does not work on aix, so move dir.
|
82
|
-
if updating_home?
|
83
|
-
universal_options.delete("-m")
|
84
|
-
if ::File.directory?(@current_resource.home)
|
85
|
-
Chef::Log.debug("Changing users home directory from #{@current_resource.home} to #{new_resource.home}")
|
86
|
-
shell_out!("mv #{@current_resource.home} #{new_resource.home}")
|
87
|
-
else
|
88
|
-
Chef::Log.debug("Creating users home directory #{new_resource.home}")
|
89
|
-
shell_out!("mkdir -p #{new_resource.home}")
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2012-2016, Chef Software Inc.
|
3
|
+
# License:: Apache License, Version 2.0
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
class Chef
|
18
|
+
class Provider
|
19
|
+
class User
|
20
|
+
class Aix < Chef::Provider::User::Useradd
|
21
|
+
provides :user, platform: %w{aix}
|
22
|
+
|
23
|
+
UNIVERSAL_OPTIONS = [[:comment, "-c"], [:gid, "-g"], [:shell, "-s"], [:uid, "-u"]]
|
24
|
+
|
25
|
+
def create_user
|
26
|
+
super
|
27
|
+
add_password
|
28
|
+
end
|
29
|
+
|
30
|
+
def manage_user
|
31
|
+
add_password
|
32
|
+
manage_home
|
33
|
+
super
|
34
|
+
end
|
35
|
+
|
36
|
+
# Aix does not support -r like other unix, sytem account is created by adding to 'system' group
|
37
|
+
def useradd_options
|
38
|
+
opts = []
|
39
|
+
opts << "-g" << "system" if new_resource.system
|
40
|
+
opts
|
41
|
+
end
|
42
|
+
|
43
|
+
def check_lock
|
44
|
+
lock_info = shell_out!("lsuser -a account_locked #{new_resource.username}")
|
45
|
+
if whyrun_mode? && passwd_s.stdout.empty? && lock_info.stderr.match(/does not exist/)
|
46
|
+
# if we're in whyrun mode and the user is not yet created we assume it would be
|
47
|
+
return false
|
48
|
+
end
|
49
|
+
raise Chef::Exceptions::User, "Cannot determine if #{@new_resource} is locked!" if lock_info.stdout.empty?
|
50
|
+
|
51
|
+
status = /\S+\s+account_locked=(\S+)/.match(lock_info.stdout)
|
52
|
+
if status && status[1] == "true"
|
53
|
+
@locked = true
|
54
|
+
else
|
55
|
+
@locked = false
|
56
|
+
end
|
57
|
+
|
58
|
+
@locked
|
59
|
+
end
|
60
|
+
|
61
|
+
def lock_user
|
62
|
+
shell_out!("chuser account_locked=true #{new_resource.username}")
|
63
|
+
end
|
64
|
+
|
65
|
+
def unlock_user
|
66
|
+
shell_out!("chuser account_locked=false #{new_resource.username}")
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def add_password
|
72
|
+
if @current_resource.password != @new_resource.password && @new_resource.password
|
73
|
+
Chef::Log.debug("#{@new_resource.username} setting password to #{@new_resource.password}")
|
74
|
+
command = "echo '#{@new_resource.username}:#{@new_resource.password}' | chpasswd -e"
|
75
|
+
shell_out!(command)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Aix specific handling to update users home directory.
|
80
|
+
def manage_home
|
81
|
+
# -m option does not work on aix, so move dir.
|
82
|
+
if updating_home? && managing_home_dir?
|
83
|
+
universal_options.delete("-m")
|
84
|
+
if ::File.directory?(@current_resource.home)
|
85
|
+
Chef::Log.debug("Changing users home directory from #{@current_resource.home} to #{new_resource.home}")
|
86
|
+
shell_out!("mv #{@current_resource.home} #{new_resource.home}")
|
87
|
+
else
|
88
|
+
Chef::Log.debug("Creating users home directory #{new_resource.home}")
|
89
|
+
shell_out!("mkdir -p #{new_resource.home}")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -1,710 +1,710 @@
|
|
1
|
-
#
|
2
|
-
# Author:: Dreamcat4 (<dreamcat4@gmail.com>)
|
3
|
-
# Copyright:: Copyright 2009-2016, Chef Software Inc.
|
4
|
-
# License:: Apache License, Version 2.0
|
5
|
-
#
|
6
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
-
# you may not use this file except in compliance with the License.
|
8
|
-
# You may obtain a copy of the License at
|
9
|
-
#
|
10
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
-
#
|
12
|
-
# Unless required by applicable law or agreed to in writing, software
|
13
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
-
# See the License for the specific language governing permissions and
|
16
|
-
# limitations under the License.
|
17
|
-
#
|
18
|
-
|
19
|
-
require "mixlib/shellout"
|
20
|
-
require "chef/provider/user"
|
21
|
-
require "openssl"
|
22
|
-
require "plist"
|
23
|
-
require "chef/util/path_helper"
|
24
|
-
|
25
|
-
class Chef
|
26
|
-
class Provider
|
27
|
-
class User
|
28
|
-
#
|
29
|
-
# The most tricky bit of this provider is the way it deals with user passwords.
|
30
|
-
# Mac OS X has different password shadow calculations based on the version.
|
31
|
-
# < 10.7 => password shadow calculation format SALTED-SHA1
|
32
|
-
# => stored in: /var/db/shadow/hash/#{guid}
|
33
|
-
# => shadow binary length 68 bytes
|
34
|
-
# => First 4 bytes salt / Next 64 bytes shadow value
|
35
|
-
# = 10.7 => password shadow calculation format SALTED-SHA512
|
36
|
-
# => stored in: /var/db/dslocal/nodes/Default/users/#{name}.plist
|
37
|
-
# => shadow binary length 68 bytes
|
38
|
-
# => First 4 bytes salt / Next 64 bytes shadow value
|
39
|
-
# > 10.7 => password shadow calculation format SALTED-SHA512-PBKDF2
|
40
|
-
# => stored in: /var/db/dslocal/nodes/Default/users/#{name}.plist
|
41
|
-
# => shadow binary length 128 bytes
|
42
|
-
# => Salt / Iterations are stored separately in the same file
|
43
|
-
#
|
44
|
-
# This provider only supports Mac OSX versions 10.7 and above
|
45
|
-
class Dscl < Chef::Provider::User
|
46
|
-
|
47
|
-
attr_accessor :user_info
|
48
|
-
attr_accessor :authentication_authority
|
49
|
-
attr_accessor :password_shadow_conversion_algorithm
|
50
|
-
|
51
|
-
provides :user, os: "darwin"
|
52
|
-
|
53
|
-
def define_resource_requirements
|
54
|
-
super
|
55
|
-
|
56
|
-
requirements.assert(:all_actions) do |a|
|
57
|
-
a.assertion { mac_osx_version_less_than_10_7? == false }
|
58
|
-
a.failure_message(Chef::Exceptions::User, "Chef::Provider::User::Dscl only supports Mac OS X versions 10.7 and above.")
|
59
|
-
end
|
60
|
-
|
61
|
-
requirements.assert(:all_actions) do |a|
|
62
|
-
a.assertion { ::File.exists?("/usr/bin/dscl") }
|
63
|
-
a.failure_message(Chef::Exceptions::User, "Cannot find binary '/usr/bin/dscl' on the system for #{new_resource}!")
|
64
|
-
end
|
65
|
-
|
66
|
-
requirements.assert(:all_actions) do |a|
|
67
|
-
a.assertion { ::File.exists?("/usr/bin/plutil") }
|
68
|
-
a.failure_message(Chef::Exceptions::User, "Cannot find binary '/usr/bin/plutil' on the system for #{new_resource}!")
|
69
|
-
end
|
70
|
-
|
71
|
-
requirements.assert(:create, :modify, :manage) do |a|
|
72
|
-
a.assertion do
|
73
|
-
if new_resource.password && mac_osx_version_greater_than_10_7?
|
74
|
-
# SALTED-SHA512 password shadow hashes are not supported on 10.8 and above.
|
75
|
-
!salted_sha512?(new_resource.password)
|
76
|
-
else
|
77
|
-
true
|
78
|
-
end
|
79
|
-
end
|
80
|
-
a.failure_message(Chef::Exceptions::User, "SALTED-SHA512 passwords are not supported on Mac 10.8 and above. \
|
81
|
-
If you want to set the user password using shadow info make sure you specify a SALTED-SHA512-PBKDF2 shadow hash \
|
82
|
-
in 'password', with the associated 'salt' and 'iterations'.")
|
83
|
-
end
|
84
|
-
|
85
|
-
requirements.assert(:create, :modify, :manage) do |a|
|
86
|
-
a.assertion do
|
87
|
-
if new_resource.password && mac_osx_version_greater_than_10_7? && salted_sha512_pbkdf2?(new_resource.password)
|
88
|
-
# salt and iterations should be specified when
|
89
|
-
# SALTED-SHA512-PBKDF2 password shadow hash is given
|
90
|
-
!new_resource.salt.nil? && !new_resource.iterations.nil?
|
91
|
-
else
|
92
|
-
true
|
93
|
-
end
|
94
|
-
end
|
95
|
-
a.failure_message(Chef::Exceptions::User, "SALTED-SHA512-PBKDF2 shadow hash is given without associated \
|
96
|
-
'salt' and 'iterations'. Please specify 'salt' and 'iterations' in order to set the user password using shadow hash.")
|
97
|
-
end
|
98
|
-
|
99
|
-
requirements.assert(:create, :modify, :manage) do |a|
|
100
|
-
a.assertion do
|
101
|
-
if new_resource.password && !mac_osx_version_greater_than_10_7?
|
102
|
-
# On 10.7 SALTED-SHA512-PBKDF2 is not supported
|
103
|
-
!salted_sha512_pbkdf2?(new_resource.password)
|
104
|
-
else
|
105
|
-
true
|
106
|
-
end
|
107
|
-
end
|
108
|
-
a.failure_message(Chef::Exceptions::User, "SALTED-SHA512-PBKDF2 shadow hashes are not supported on \
|
109
|
-
Mac OS X version 10.7. Please specify a SALTED-SHA512 shadow hash in 'password' attribute to set the \
|
110
|
-
user password using shadow hash.")
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def load_current_resource
|
115
|
-
@current_resource = Chef::Resource::User.new(new_resource.username)
|
116
|
-
current_resource.username(new_resource.username)
|
117
|
-
|
118
|
-
@user_info = read_user_info
|
119
|
-
if user_info
|
120
|
-
current_resource.uid(dscl_get(user_info, :uid))
|
121
|
-
current_resource.gid(dscl_get(user_info, :gid))
|
122
|
-
current_resource.home(dscl_get(user_info, :home))
|
123
|
-
current_resource.shell(dscl_get(user_info, :shell))
|
124
|
-
current_resource.comment(dscl_get(user_info, :comment))
|
125
|
-
@authentication_authority = dscl_get(user_info, :auth_authority)
|
126
|
-
|
127
|
-
if new_resource.password && dscl_get(user_info, :password) == "********"
|
128
|
-
# A password is set. Let's get the password information from shadow file
|
129
|
-
shadow_hash_binary = dscl_get(user_info, :shadow_hash)
|
130
|
-
|
131
|
-
# Calling shell_out directly since we want to give an input stream
|
132
|
-
shadow_hash_xml = convert_binary_plist_to_xml(shadow_hash_binary.string)
|
133
|
-
shadow_hash = Plist.parse_xml(shadow_hash_xml)
|
134
|
-
|
135
|
-
if shadow_hash["SALTED-SHA512"]
|
136
|
-
# Convert the shadow value from Base64 encoding to hex before consuming them
|
137
|
-
@password_shadow_conversion_algorithm = "SALTED-SHA512"
|
138
|
-
current_resource.password(shadow_hash["SALTED-SHA512"].string.unpack("H*").first)
|
139
|
-
elsif shadow_hash["SALTED-SHA512-PBKDF2"]
|
140
|
-
@password_shadow_conversion_algorithm = "SALTED-SHA512-PBKDF2"
|
141
|
-
# Convert the entropy from Base64 encoding to hex before consuming them
|
142
|
-
current_resource.password(shadow_hash["SALTED-SHA512-PBKDF2"]["entropy"].string.unpack("H*").first)
|
143
|
-
current_resource.iterations(shadow_hash["SALTED-SHA512-PBKDF2"]["iterations"])
|
144
|
-
# Convert the salt from Base64 encoding to hex before consuming them
|
145
|
-
current_resource.salt(shadow_hash["SALTED-SHA512-PBKDF2"]["salt"].string.unpack("H*").first)
|
146
|
-
else
|
147
|
-
raise(Chef::Exceptions::User, "Unknown shadow_hash format: #{shadow_hash.keys.join(' ')}")
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
convert_group_name if new_resource.gid
|
152
|
-
else
|
153
|
-
@user_exists = false
|
154
|
-
Chef::Log.debug("#{new_resource} user does not exist")
|
155
|
-
end
|
156
|
-
|
157
|
-
current_resource
|
158
|
-
end
|
159
|
-
|
160
|
-
#
|
161
|
-
# Provider Actions
|
162
|
-
#
|
163
|
-
|
164
|
-
def create_user
|
165
|
-
dscl_create_user
|
166
|
-
# set_password modifies the plist file of the user directly. So update
|
167
|
-
# the password first before making any modifications to the user.
|
168
|
-
set_password
|
169
|
-
dscl_create_comment
|
170
|
-
dscl_set_uid
|
171
|
-
dscl_set_gid
|
172
|
-
dscl_set_home
|
173
|
-
dscl_set_shell
|
174
|
-
end
|
175
|
-
|
176
|
-
def manage_user
|
177
|
-
# set_password modifies the plist file of the user directly. So update
|
178
|
-
# the password first before making any modifications to the user.
|
179
|
-
set_password if diverged_password?
|
180
|
-
dscl_create_user if diverged?(:username)
|
181
|
-
dscl_create_comment if diverged?(:comment)
|
182
|
-
dscl_set_uid if diverged?(:uid)
|
183
|
-
dscl_set_gid if diverged?(:gid)
|
184
|
-
dscl_set_home if diverged?(:home)
|
185
|
-
dscl_set_shell if diverged?(:shell)
|
186
|
-
end
|
187
|
-
|
188
|
-
#
|
189
|
-
# Action Helpers
|
190
|
-
#
|
191
|
-
|
192
|
-
#
|
193
|
-
# Create a user using dscl
|
194
|
-
#
|
195
|
-
def dscl_create_user
|
196
|
-
run_dscl("create /Users/#{new_resource.username}")
|
197
|
-
end
|
198
|
-
|
199
|
-
#
|
200
|
-
# Saves the specified Chef user `comment` into RealName attribute
|
201
|
-
# of Mac user. If `comment` is not specified, it takes `username` value.
|
202
|
-
#
|
203
|
-
def dscl_create_comment
|
204
|
-
comment = new_resource.comment || new_resource.username
|
205
|
-
run_dscl("create /Users/#{new_resource.username} RealName '#{comment}'")
|
206
|
-
end
|
207
|
-
|
208
|
-
#
|
209
|
-
# Sets the user id for the user using dscl.
|
210
|
-
# If a `uid` is not specified, it finds the next available one starting
|
211
|
-
# from 200 if `system` is set, 500 otherwise.
|
212
|
-
#
|
213
|
-
def dscl_set_uid
|
214
|
-
# XXX: mutates the new resource
|
215
|
-
new_resource.uid(get_free_uid) if new_resource.uid.nil? || new_resource.uid == ""
|
216
|
-
|
217
|
-
if uid_used?(new_resource.uid)
|
218
|
-
raise(Chef::Exceptions::RequestedUIDUnavailable, "uid #{new_resource.uid} is already in use")
|
219
|
-
end
|
220
|
-
|
221
|
-
run_dscl("create /Users/#{new_resource.username} UniqueID #{new_resource.uid}")
|
222
|
-
end
|
223
|
-
|
224
|
-
#
|
225
|
-
# Find the next available uid on the system. starting with 200 if `system` is set,
|
226
|
-
# 500 otherwise.
|
227
|
-
#
|
228
|
-
def get_free_uid(search_limit = 1000)
|
229
|
-
uid = nil
|
230
|
-
base_uid = new_resource.system ? 200 : 500
|
231
|
-
next_uid_guess = base_uid
|
232
|
-
users_uids = run_dscl("list /Users uid")
|
233
|
-
while next_uid_guess < search_limit + base_uid
|
234
|
-
if users_uids =~ Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n")
|
235
|
-
next_uid_guess += 1
|
236
|
-
else
|
237
|
-
uid = next_uid_guess
|
238
|
-
break
|
239
|
-
end
|
240
|
-
end
|
241
|
-
return uid || raise("uid not found. Exhausted. Searched #{search_limit} times")
|
242
|
-
end
|
243
|
-
|
244
|
-
#
|
245
|
-
# Returns true if uid is in use by a different account, false otherwise.
|
246
|
-
#
|
247
|
-
def uid_used?(uid)
|
248
|
-
return false unless uid
|
249
|
-
users_uids = run_dscl("list /Users uid").split("\n")
|
250
|
-
uid_map = users_uids.inject({}) do |tmap, tuid|
|
251
|
-
x = tuid.split
|
252
|
-
tmap[x[1]] = x[0]
|
253
|
-
tmap
|
254
|
-
end
|
255
|
-
if uid_map[uid.to_s]
|
256
|
-
unless uid_map[uid.to_s] == new_resource.username.to_s
|
257
|
-
return true
|
258
|
-
end
|
259
|
-
end
|
260
|
-
return false
|
261
|
-
end
|
262
|
-
|
263
|
-
#
|
264
|
-
# Sets the group id for the user using dscl. Fails if a group doesn't
|
265
|
-
# exist on the system with given group id. If `gid` is not specified, it
|
266
|
-
# sets a default Mac user group "staff", with id 20.
|
267
|
-
#
|
268
|
-
def dscl_set_gid
|
269
|
-
if new_resource.gid.nil?
|
270
|
-
# XXX: mutates the new resource
|
271
|
-
new_resource.gid(20)
|
272
|
-
elsif !new_resource.gid.to_s.match(/^\d+$/)
|
273
|
-
begin
|
274
|
-
possible_gid = run_dscl("read /Groups/#{new_resource.gid} PrimaryGroupID").split(" ").last
|
275
|
-
rescue Chef::Exceptions::DsclCommandFailed => e
|
276
|
-
raise Chef::Exceptions::GroupIDNotFound.new("Group not found for #{new_resource.gid} when creating user #{new_resource.username}")
|
277
|
-
end
|
278
|
-
# XXX: mutates the new resource
|
279
|
-
new_resource.gid(possible_gid) if possible_gid && possible_gid.match(/^\d+$/)
|
280
|
-
end
|
281
|
-
run_dscl("create /Users/#{new_resource.username} PrimaryGroupID '#{new_resource.gid}'")
|
282
|
-
end
|
283
|
-
|
284
|
-
#
|
285
|
-
# Sets the home directory for the user. If `:manage_home` is set home
|
286
|
-
# directory is managed (moved / created) for the user.
|
287
|
-
#
|
288
|
-
def dscl_set_home
|
289
|
-
if new_resource.home.nil? || new_resource.home.empty?
|
290
|
-
run_dscl("delete /Users/#{new_resource.username} NFSHomeDirectory")
|
291
|
-
return
|
292
|
-
end
|
293
|
-
|
294
|
-
if new_resource.supports[:manage_home]
|
295
|
-
validate_home_dir_specification!
|
296
|
-
|
297
|
-
if (current_resource.home == new_resource.home) && !new_home_exists?
|
298
|
-
ditto_home
|
299
|
-
elsif !current_home_exists? && !new_home_exists?
|
300
|
-
ditto_home
|
301
|
-
elsif current_home_exists?
|
302
|
-
move_home
|
303
|
-
end
|
304
|
-
end
|
305
|
-
run_dscl("create /Users/#{new_resource.username} NFSHomeDirectory '#{new_resource.home}'")
|
306
|
-
end
|
307
|
-
|
308
|
-
def validate_home_dir_specification!
|
309
|
-
unless new_resource.home =~ /^\//
|
310
|
-
raise(Chef::Exceptions::InvalidHomeDirectory, "invalid path spec for User: '#{new_resource.username}', home directory: '#{new_resource.home}'")
|
311
|
-
end
|
312
|
-
end
|
313
|
-
|
314
|
-
def current_home_exists?
|
315
|
-
::File.exist?("#{current_resource.home}")
|
316
|
-
end
|
317
|
-
|
318
|
-
def new_home_exists?
|
319
|
-
::File.exist?("#{new_resource.home}")
|
320
|
-
end
|
321
|
-
|
322
|
-
def ditto_home
|
323
|
-
skel = "/System/Library/User Template/English.lproj"
|
324
|
-
raise(Chef::Exceptions::User, "can't find skel at: #{skel}") unless ::File.exists?(skel)
|
325
|
-
shell_out! "ditto '#{skel}' '#{new_resource.home}'"
|
326
|
-
::FileUtils.chown_R(new_resource.username, new_resource.gid.to_s, new_resource.home)
|
327
|
-
end
|
328
|
-
|
329
|
-
def move_home
|
330
|
-
Chef::Log.debug("#{new_resource} moving #{self} home from #{current_resource.home} to #{new_resource.home}")
|
331
|
-
|
332
|
-
src = current_resource.home
|
333
|
-
FileUtils.mkdir_p(new_resource.home)
|
334
|
-
files = ::Dir.glob("#{Chef::Util::PathHelper.
|
335
|
-
::FileUtils.mv(files, new_resource.home, :force => true)
|
336
|
-
::FileUtils.rmdir(src)
|
337
|
-
::FileUtils.chown_R(new_resource.username, new_resource.gid.to_s, new_resource.home)
|
338
|
-
end
|
339
|
-
|
340
|
-
#
|
341
|
-
# Sets the shell for the user using dscl.
|
342
|
-
#
|
343
|
-
def dscl_set_shell
|
344
|
-
if new_resource.shell || ::File.exists?("#{new_resource.shell}")
|
345
|
-
run_dscl("create /Users/#{new_resource.username} UserShell '#{new_resource.shell}'")
|
346
|
-
else
|
347
|
-
run_dscl("create /Users/#{new_resource.username} UserShell '/usr/bin/false'")
|
348
|
-
end
|
349
|
-
end
|
350
|
-
|
351
|
-
#
|
352
|
-
# Sets the password for the user based on given password parameters.
|
353
|
-
# Chef supports specifying plain-text passwords and password shadow
|
354
|
-
# hash data.
|
355
|
-
#
|
356
|
-
def set_password
|
357
|
-
# Return if there is no password to set
|
358
|
-
return if new_resource.password.nil?
|
359
|
-
|
360
|
-
shadow_info = prepare_password_shadow_info
|
361
|
-
|
362
|
-
# Shadow info is saved as binary plist. Convert the info to binary plist.
|
363
|
-
shadow_info_binary = StringIO.new
|
364
|
-
command = Mixlib::ShellOut.new("plutil -convert binary1 -o - -",
|
365
|
-
:input => shadow_info.to_plist, :live_stream => shadow_info_binary)
|
366
|
-
command.run_command
|
367
|
-
|
368
|
-
if user_info.nil?
|
369
|
-
# User is just created. read_user_info() will read the fresh information
|
370
|
-
# for the user with a cache flush. However with experimentation we've seen
|
371
|
-
# that dscl cache is not immediately updated after the creation of the user
|
372
|
-
# This is odd and needs to be investigated further.
|
373
|
-
sleep 3
|
374
|
-
@user_info = read_user_info
|
375
|
-
end
|
376
|
-
|
377
|
-
# Replace the shadow info in user's plist
|
378
|
-
dscl_set(user_info, :shadow_hash, shadow_info_binary)
|
379
|
-
save_user_info(user_info)
|
380
|
-
end
|
381
|
-
|
382
|
-
#
|
383
|
-
# Prepares the password shadow info based on the platform version.
|
384
|
-
#
|
385
|
-
def prepare_password_shadow_info
|
386
|
-
shadow_info = {}
|
387
|
-
entropy = nil
|
388
|
-
salt = nil
|
389
|
-
iterations = nil
|
390
|
-
|
391
|
-
if mac_osx_version_10_7?
|
392
|
-
hash_value = if salted_sha512?(new_resource.password)
|
393
|
-
new_resource.password
|
394
|
-
else
|
395
|
-
# Create a random 4 byte salt
|
396
|
-
salt = OpenSSL::Random.random_bytes(4)
|
397
|
-
encoded_password = OpenSSL::Digest::SHA512.hexdigest(salt + new_resource.password)
|
398
|
-
hash_value = salt.unpack("H*").first + encoded_password
|
399
|
-
end
|
400
|
-
|
401
|
-
shadow_info["SALTED-SHA512"] = StringIO.new
|
402
|
-
shadow_info["SALTED-SHA512"].string = convert_to_binary(hash_value)
|
403
|
-
shadow_info
|
404
|
-
else
|
405
|
-
if salted_sha512_pbkdf2?(new_resource.password)
|
406
|
-
entropy = convert_to_binary(new_resource.password)
|
407
|
-
salt = convert_to_binary(new_resource.salt)
|
408
|
-
iterations = new_resource.iterations
|
409
|
-
else
|
410
|
-
salt = OpenSSL::Random.random_bytes(32)
|
411
|
-
iterations = new_resource.iterations # Use the default if not specified by the user
|
412
|
-
|
413
|
-
entropy = OpenSSL::PKCS5.pbkdf2_hmac(
|
414
|
-
new_resource.password,
|
415
|
-
salt,
|
416
|
-
iterations,
|
417
|
-
128,
|
418
|
-
OpenSSL::Digest::SHA512.new
|
419
|
-
)
|
420
|
-
end
|
421
|
-
|
422
|
-
pbkdf_info = {}
|
423
|
-
pbkdf_info["entropy"] = StringIO.new
|
424
|
-
pbkdf_info["entropy"].string = entropy
|
425
|
-
pbkdf_info["salt"] = StringIO.new
|
426
|
-
pbkdf_info["salt"].string = salt
|
427
|
-
pbkdf_info["iterations"] = iterations
|
428
|
-
|
429
|
-
shadow_info["SALTED-SHA512-PBKDF2"] = pbkdf_info
|
430
|
-
end
|
431
|
-
|
432
|
-
shadow_info
|
433
|
-
end
|
434
|
-
|
435
|
-
#
|
436
|
-
# Removes the user from the system after removing user from his groups
|
437
|
-
# and deleting home directory if needed.
|
438
|
-
#
|
439
|
-
def remove_user
|
440
|
-
if new_resource.supports[:manage_home]
|
441
|
-
# Remove home directory
|
442
|
-
FileUtils.rm_rf(current_resource.home)
|
443
|
-
end
|
444
|
-
|
445
|
-
# Remove the user from its groups
|
446
|
-
run_dscl("list /Groups").each_line do |group|
|
447
|
-
if member_of_group?(group.chomp)
|
448
|
-
run_dscl("delete /Groups/#{group.chomp} GroupMembership '#{new_resource.username}'")
|
449
|
-
end
|
450
|
-
end
|
451
|
-
|
452
|
-
# Remove user account
|
453
|
-
run_dscl("delete /Users/#{new_resource.username}")
|
454
|
-
end
|
455
|
-
|
456
|
-
#
|
457
|
-
# Locks the user.
|
458
|
-
#
|
459
|
-
def lock_user
|
460
|
-
run_dscl("append /Users/#{new_resource.username} AuthenticationAuthority ';DisabledUser;'")
|
461
|
-
end
|
462
|
-
|
463
|
-
#
|
464
|
-
# Unlocks the user
|
465
|
-
#
|
466
|
-
def unlock_user
|
467
|
-
auth_string = authentication_authority.gsub(/AuthenticationAuthority: /, "").gsub(/;DisabledUser;/, "").strip
|
468
|
-
run_dscl("create /Users/#{new_resource.username} AuthenticationAuthority '#{auth_string}'")
|
469
|
-
end
|
470
|
-
|
471
|
-
#
|
472
|
-
# Returns true if the user is locked, false otherwise.
|
473
|
-
#
|
474
|
-
def locked?
|
475
|
-
if authentication_authority
|
476
|
-
!!(authentication_authority =~ /DisabledUser/ )
|
477
|
-
else
|
478
|
-
false
|
479
|
-
end
|
480
|
-
end
|
481
|
-
|
482
|
-
#
|
483
|
-
# This is the interface base User provider requires to provide idempotency.
|
484
|
-
#
|
485
|
-
def check_lock
|
486
|
-
return @locked = locked?
|
487
|
-
end
|
488
|
-
|
489
|
-
#
|
490
|
-
# Helper functions
|
491
|
-
#
|
492
|
-
|
493
|
-
#
|
494
|
-
# Returns true if the system state and desired state is different for
|
495
|
-
# given attribute.
|
496
|
-
#
|
497
|
-
def diverged?(parameter)
|
498
|
-
parameter_updated?(parameter) && (not new_resource.send(parameter).nil?)
|
499
|
-
end
|
500
|
-
|
501
|
-
def parameter_updated?(parameter)
|
502
|
-
not (new_resource.send(parameter) == current_resource.send(parameter))
|
503
|
-
end
|
504
|
-
|
505
|
-
#
|
506
|
-
# We need a special check function for password since we support both
|
507
|
-
# plain text and shadow hash data.
|
508
|
-
#
|
509
|
-
# Checks if password needs update based on platform version and the
|
510
|
-
# type of the password specified.
|
511
|
-
#
|
512
|
-
def diverged_password?
|
513
|
-
return false if new_resource.password.nil?
|
514
|
-
|
515
|
-
# Dscl provider supports both plain text passwords and shadow hashes.
|
516
|
-
if mac_osx_version_10_7?
|
517
|
-
if salted_sha512?(new_resource.password)
|
518
|
-
diverged?(:password)
|
519
|
-
else
|
520
|
-
!salted_sha512_password_match?
|
521
|
-
end
|
522
|
-
else
|
523
|
-
# When a system is upgraded to a version 10.7+ shadow hashes of the users
|
524
|
-
# will be updated when the user logs in. So it's possible that we will have
|
525
|
-
# SALTED-SHA512 password in the current_resource. In that case we will force
|
526
|
-
# password to be updated.
|
527
|
-
return true if salted_sha512?(current_resource.password)
|
528
|
-
|
529
|
-
# Some system users don't have salts; this can happen if the system is
|
530
|
-
# upgraded and the user hasn't logged in yet. In this case, we will force
|
531
|
-
# the password to be updated.
|
532
|
-
return true if current_resource.salt.nil?
|
533
|
-
|
534
|
-
if salted_sha512_pbkdf2?(new_resource.password)
|
535
|
-
diverged?(:password) || diverged?(:salt) || diverged?(:iterations)
|
536
|
-
else
|
537
|
-
!salted_sha512_pbkdf2_password_match?
|
538
|
-
end
|
539
|
-
end
|
540
|
-
end
|
541
|
-
|
542
|
-
#
|
543
|
-
# Returns true if user is member of the specified group, false otherwise.
|
544
|
-
#
|
545
|
-
def member_of_group?(group_name)
|
546
|
-
membership_info = ""
|
547
|
-
begin
|
548
|
-
membership_info = run_dscl("read /Groups/#{group_name}")
|
549
|
-
rescue Chef::Exceptions::DsclCommandFailed
|
550
|
-
# Raised if the group doesn't contain any members
|
551
|
-
end
|
552
|
-
# Output is something like:
|
553
|
-
# GroupMembership: root admin etc
|
554
|
-
members = membership_info.split(" ")
|
555
|
-
members.shift # Get rid of GroupMembership: string
|
556
|
-
members.include?(new_resource.username)
|
557
|
-
end
|
558
|
-
|
559
|
-
#
|
560
|
-
# DSCL Helper functions
|
561
|
-
#
|
562
|
-
|
563
|
-
# A simple map of Chef's terms to DSCL's terms.
|
564
|
-
DSCL_PROPERTY_MAP = {
|
565
|
-
:uid => "uid",
|
566
|
-
:gid => "gid",
|
567
|
-
:home => "home",
|
568
|
-
:shell => "shell",
|
569
|
-
:comment => "realname",
|
570
|
-
:password => "passwd",
|
571
|
-
:auth_authority => "authentication_authority",
|
572
|
-
:shadow_hash => "ShadowHashData",
|
573
|
-
}.freeze
|
574
|
-
|
575
|
-
# Directory where the user plist files are stored for versions 10.7 and above
|
576
|
-
USER_PLIST_DIRECTORY = "/var/db/dslocal/nodes/Default/users".freeze
|
577
|
-
|
578
|
-
#
|
579
|
-
# Reads the user plist and returns a hash keyed with DSCL properties specified
|
580
|
-
# in DSCL_PROPERTY_MAP. Return nil if the user is not found.
|
581
|
-
#
|
582
|
-
def read_user_info
|
583
|
-
user_info = nil
|
584
|
-
|
585
|
-
# We flush the cache here in order to make sure that we read fresh information
|
586
|
-
# for the user.
|
587
|
-
shell_out("dscacheutil '-flushcache'")
|
588
|
-
|
589
|
-
begin
|
590
|
-
user_plist_file = "#{USER_PLIST_DIRECTORY}/#{new_resource.username}.plist"
|
591
|
-
user_plist_info = run_plutil("convert xml1 -o - #{user_plist_file}")
|
592
|
-
user_info = Plist.parse_xml(user_plist_info)
|
593
|
-
rescue Chef::Exceptions::PlistUtilCommandFailed
|
594
|
-
end
|
595
|
-
|
596
|
-
user_info
|
597
|
-
end
|
598
|
-
|
599
|
-
#
|
600
|
-
# Saves the given hash keyed with DSCL properties specified
|
601
|
-
# in DSCL_PROPERTY_MAP to the disk.
|
602
|
-
#
|
603
|
-
def save_user_info(user_info)
|
604
|
-
user_plist_file = "#{USER_PLIST_DIRECTORY}/#{new_resource.username}.plist"
|
605
|
-
Plist::Emit.save_plist(user_info, user_plist_file)
|
606
|
-
run_plutil("convert binary1 #{user_plist_file}")
|
607
|
-
end
|
608
|
-
|
609
|
-
#
|
610
|
-
# Sets a value in user information hash using Chef attributes as keys.
|
611
|
-
#
|
612
|
-
def dscl_set(user_hash, key, value)
|
613
|
-
raise "Unknown dscl key #{key}" unless DSCL_PROPERTY_MAP.keys.include?(key)
|
614
|
-
user_hash[DSCL_PROPERTY_MAP[key]] = [ value ]
|
615
|
-
user_hash
|
616
|
-
end
|
617
|
-
|
618
|
-
#
|
619
|
-
# Gets a value from user information hash using Chef attributes as keys.
|
620
|
-
#
|
621
|
-
def dscl_get(user_hash, key)
|
622
|
-
raise "Unknown dscl key #{key}" unless DSCL_PROPERTY_MAP.keys.include?(key)
|
623
|
-
# DSCL values are set as arrays
|
624
|
-
value = user_hash[DSCL_PROPERTY_MAP[key]]
|
625
|
-
value.nil? ? value : value.first
|
626
|
-
end
|
627
|
-
|
628
|
-
#
|
629
|
-
# System Helpets
|
630
|
-
#
|
631
|
-
|
632
|
-
def mac_osx_version
|
633
|
-
# This provider will only be invoked on node[:platform] == "mac_os_x"
|
634
|
-
# We do not check or assert that here.
|
635
|
-
node[:platform_version]
|
636
|
-
end
|
637
|
-
|
638
|
-
def mac_osx_version_10_7?
|
639
|
-
mac_osx_version.start_with?("10.7.")
|
640
|
-
end
|
641
|
-
|
642
|
-
def mac_osx_version_less_than_10_7?
|
643
|
-
versions = mac_osx_version.split(".")
|
644
|
-
# Make integer comparison in order not to report 10.10 less than 10.7
|
645
|
-
(versions[0].to_i <= 10 && versions[1].to_i < 7)
|
646
|
-
end
|
647
|
-
|
648
|
-
def mac_osx_version_greater_than_10_7?
|
649
|
-
versions = mac_osx_version.split(".")
|
650
|
-
# Make integer comparison in order not to report 10.10 less than 10.7
|
651
|
-
(versions[0].to_i >= 10 && versions[1].to_i > 7)
|
652
|
-
end
|
653
|
-
|
654
|
-
def run_dscl(*args)
|
655
|
-
result = shell_out("dscl . -#{args.join(' ')}")
|
656
|
-
return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 )
|
657
|
-
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") unless result.exitstatus == 0
|
658
|
-
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if result.stdout =~ /No such key: /
|
659
|
-
result.stdout
|
660
|
-
end
|
661
|
-
|
662
|
-
def run_plutil(*args)
|
663
|
-
result = shell_out("plutil -#{args.join(' ')}")
|
664
|
-
raise(Chef::Exceptions::PlistUtilCommandFailed, "plutil error: #{result.inspect}") unless result.exitstatus == 0
|
665
|
-
if result.stdout.encoding == Encoding::ASCII_8BIT
|
666
|
-
result.stdout.encode("utf-8", "binary", :undef => :replace, :invalid => :replace, :replace => "?")
|
667
|
-
else
|
668
|
-
result.stdout
|
669
|
-
end
|
670
|
-
end
|
671
|
-
|
672
|
-
def convert_binary_plist_to_xml(binary_plist_string)
|
673
|
-
Mixlib::ShellOut.new("plutil -convert xml1 -o - -", :input => binary_plist_string).run_command.stdout
|
674
|
-
end
|
675
|
-
|
676
|
-
def convert_to_binary(string)
|
677
|
-
string.unpack("a2" * (string.size / 2)).collect { |i| i.hex.chr }.join
|
678
|
-
end
|
679
|
-
|
680
|
-
def salted_sha512?(string)
|
681
|
-
!!(string =~ /^[[:xdigit:]]{136}$/)
|
682
|
-
end
|
683
|
-
|
684
|
-
def salted_sha512_password_match?
|
685
|
-
# Salt is included in the first 4 bytes of shadow data
|
686
|
-
salt = current_resource.password.slice(0, 8)
|
687
|
-
shadow = OpenSSL::Digest::SHA512.hexdigest(convert_to_binary(salt) + new_resource.password)
|
688
|
-
current_resource.password == salt + shadow
|
689
|
-
end
|
690
|
-
|
691
|
-
def salted_sha512_pbkdf2?(string)
|
692
|
-
!!(string =~ /^[[:xdigit:]]{256}$/)
|
693
|
-
end
|
694
|
-
|
695
|
-
def salted_sha512_pbkdf2_password_match?
|
696
|
-
salt = convert_to_binary(current_resource.salt)
|
697
|
-
|
698
|
-
OpenSSL::PKCS5.pbkdf2_hmac(
|
699
|
-
new_resource.password,
|
700
|
-
salt,
|
701
|
-
current_resource.iterations,
|
702
|
-
128,
|
703
|
-
OpenSSL::Digest::SHA512.new
|
704
|
-
).unpack("H*").first == current_resource.password
|
705
|
-
end
|
706
|
-
|
707
|
-
end
|
708
|
-
end
|
709
|
-
end
|
710
|
-
end
|
1
|
+
#
|
2
|
+
# Author:: Dreamcat4 (<dreamcat4@gmail.com>)
|
3
|
+
# Copyright:: Copyright 2009-2016, Chef Software Inc.
|
4
|
+
# License:: Apache License, Version 2.0
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
|
19
|
+
require "mixlib/shellout"
|
20
|
+
require "chef/provider/user"
|
21
|
+
require "openssl"
|
22
|
+
require "plist"
|
23
|
+
require "chef/util/path_helper"
|
24
|
+
|
25
|
+
class Chef
|
26
|
+
class Provider
|
27
|
+
class User
|
28
|
+
#
|
29
|
+
# The most tricky bit of this provider is the way it deals with user passwords.
|
30
|
+
# Mac OS X has different password shadow calculations based on the version.
|
31
|
+
# < 10.7 => password shadow calculation format SALTED-SHA1
|
32
|
+
# => stored in: /var/db/shadow/hash/#{guid}
|
33
|
+
# => shadow binary length 68 bytes
|
34
|
+
# => First 4 bytes salt / Next 64 bytes shadow value
|
35
|
+
# = 10.7 => password shadow calculation format SALTED-SHA512
|
36
|
+
# => stored in: /var/db/dslocal/nodes/Default/users/#{name}.plist
|
37
|
+
# => shadow binary length 68 bytes
|
38
|
+
# => First 4 bytes salt / Next 64 bytes shadow value
|
39
|
+
# > 10.7 => password shadow calculation format SALTED-SHA512-PBKDF2
|
40
|
+
# => stored in: /var/db/dslocal/nodes/Default/users/#{name}.plist
|
41
|
+
# => shadow binary length 128 bytes
|
42
|
+
# => Salt / Iterations are stored separately in the same file
|
43
|
+
#
|
44
|
+
# This provider only supports Mac OSX versions 10.7 and above
|
45
|
+
class Dscl < Chef::Provider::User
|
46
|
+
|
47
|
+
attr_accessor :user_info
|
48
|
+
attr_accessor :authentication_authority
|
49
|
+
attr_accessor :password_shadow_conversion_algorithm
|
50
|
+
|
51
|
+
provides :user, os: "darwin"
|
52
|
+
|
53
|
+
def define_resource_requirements
|
54
|
+
super
|
55
|
+
|
56
|
+
requirements.assert(:all_actions) do |a|
|
57
|
+
a.assertion { mac_osx_version_less_than_10_7? == false }
|
58
|
+
a.failure_message(Chef::Exceptions::User, "Chef::Provider::User::Dscl only supports Mac OS X versions 10.7 and above.")
|
59
|
+
end
|
60
|
+
|
61
|
+
requirements.assert(:all_actions) do |a|
|
62
|
+
a.assertion { ::File.exists?("/usr/bin/dscl") }
|
63
|
+
a.failure_message(Chef::Exceptions::User, "Cannot find binary '/usr/bin/dscl' on the system for #{new_resource}!")
|
64
|
+
end
|
65
|
+
|
66
|
+
requirements.assert(:all_actions) do |a|
|
67
|
+
a.assertion { ::File.exists?("/usr/bin/plutil") }
|
68
|
+
a.failure_message(Chef::Exceptions::User, "Cannot find binary '/usr/bin/plutil' on the system for #{new_resource}!")
|
69
|
+
end
|
70
|
+
|
71
|
+
requirements.assert(:create, :modify, :manage) do |a|
|
72
|
+
a.assertion do
|
73
|
+
if new_resource.password && mac_osx_version_greater_than_10_7?
|
74
|
+
# SALTED-SHA512 password shadow hashes are not supported on 10.8 and above.
|
75
|
+
!salted_sha512?(new_resource.password)
|
76
|
+
else
|
77
|
+
true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
a.failure_message(Chef::Exceptions::User, "SALTED-SHA512 passwords are not supported on Mac 10.8 and above. \
|
81
|
+
If you want to set the user password using shadow info make sure you specify a SALTED-SHA512-PBKDF2 shadow hash \
|
82
|
+
in 'password', with the associated 'salt' and 'iterations'.")
|
83
|
+
end
|
84
|
+
|
85
|
+
requirements.assert(:create, :modify, :manage) do |a|
|
86
|
+
a.assertion do
|
87
|
+
if new_resource.password && mac_osx_version_greater_than_10_7? && salted_sha512_pbkdf2?(new_resource.password)
|
88
|
+
# salt and iterations should be specified when
|
89
|
+
# SALTED-SHA512-PBKDF2 password shadow hash is given
|
90
|
+
!new_resource.salt.nil? && !new_resource.iterations.nil?
|
91
|
+
else
|
92
|
+
true
|
93
|
+
end
|
94
|
+
end
|
95
|
+
a.failure_message(Chef::Exceptions::User, "SALTED-SHA512-PBKDF2 shadow hash is given without associated \
|
96
|
+
'salt' and 'iterations'. Please specify 'salt' and 'iterations' in order to set the user password using shadow hash.")
|
97
|
+
end
|
98
|
+
|
99
|
+
requirements.assert(:create, :modify, :manage) do |a|
|
100
|
+
a.assertion do
|
101
|
+
if new_resource.password && !mac_osx_version_greater_than_10_7?
|
102
|
+
# On 10.7 SALTED-SHA512-PBKDF2 is not supported
|
103
|
+
!salted_sha512_pbkdf2?(new_resource.password)
|
104
|
+
else
|
105
|
+
true
|
106
|
+
end
|
107
|
+
end
|
108
|
+
a.failure_message(Chef::Exceptions::User, "SALTED-SHA512-PBKDF2 shadow hashes are not supported on \
|
109
|
+
Mac OS X version 10.7. Please specify a SALTED-SHA512 shadow hash in 'password' attribute to set the \
|
110
|
+
user password using shadow hash.")
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def load_current_resource
|
115
|
+
@current_resource = Chef::Resource::User.new(new_resource.username)
|
116
|
+
current_resource.username(new_resource.username)
|
117
|
+
|
118
|
+
@user_info = read_user_info
|
119
|
+
if user_info
|
120
|
+
current_resource.uid(dscl_get(user_info, :uid))
|
121
|
+
current_resource.gid(dscl_get(user_info, :gid))
|
122
|
+
current_resource.home(dscl_get(user_info, :home))
|
123
|
+
current_resource.shell(dscl_get(user_info, :shell))
|
124
|
+
current_resource.comment(dscl_get(user_info, :comment))
|
125
|
+
@authentication_authority = dscl_get(user_info, :auth_authority)
|
126
|
+
|
127
|
+
if new_resource.password && dscl_get(user_info, :password) == "********"
|
128
|
+
# A password is set. Let's get the password information from shadow file
|
129
|
+
shadow_hash_binary = dscl_get(user_info, :shadow_hash)
|
130
|
+
|
131
|
+
# Calling shell_out directly since we want to give an input stream
|
132
|
+
shadow_hash_xml = convert_binary_plist_to_xml(shadow_hash_binary.string)
|
133
|
+
shadow_hash = Plist.parse_xml(shadow_hash_xml)
|
134
|
+
|
135
|
+
if shadow_hash["SALTED-SHA512"]
|
136
|
+
# Convert the shadow value from Base64 encoding to hex before consuming them
|
137
|
+
@password_shadow_conversion_algorithm = "SALTED-SHA512"
|
138
|
+
current_resource.password(shadow_hash["SALTED-SHA512"].string.unpack("H*").first)
|
139
|
+
elsif shadow_hash["SALTED-SHA512-PBKDF2"]
|
140
|
+
@password_shadow_conversion_algorithm = "SALTED-SHA512-PBKDF2"
|
141
|
+
# Convert the entropy from Base64 encoding to hex before consuming them
|
142
|
+
current_resource.password(shadow_hash["SALTED-SHA512-PBKDF2"]["entropy"].string.unpack("H*").first)
|
143
|
+
current_resource.iterations(shadow_hash["SALTED-SHA512-PBKDF2"]["iterations"])
|
144
|
+
# Convert the salt from Base64 encoding to hex before consuming them
|
145
|
+
current_resource.salt(shadow_hash["SALTED-SHA512-PBKDF2"]["salt"].string.unpack("H*").first)
|
146
|
+
else
|
147
|
+
raise(Chef::Exceptions::User, "Unknown shadow_hash format: #{shadow_hash.keys.join(' ')}")
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
convert_group_name if new_resource.gid
|
152
|
+
else
|
153
|
+
@user_exists = false
|
154
|
+
Chef::Log.debug("#{new_resource} user does not exist")
|
155
|
+
end
|
156
|
+
|
157
|
+
current_resource
|
158
|
+
end
|
159
|
+
|
160
|
+
#
|
161
|
+
# Provider Actions
|
162
|
+
#
|
163
|
+
|
164
|
+
def create_user
|
165
|
+
dscl_create_user
|
166
|
+
# set_password modifies the plist file of the user directly. So update
|
167
|
+
# the password first before making any modifications to the user.
|
168
|
+
set_password
|
169
|
+
dscl_create_comment
|
170
|
+
dscl_set_uid
|
171
|
+
dscl_set_gid
|
172
|
+
dscl_set_home
|
173
|
+
dscl_set_shell
|
174
|
+
end
|
175
|
+
|
176
|
+
def manage_user
|
177
|
+
# set_password modifies the plist file of the user directly. So update
|
178
|
+
# the password first before making any modifications to the user.
|
179
|
+
set_password if diverged_password?
|
180
|
+
dscl_create_user if diverged?(:username)
|
181
|
+
dscl_create_comment if diverged?(:comment)
|
182
|
+
dscl_set_uid if diverged?(:uid)
|
183
|
+
dscl_set_gid if diverged?(:gid)
|
184
|
+
dscl_set_home if diverged?(:home)
|
185
|
+
dscl_set_shell if diverged?(:shell)
|
186
|
+
end
|
187
|
+
|
188
|
+
#
|
189
|
+
# Action Helpers
|
190
|
+
#
|
191
|
+
|
192
|
+
#
|
193
|
+
# Create a user using dscl
|
194
|
+
#
|
195
|
+
def dscl_create_user
|
196
|
+
run_dscl("create /Users/#{new_resource.username}")
|
197
|
+
end
|
198
|
+
|
199
|
+
#
|
200
|
+
# Saves the specified Chef user `comment` into RealName attribute
|
201
|
+
# of Mac user. If `comment` is not specified, it takes `username` value.
|
202
|
+
#
|
203
|
+
def dscl_create_comment
|
204
|
+
comment = new_resource.comment || new_resource.username
|
205
|
+
run_dscl("create /Users/#{new_resource.username} RealName '#{comment}'")
|
206
|
+
end
|
207
|
+
|
208
|
+
#
|
209
|
+
# Sets the user id for the user using dscl.
|
210
|
+
# If a `uid` is not specified, it finds the next available one starting
|
211
|
+
# from 200 if `system` is set, 500 otherwise.
|
212
|
+
#
|
213
|
+
def dscl_set_uid
|
214
|
+
# XXX: mutates the new resource
|
215
|
+
new_resource.uid(get_free_uid) if new_resource.uid.nil? || new_resource.uid == ""
|
216
|
+
|
217
|
+
if uid_used?(new_resource.uid)
|
218
|
+
raise(Chef::Exceptions::RequestedUIDUnavailable, "uid #{new_resource.uid} is already in use")
|
219
|
+
end
|
220
|
+
|
221
|
+
run_dscl("create /Users/#{new_resource.username} UniqueID #{new_resource.uid}")
|
222
|
+
end
|
223
|
+
|
224
|
+
#
|
225
|
+
# Find the next available uid on the system. starting with 200 if `system` is set,
|
226
|
+
# 500 otherwise.
|
227
|
+
#
|
228
|
+
def get_free_uid(search_limit = 1000)
|
229
|
+
uid = nil
|
230
|
+
base_uid = new_resource.system ? 200 : 500
|
231
|
+
next_uid_guess = base_uid
|
232
|
+
users_uids = run_dscl("list /Users uid")
|
233
|
+
while next_uid_guess < search_limit + base_uid
|
234
|
+
if users_uids =~ Regexp.new("#{Regexp.escape(next_uid_guess.to_s)}\n")
|
235
|
+
next_uid_guess += 1
|
236
|
+
else
|
237
|
+
uid = next_uid_guess
|
238
|
+
break
|
239
|
+
end
|
240
|
+
end
|
241
|
+
return uid || raise("uid not found. Exhausted. Searched #{search_limit} times")
|
242
|
+
end
|
243
|
+
|
244
|
+
#
|
245
|
+
# Returns true if uid is in use by a different account, false otherwise.
|
246
|
+
#
|
247
|
+
def uid_used?(uid)
|
248
|
+
return false unless uid
|
249
|
+
users_uids = run_dscl("list /Users uid").split("\n")
|
250
|
+
uid_map = users_uids.inject({}) do |tmap, tuid|
|
251
|
+
x = tuid.split
|
252
|
+
tmap[x[1]] = x[0]
|
253
|
+
tmap
|
254
|
+
end
|
255
|
+
if uid_map[uid.to_s]
|
256
|
+
unless uid_map[uid.to_s] == new_resource.username.to_s
|
257
|
+
return true
|
258
|
+
end
|
259
|
+
end
|
260
|
+
return false
|
261
|
+
end
|
262
|
+
|
263
|
+
#
|
264
|
+
# Sets the group id for the user using dscl. Fails if a group doesn't
|
265
|
+
# exist on the system with given group id. If `gid` is not specified, it
|
266
|
+
# sets a default Mac user group "staff", with id 20.
|
267
|
+
#
|
268
|
+
def dscl_set_gid
|
269
|
+
if new_resource.gid.nil?
|
270
|
+
# XXX: mutates the new resource
|
271
|
+
new_resource.gid(20)
|
272
|
+
elsif !new_resource.gid.to_s.match(/^\d+$/)
|
273
|
+
begin
|
274
|
+
possible_gid = run_dscl("read /Groups/#{new_resource.gid} PrimaryGroupID").split(" ").last
|
275
|
+
rescue Chef::Exceptions::DsclCommandFailed => e
|
276
|
+
raise Chef::Exceptions::GroupIDNotFound.new("Group not found for #{new_resource.gid} when creating user #{new_resource.username}")
|
277
|
+
end
|
278
|
+
# XXX: mutates the new resource
|
279
|
+
new_resource.gid(possible_gid) if possible_gid && possible_gid.match(/^\d+$/)
|
280
|
+
end
|
281
|
+
run_dscl("create /Users/#{new_resource.username} PrimaryGroupID '#{new_resource.gid}'")
|
282
|
+
end
|
283
|
+
|
284
|
+
#
|
285
|
+
# Sets the home directory for the user. If `:manage_home` is set home
|
286
|
+
# directory is managed (moved / created) for the user.
|
287
|
+
#
|
288
|
+
def dscl_set_home
|
289
|
+
if new_resource.home.nil? || new_resource.home.empty?
|
290
|
+
run_dscl("delete /Users/#{new_resource.username} NFSHomeDirectory")
|
291
|
+
return
|
292
|
+
end
|
293
|
+
|
294
|
+
if new_resource.supports[:manage_home]
|
295
|
+
validate_home_dir_specification!
|
296
|
+
|
297
|
+
if (current_resource.home == new_resource.home) && !new_home_exists?
|
298
|
+
ditto_home
|
299
|
+
elsif !current_home_exists? && !new_home_exists?
|
300
|
+
ditto_home
|
301
|
+
elsif current_home_exists?
|
302
|
+
move_home
|
303
|
+
end
|
304
|
+
end
|
305
|
+
run_dscl("create /Users/#{new_resource.username} NFSHomeDirectory '#{new_resource.home}'")
|
306
|
+
end
|
307
|
+
|
308
|
+
def validate_home_dir_specification!
|
309
|
+
unless new_resource.home =~ /^\//
|
310
|
+
raise(Chef::Exceptions::InvalidHomeDirectory, "invalid path spec for User: '#{new_resource.username}', home directory: '#{new_resource.home}'")
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def current_home_exists?
|
315
|
+
::File.exist?("#{current_resource.home}")
|
316
|
+
end
|
317
|
+
|
318
|
+
def new_home_exists?
|
319
|
+
::File.exist?("#{new_resource.home}")
|
320
|
+
end
|
321
|
+
|
322
|
+
def ditto_home
|
323
|
+
skel = "/System/Library/User Template/English.lproj"
|
324
|
+
raise(Chef::Exceptions::User, "can't find skel at: #{skel}") unless ::File.exists?(skel)
|
325
|
+
shell_out! "ditto '#{skel}' '#{new_resource.home}'"
|
326
|
+
::FileUtils.chown_R(new_resource.username, new_resource.gid.to_s, new_resource.home)
|
327
|
+
end
|
328
|
+
|
329
|
+
def move_home
|
330
|
+
Chef::Log.debug("#{new_resource} moving #{self} home from #{current_resource.home} to #{new_resource.home}")
|
331
|
+
|
332
|
+
src = current_resource.home
|
333
|
+
FileUtils.mkdir_p(new_resource.home)
|
334
|
+
files = ::Dir.glob("#{Chef::Util::PathHelper.escape_glob_dir(src)}/*", ::File::FNM_DOTMATCH) - ["#{src}/.", "#{src}/.."]
|
335
|
+
::FileUtils.mv(files, new_resource.home, :force => true)
|
336
|
+
::FileUtils.rmdir(src)
|
337
|
+
::FileUtils.chown_R(new_resource.username, new_resource.gid.to_s, new_resource.home)
|
338
|
+
end
|
339
|
+
|
340
|
+
#
|
341
|
+
# Sets the shell for the user using dscl.
|
342
|
+
#
|
343
|
+
def dscl_set_shell
|
344
|
+
if new_resource.shell || ::File.exists?("#{new_resource.shell}")
|
345
|
+
run_dscl("create /Users/#{new_resource.username} UserShell '#{new_resource.shell}'")
|
346
|
+
else
|
347
|
+
run_dscl("create /Users/#{new_resource.username} UserShell '/usr/bin/false'")
|
348
|
+
end
|
349
|
+
end
|
350
|
+
|
351
|
+
#
|
352
|
+
# Sets the password for the user based on given password parameters.
|
353
|
+
# Chef supports specifying plain-text passwords and password shadow
|
354
|
+
# hash data.
|
355
|
+
#
|
356
|
+
def set_password
|
357
|
+
# Return if there is no password to set
|
358
|
+
return if new_resource.password.nil?
|
359
|
+
|
360
|
+
shadow_info = prepare_password_shadow_info
|
361
|
+
|
362
|
+
# Shadow info is saved as binary plist. Convert the info to binary plist.
|
363
|
+
shadow_info_binary = StringIO.new
|
364
|
+
command = Mixlib::ShellOut.new("plutil -convert binary1 -o - -",
|
365
|
+
:input => shadow_info.to_plist, :live_stream => shadow_info_binary)
|
366
|
+
command.run_command
|
367
|
+
|
368
|
+
if user_info.nil?
|
369
|
+
# User is just created. read_user_info() will read the fresh information
|
370
|
+
# for the user with a cache flush. However with experimentation we've seen
|
371
|
+
# that dscl cache is not immediately updated after the creation of the user
|
372
|
+
# This is odd and needs to be investigated further.
|
373
|
+
sleep 3
|
374
|
+
@user_info = read_user_info
|
375
|
+
end
|
376
|
+
|
377
|
+
# Replace the shadow info in user's plist
|
378
|
+
dscl_set(user_info, :shadow_hash, shadow_info_binary)
|
379
|
+
save_user_info(user_info)
|
380
|
+
end
|
381
|
+
|
382
|
+
#
|
383
|
+
# Prepares the password shadow info based on the platform version.
|
384
|
+
#
|
385
|
+
def prepare_password_shadow_info
|
386
|
+
shadow_info = {}
|
387
|
+
entropy = nil
|
388
|
+
salt = nil
|
389
|
+
iterations = nil
|
390
|
+
|
391
|
+
if mac_osx_version_10_7?
|
392
|
+
hash_value = if salted_sha512?(new_resource.password)
|
393
|
+
new_resource.password
|
394
|
+
else
|
395
|
+
# Create a random 4 byte salt
|
396
|
+
salt = OpenSSL::Random.random_bytes(4)
|
397
|
+
encoded_password = OpenSSL::Digest::SHA512.hexdigest(salt + new_resource.password)
|
398
|
+
hash_value = salt.unpack("H*").first + encoded_password
|
399
|
+
end
|
400
|
+
|
401
|
+
shadow_info["SALTED-SHA512"] = StringIO.new
|
402
|
+
shadow_info["SALTED-SHA512"].string = convert_to_binary(hash_value)
|
403
|
+
shadow_info
|
404
|
+
else
|
405
|
+
if salted_sha512_pbkdf2?(new_resource.password)
|
406
|
+
entropy = convert_to_binary(new_resource.password)
|
407
|
+
salt = convert_to_binary(new_resource.salt)
|
408
|
+
iterations = new_resource.iterations
|
409
|
+
else
|
410
|
+
salt = OpenSSL::Random.random_bytes(32)
|
411
|
+
iterations = new_resource.iterations # Use the default if not specified by the user
|
412
|
+
|
413
|
+
entropy = OpenSSL::PKCS5.pbkdf2_hmac(
|
414
|
+
new_resource.password,
|
415
|
+
salt,
|
416
|
+
iterations,
|
417
|
+
128,
|
418
|
+
OpenSSL::Digest::SHA512.new
|
419
|
+
)
|
420
|
+
end
|
421
|
+
|
422
|
+
pbkdf_info = {}
|
423
|
+
pbkdf_info["entropy"] = StringIO.new
|
424
|
+
pbkdf_info["entropy"].string = entropy
|
425
|
+
pbkdf_info["salt"] = StringIO.new
|
426
|
+
pbkdf_info["salt"].string = salt
|
427
|
+
pbkdf_info["iterations"] = iterations
|
428
|
+
|
429
|
+
shadow_info["SALTED-SHA512-PBKDF2"] = pbkdf_info
|
430
|
+
end
|
431
|
+
|
432
|
+
shadow_info
|
433
|
+
end
|
434
|
+
|
435
|
+
#
|
436
|
+
# Removes the user from the system after removing user from his groups
|
437
|
+
# and deleting home directory if needed.
|
438
|
+
#
|
439
|
+
def remove_user
|
440
|
+
if new_resource.supports[:manage_home]
|
441
|
+
# Remove home directory
|
442
|
+
FileUtils.rm_rf(current_resource.home)
|
443
|
+
end
|
444
|
+
|
445
|
+
# Remove the user from its groups
|
446
|
+
run_dscl("list /Groups").each_line do |group|
|
447
|
+
if member_of_group?(group.chomp)
|
448
|
+
run_dscl("delete /Groups/#{group.chomp} GroupMembership '#{new_resource.username}'")
|
449
|
+
end
|
450
|
+
end
|
451
|
+
|
452
|
+
# Remove user account
|
453
|
+
run_dscl("delete /Users/#{new_resource.username}")
|
454
|
+
end
|
455
|
+
|
456
|
+
#
|
457
|
+
# Locks the user.
|
458
|
+
#
|
459
|
+
def lock_user
|
460
|
+
run_dscl("append /Users/#{new_resource.username} AuthenticationAuthority ';DisabledUser;'")
|
461
|
+
end
|
462
|
+
|
463
|
+
#
|
464
|
+
# Unlocks the user
|
465
|
+
#
|
466
|
+
def unlock_user
|
467
|
+
auth_string = authentication_authority.gsub(/AuthenticationAuthority: /, "").gsub(/;DisabledUser;/, "").strip
|
468
|
+
run_dscl("create /Users/#{new_resource.username} AuthenticationAuthority '#{auth_string}'")
|
469
|
+
end
|
470
|
+
|
471
|
+
#
|
472
|
+
# Returns true if the user is locked, false otherwise.
|
473
|
+
#
|
474
|
+
def locked?
|
475
|
+
if authentication_authority
|
476
|
+
!!(authentication_authority =~ /DisabledUser/ )
|
477
|
+
else
|
478
|
+
false
|
479
|
+
end
|
480
|
+
end
|
481
|
+
|
482
|
+
#
|
483
|
+
# This is the interface base User provider requires to provide idempotency.
|
484
|
+
#
|
485
|
+
def check_lock
|
486
|
+
return @locked = locked?
|
487
|
+
end
|
488
|
+
|
489
|
+
#
|
490
|
+
# Helper functions
|
491
|
+
#
|
492
|
+
|
493
|
+
#
|
494
|
+
# Returns true if the system state and desired state is different for
|
495
|
+
# given attribute.
|
496
|
+
#
|
497
|
+
def diverged?(parameter)
|
498
|
+
parameter_updated?(parameter) && (not new_resource.send(parameter).nil?)
|
499
|
+
end
|
500
|
+
|
501
|
+
def parameter_updated?(parameter)
|
502
|
+
not (new_resource.send(parameter) == current_resource.send(parameter))
|
503
|
+
end
|
504
|
+
|
505
|
+
#
|
506
|
+
# We need a special check function for password since we support both
|
507
|
+
# plain text and shadow hash data.
|
508
|
+
#
|
509
|
+
# Checks if password needs update based on platform version and the
|
510
|
+
# type of the password specified.
|
511
|
+
#
|
512
|
+
def diverged_password?
|
513
|
+
return false if new_resource.password.nil?
|
514
|
+
|
515
|
+
# Dscl provider supports both plain text passwords and shadow hashes.
|
516
|
+
if mac_osx_version_10_7?
|
517
|
+
if salted_sha512?(new_resource.password)
|
518
|
+
diverged?(:password)
|
519
|
+
else
|
520
|
+
!salted_sha512_password_match?
|
521
|
+
end
|
522
|
+
else
|
523
|
+
# When a system is upgraded to a version 10.7+ shadow hashes of the users
|
524
|
+
# will be updated when the user logs in. So it's possible that we will have
|
525
|
+
# SALTED-SHA512 password in the current_resource. In that case we will force
|
526
|
+
# password to be updated.
|
527
|
+
return true if salted_sha512?(current_resource.password)
|
528
|
+
|
529
|
+
# Some system users don't have salts; this can happen if the system is
|
530
|
+
# upgraded and the user hasn't logged in yet. In this case, we will force
|
531
|
+
# the password to be updated.
|
532
|
+
return true if current_resource.salt.nil?
|
533
|
+
|
534
|
+
if salted_sha512_pbkdf2?(new_resource.password)
|
535
|
+
diverged?(:password) || diverged?(:salt) || diverged?(:iterations)
|
536
|
+
else
|
537
|
+
!salted_sha512_pbkdf2_password_match?
|
538
|
+
end
|
539
|
+
end
|
540
|
+
end
|
541
|
+
|
542
|
+
#
|
543
|
+
# Returns true if user is member of the specified group, false otherwise.
|
544
|
+
#
|
545
|
+
def member_of_group?(group_name)
|
546
|
+
membership_info = ""
|
547
|
+
begin
|
548
|
+
membership_info = run_dscl("read /Groups/#{group_name}")
|
549
|
+
rescue Chef::Exceptions::DsclCommandFailed
|
550
|
+
# Raised if the group doesn't contain any members
|
551
|
+
end
|
552
|
+
# Output is something like:
|
553
|
+
# GroupMembership: root admin etc
|
554
|
+
members = membership_info.split(" ")
|
555
|
+
members.shift # Get rid of GroupMembership: string
|
556
|
+
members.include?(new_resource.username)
|
557
|
+
end
|
558
|
+
|
559
|
+
#
|
560
|
+
# DSCL Helper functions
|
561
|
+
#
|
562
|
+
|
563
|
+
# A simple map of Chef's terms to DSCL's terms.
|
564
|
+
DSCL_PROPERTY_MAP = {
|
565
|
+
:uid => "uid",
|
566
|
+
:gid => "gid",
|
567
|
+
:home => "home",
|
568
|
+
:shell => "shell",
|
569
|
+
:comment => "realname",
|
570
|
+
:password => "passwd",
|
571
|
+
:auth_authority => "authentication_authority",
|
572
|
+
:shadow_hash => "ShadowHashData",
|
573
|
+
}.freeze
|
574
|
+
|
575
|
+
# Directory where the user plist files are stored for versions 10.7 and above
|
576
|
+
USER_PLIST_DIRECTORY = "/var/db/dslocal/nodes/Default/users".freeze
|
577
|
+
|
578
|
+
#
|
579
|
+
# Reads the user plist and returns a hash keyed with DSCL properties specified
|
580
|
+
# in DSCL_PROPERTY_MAP. Return nil if the user is not found.
|
581
|
+
#
|
582
|
+
def read_user_info
|
583
|
+
user_info = nil
|
584
|
+
|
585
|
+
# We flush the cache here in order to make sure that we read fresh information
|
586
|
+
# for the user.
|
587
|
+
shell_out("dscacheutil '-flushcache'")
|
588
|
+
|
589
|
+
begin
|
590
|
+
user_plist_file = "#{USER_PLIST_DIRECTORY}/#{new_resource.username}.plist"
|
591
|
+
user_plist_info = run_plutil("convert xml1 -o - #{user_plist_file}")
|
592
|
+
user_info = Plist.parse_xml(user_plist_info)
|
593
|
+
rescue Chef::Exceptions::PlistUtilCommandFailed
|
594
|
+
end
|
595
|
+
|
596
|
+
user_info
|
597
|
+
end
|
598
|
+
|
599
|
+
#
|
600
|
+
# Saves the given hash keyed with DSCL properties specified
|
601
|
+
# in DSCL_PROPERTY_MAP to the disk.
|
602
|
+
#
|
603
|
+
def save_user_info(user_info)
|
604
|
+
user_plist_file = "#{USER_PLIST_DIRECTORY}/#{new_resource.username}.plist"
|
605
|
+
Plist::Emit.save_plist(user_info, user_plist_file)
|
606
|
+
run_plutil("convert binary1 #{user_plist_file}")
|
607
|
+
end
|
608
|
+
|
609
|
+
#
|
610
|
+
# Sets a value in user information hash using Chef attributes as keys.
|
611
|
+
#
|
612
|
+
def dscl_set(user_hash, key, value)
|
613
|
+
raise "Unknown dscl key #{key}" unless DSCL_PROPERTY_MAP.keys.include?(key)
|
614
|
+
user_hash[DSCL_PROPERTY_MAP[key]] = [ value ]
|
615
|
+
user_hash
|
616
|
+
end
|
617
|
+
|
618
|
+
#
|
619
|
+
# Gets a value from user information hash using Chef attributes as keys.
|
620
|
+
#
|
621
|
+
def dscl_get(user_hash, key)
|
622
|
+
raise "Unknown dscl key #{key}" unless DSCL_PROPERTY_MAP.keys.include?(key)
|
623
|
+
# DSCL values are set as arrays
|
624
|
+
value = user_hash[DSCL_PROPERTY_MAP[key]]
|
625
|
+
value.nil? ? value : value.first
|
626
|
+
end
|
627
|
+
|
628
|
+
#
|
629
|
+
# System Helpets
|
630
|
+
#
|
631
|
+
|
632
|
+
def mac_osx_version
|
633
|
+
# This provider will only be invoked on node[:platform] == "mac_os_x"
|
634
|
+
# We do not check or assert that here.
|
635
|
+
node[:platform_version]
|
636
|
+
end
|
637
|
+
|
638
|
+
def mac_osx_version_10_7?
|
639
|
+
mac_osx_version.start_with?("10.7.")
|
640
|
+
end
|
641
|
+
|
642
|
+
def mac_osx_version_less_than_10_7?
|
643
|
+
versions = mac_osx_version.split(".")
|
644
|
+
# Make integer comparison in order not to report 10.10 less than 10.7
|
645
|
+
(versions[0].to_i <= 10 && versions[1].to_i < 7)
|
646
|
+
end
|
647
|
+
|
648
|
+
def mac_osx_version_greater_than_10_7?
|
649
|
+
versions = mac_osx_version.split(".")
|
650
|
+
# Make integer comparison in order not to report 10.10 less than 10.7
|
651
|
+
(versions[0].to_i >= 10 && versions[1].to_i > 7)
|
652
|
+
end
|
653
|
+
|
654
|
+
def run_dscl(*args)
|
655
|
+
result = shell_out("dscl . -#{args.join(' ')}")
|
656
|
+
return "" if ( args.first =~ /^delete/ ) && ( result.exitstatus != 0 )
|
657
|
+
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") unless result.exitstatus == 0
|
658
|
+
raise(Chef::Exceptions::DsclCommandFailed, "dscl error: #{result.inspect}") if result.stdout =~ /No such key: /
|
659
|
+
result.stdout
|
660
|
+
end
|
661
|
+
|
662
|
+
def run_plutil(*args)
|
663
|
+
result = shell_out("plutil -#{args.join(' ')}")
|
664
|
+
raise(Chef::Exceptions::PlistUtilCommandFailed, "plutil error: #{result.inspect}") unless result.exitstatus == 0
|
665
|
+
if result.stdout.encoding == Encoding::ASCII_8BIT
|
666
|
+
result.stdout.encode("utf-8", "binary", :undef => :replace, :invalid => :replace, :replace => "?")
|
667
|
+
else
|
668
|
+
result.stdout
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
672
|
+
def convert_binary_plist_to_xml(binary_plist_string)
|
673
|
+
Mixlib::ShellOut.new("plutil -convert xml1 -o - -", :input => binary_plist_string).run_command.stdout
|
674
|
+
end
|
675
|
+
|
676
|
+
def convert_to_binary(string)
|
677
|
+
string.unpack("a2" * (string.size / 2)).collect { |i| i.hex.chr }.join
|
678
|
+
end
|
679
|
+
|
680
|
+
def salted_sha512?(string)
|
681
|
+
!!(string =~ /^[[:xdigit:]]{136}$/)
|
682
|
+
end
|
683
|
+
|
684
|
+
def salted_sha512_password_match?
|
685
|
+
# Salt is included in the first 4 bytes of shadow data
|
686
|
+
salt = current_resource.password.slice(0, 8)
|
687
|
+
shadow = OpenSSL::Digest::SHA512.hexdigest(convert_to_binary(salt) + new_resource.password)
|
688
|
+
current_resource.password == salt + shadow
|
689
|
+
end
|
690
|
+
|
691
|
+
def salted_sha512_pbkdf2?(string)
|
692
|
+
!!(string =~ /^[[:xdigit:]]{256}$/)
|
693
|
+
end
|
694
|
+
|
695
|
+
def salted_sha512_pbkdf2_password_match?
|
696
|
+
salt = convert_to_binary(current_resource.salt)
|
697
|
+
|
698
|
+
OpenSSL::PKCS5.pbkdf2_hmac(
|
699
|
+
new_resource.password,
|
700
|
+
salt,
|
701
|
+
current_resource.iterations,
|
702
|
+
128,
|
703
|
+
OpenSSL::Digest::SHA512.new
|
704
|
+
).unpack("H*").first == current_resource.password
|
705
|
+
end
|
706
|
+
|
707
|
+
end
|
708
|
+
end
|
709
|
+
end
|
710
|
+
end
|