chef 18.1.29 → 18.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/chef-universal-mingw-ucrt.gemspec +2 -2
  3. data/chef.gemspec +1 -2
  4. data/lib/chef/application/base.rb +2 -0
  5. data/lib/chef/client.rb +2 -2
  6. data/lib/chef/cookbook/synchronizer.rb +20 -2
  7. data/lib/chef/cookbook_version.rb +1 -1
  8. data/lib/chef/http/authenticator.rb +2 -2
  9. data/lib/chef/http/ssl_policies.rb +2 -2
  10. data/lib/chef/mixin/homebrew_user.rb +12 -5
  11. data/lib/chef/mixin/proxified_socket.rb +1 -1
  12. data/lib/chef/monkey_patches/net-http.rb +127 -0
  13. data/lib/chef/node/attribute_collections.rb +8 -0
  14. data/lib/chef/node/immutable_collections.rb +5 -2
  15. data/lib/chef/node/mixin/state_tracking.rb +1 -1
  16. data/lib/chef/platform/query_helpers.rb +4 -2
  17. data/lib/chef/provider/launchd.rb +1 -1
  18. data/lib/chef/provider/mount/linux.rb +1 -1
  19. data/lib/chef/provider/mount/mount.rb +5 -5
  20. data/lib/chef/provider/package/chocolatey.rb +18 -1
  21. data/lib/chef/provider/package/zypper.rb +1 -0
  22. data/lib/chef/provider/remote_file/http.rb +1 -1
  23. data/lib/chef/provider/yum_repository.rb +1 -1
  24. data/lib/chef/resource/apt_repository.rb +25 -6
  25. data/lib/chef/resource/homebrew_cask.rb +6 -7
  26. data/lib/chef/resource/homebrew_package.rb +1 -1
  27. data/lib/chef/resource/homebrew_tap.rb +5 -5
  28. data/lib/chef/resource/launchd.rb +5 -1
  29. data/lib/chef/resource/macos_userdefaults.rb +9 -5
  30. data/lib/chef/resource/selinux_login.rb +129 -0
  31. data/lib/chef/resource/selinux_user.rb +137 -0
  32. data/lib/chef/resource/windows_certificate.rb +1 -1
  33. data/lib/chef/resource/windows_security_policy.rb +2 -2
  34. data/lib/chef/resource.rb +11 -1
  35. data/lib/chef/resources.rb +2 -0
  36. data/lib/chef/version.rb +1 -1
  37. data/lib/chef/win32/security.rb +7 -1
  38. data/spec/data/apt/chef-integration-test-1.0/debian/rules +0 -0
  39. data/spec/data/apt/chef-integration-test-1.1/debian/rules +0 -0
  40. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +0 -0
  41. data/spec/data/trusted_certs/intermediate.pem +38 -27
  42. data/spec/data/trusted_certs/opscode.pem +33 -54
  43. data/spec/functional/assets/chefinittest +0 -0
  44. data/spec/functional/assets/testchefsubsys +0 -0
  45. data/spec/functional/provider/remote_file/cache_control_data_spec.rb +0 -0
  46. data/spec/functional/resource/aix_service_spec.rb +0 -0
  47. data/spec/functional/resource/aixinit_service_spec.rb +0 -0
  48. data/spec/functional/resource/chocolatey_package_spec.rb +32 -20
  49. data/spec/functional/resource/execute_spec.rb +1 -1
  50. data/spec/functional/resource/macos_userdefaults_spec.rb +4 -4
  51. data/spec/functional/resource/windows_certificate_spec.rb +25 -0
  52. data/spec/unit/client_spec.rb +2 -2
  53. data/spec/unit/mixin/homebrew_user_spec.rb +30 -7
  54. data/spec/unit/node/vivid_mash_spec.rb +42 -0
  55. data/spec/unit/provider/apt_repository_spec.rb +17 -7
  56. data/spec/unit/provider/launchd_spec.rb +2 -2
  57. data/spec/unit/provider/mount/aix_spec.rb +2 -2
  58. data/spec/unit/provider/mount/linux_spec.rb +6 -5
  59. data/spec/unit/provider/mount/mount_spec.rb +8 -8
  60. data/spec/unit/provider/package/chocolatey_spec.rb +19 -3
  61. data/spec/unit/provider/package/rpm_spec.rb +2 -2
  62. data/spec/unit/provider/package/zypper_spec.rb +10 -0
  63. data/spec/unit/provider/remote_file/http_spec.rb +4 -4
  64. data/spec/unit/resource/apt_repository_spec.rb +5 -0
  65. data/spec/unit/resource/macos_user_defaults_spec.rb +4 -4
  66. data/spec/unit/resource/selinux_login_spec.rb +73 -0
  67. data/spec/unit/resource/selinux_user_spec.rb +92 -0
  68. data/spec/unit/resource_spec.rb +86 -0
  69. metadata +19 -15
  70. data/lib/chef/powershell.rb +0 -81
  71. /data/spec/functional/assets/chocolatey_feed/{test-A.1.0.nupkg → test-A.1.0.0.nupkg} +0 -0
  72. /data/spec/functional/assets/chocolatey_feed/{test-A.1.5.nupkg → test-A.1.5.0.nupkg} +0 -0
  73. /data/spec/functional/assets/chocolatey_feed/{test-A.2.0.nupkg → test-A.2.0.0.nupkg} +0 -0
  74. /data/spec/functional/assets/chocolatey_feed/{test-B.1.0.nupkg → test-B.1.0.0.nupkg} +0 -0
@@ -251,7 +251,7 @@ describe Chef::Provider::RemoteFile::HTTP do
251
251
  end
252
252
 
253
253
  context "and the response has no Date or Last-Modified header" do
254
- let(:last_response) { { "date" => nil, "last_modified" => nil } }
254
+ let(:last_response) { { "date" => nil, "last-modified" => nil } }
255
255
  it "does not set an mtime in the result" do
256
256
  # RFC 2616 suggests that servers that do not set a Date header do not
257
257
  # have a reliable clock, so no use in making them deal with dates.
@@ -265,19 +265,19 @@ describe Chef::Provider::RemoteFile::HTTP do
265
265
  context "and the response has a Last-Modified header" do
266
266
  let(:last_response) do
267
267
  # Last-Modified should be preferred to Date if both are set
268
- { "date" => "Fri, 17 May 2013 23:23:23 GMT", "last_modified" => "Fri, 17 May 2013 11:11:11 GMT" }
268
+ { "date" => "Fri, 17 May 2013 23:23:23 GMT", "last-modified" => "Fri, 17 May 2013 11:11:11 GMT" }
269
269
  end
270
270
 
271
271
  it "sets the mtime to the Last-Modified time in the response" do
272
272
  fetcher.fetch
273
273
  expect(cache_control_data.etag).to be_nil
274
- expect(cache_control_data.mtime).to eq(last_response["last_modified"])
274
+ expect(cache_control_data.mtime).to eq(last_response["last-modified"])
275
275
  end
276
276
  end
277
277
 
278
278
  context "and the response has a Date header but no Last-Modified header" do
279
279
  let(:last_response) do
280
- { "date" => "Fri, 17 May 2013 23:23:23 GMT", "last_modified" => nil }
280
+ { "date" => "Fri, 17 May 2013 23:23:23 GMT", "last-modified" => nil }
281
281
  end
282
282
 
283
283
  it "sets the mtime to the Date in the response" do
@@ -68,6 +68,11 @@ describe Chef::Resource::AptRepository do
68
68
  expect(resource.key).to eql(["key1"])
69
69
  end
70
70
 
71
+ it "allows setting options to a String and coerces it to an Array" do
72
+ resource.options = "by-hash=no"
73
+ expect(resource.options).to eql(["by-hash=no"])
74
+ end
75
+
71
76
  it "fails if the user provides a repo_name with a forward slash" do
72
77
  expect { resource.repo_name "foo/bar" }.to raise_error(ArgumentError)
73
78
  end
@@ -39,12 +39,12 @@ describe Chef::Resource::MacosUserDefaults, :macos_only do
39
39
  expect(resource.domain).to eq("NSGlobalDomain")
40
40
  end
41
41
 
42
- it "nil for the host property" do
43
- expect(resource.host).to be_nil
42
+ it ":all for the host property" do
43
+ expect(resource.host).to eq(:all)
44
44
  end
45
45
 
46
- it "nil for the user property" do
47
- expect(resource.user).to be_nil
46
+ it ":current for the user property" do
47
+ expect(resource.user).to eq(:current)
48
48
  end
49
49
 
50
50
  it ":write for resource action" do
@@ -0,0 +1,73 @@
1
+ #
2
+ # Copyright:: Copyright (c) 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
+
18
+ require "spec_helper"
19
+
20
+ describe Chef::Resource::SelinuxLogin do
21
+ let(:node) { Chef::Node.new }
22
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
23
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
24
+ let(:resource) { Chef::Resource::SelinuxLogin.new("fakey_fakerton", run_context) }
25
+ let(:provider) { resource.provider_for_action(:manage) }
26
+
27
+ it "sets login property as name_property" do
28
+ expect(resource.login).to eql("fakey_fakerton")
29
+ end
30
+
31
+ it "sets the default action as :manage" do
32
+ expect(resource.action).to eql([:manage])
33
+ end
34
+
35
+ it "supports :manage, :add, :modify, :delete actions" do
36
+ expect { resource.action :manage }.not_to raise_error
37
+ expect { resource.action :add }.not_to raise_error
38
+ expect { resource.action :modify }.not_to raise_error
39
+ expect { resource.action :delete }.not_to raise_error
40
+ end
41
+
42
+ describe "#semanage_login_args" do
43
+ let(:provider) { resource.provider_for_action(:modify) }
44
+
45
+ context "when no parameters are provided" do
46
+ it "returns an empty string" do
47
+ expect(provider.semanage_login_args).to eq("")
48
+ end
49
+ end
50
+
51
+ context "when all parameters are provided" do
52
+ it "returns all params" do
53
+ resource.user "user_u"
54
+ resource.range "s0"
55
+ expect(provider.semanage_login_args).to eq(" -s user_u -r s0")
56
+ end
57
+ end
58
+
59
+ context "when no user is provided" do
60
+ it "returns range param" do
61
+ resource.range "s0"
62
+ expect(provider.semanage_login_args).to eq(" -r s0")
63
+ end
64
+ end
65
+
66
+ context "when no range is provided" do
67
+ it "returns user param" do
68
+ resource.user "user_u"
69
+ expect(provider.semanage_login_args).to eq(" -s user_u")
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,92 @@
1
+ #
2
+ # Copyright:: Copyright (c) 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
+
18
+ require "spec_helper"
19
+
20
+ describe Chef::Resource::SelinuxUser do
21
+ let(:node) { Chef::Node.new }
22
+ let(:events) { Chef::EventDispatch::Dispatcher.new }
23
+ let(:run_context) { Chef::RunContext.new(node, {}, events) }
24
+ let(:resource) { Chef::Resource::SelinuxUser.new("fakey_fakerton", run_context) }
25
+ let(:provider) { resource.provider_for_action(:manage) }
26
+ let(:semanage_list) { double("shellout", stdout: "") }
27
+
28
+ it "sets user property as name_property" do
29
+ expect(resource.user).to eql("fakey_fakerton")
30
+ end
31
+
32
+ it "sets the default action as :manage" do
33
+ expect(resource.action).to eql([:manage])
34
+ end
35
+
36
+ it "supports :manage, :add, :modify, :delete actions" do
37
+ expect { resource.action :manage }.not_to raise_error
38
+ expect { resource.action :add }.not_to raise_error
39
+ expect { resource.action :modify }.not_to raise_error
40
+ expect { resource.action :delete }.not_to raise_error
41
+ end
42
+
43
+ it "sorts roles property values" do
44
+ expect { resource.roles %w{c a b} }.not_to raise_error
45
+ expect(resource.roles).to eq(%w{a b c})
46
+ end
47
+
48
+ describe "#semanage_user_args" do
49
+ let(:provider) { resource.provider_for_action(:modify) }
50
+
51
+ context "when no parameters are provided" do
52
+ it "returns an empty string" do
53
+ expect(provider.semanage_user_args).to eq("")
54
+ end
55
+ end
56
+
57
+ context "when all parameters are provided" do
58
+ it "returns all params" do
59
+ resource.level "s0"
60
+ resource.range "s0"
61
+ resource.roles %w{sysadm_r staff_r}
62
+ expect(provider.semanage_user_args).to eq(" -L s0 -r s0 -R 'staff_r sysadm_r'")
63
+ end
64
+ end
65
+
66
+ context "when no roles are provided" do
67
+ it "returns level and range params" do
68
+ resource.level "s0"
69
+ resource.range "s0"
70
+ resource.roles []
71
+
72
+ expect(provider.semanage_user_args).to eq(" -L s0 -r s0")
73
+ end
74
+ end
75
+
76
+ context "when no range is provided" do
77
+ it "returns level and roles params" do
78
+ resource.level "s0"
79
+ resource.roles %w{sysadm_r staff_r}
80
+ expect(provider.semanage_user_args).to eq(" -L s0 -R 'staff_r sysadm_r'")
81
+ end
82
+ end
83
+
84
+ context "when no level is provided" do
85
+ it "returns range and roles params" do
86
+ resource.range "s0"
87
+ resource.roles %w{sysadm_r staff_r}
88
+ expect(provider.semanage_user_args).to eq(" -r s0 -R 'staff_r sysadm_r'")
89
+ end
90
+ end
91
+ end
92
+ end
@@ -803,6 +803,92 @@ describe Chef::Resource do
803
803
  end
804
804
  end
805
805
 
806
+ describe "when using resource partials" do
807
+ let(:resource_using_core_partial) do
808
+ Class.new(Chef::Resource) do
809
+ use "core::core_partial"
810
+ end
811
+ end
812
+
813
+ let(:resource_using_cookbook_partial) do
814
+ Class.new(Chef::Resource) do
815
+ use "my_local_partial"
816
+ end
817
+ end
818
+
819
+ let(:resource_using_nested_partials) do
820
+ FakeCaller = Struct.new(:label, :path, keyword_init: true)
821
+ NonDynamicResource = Chef::Resource.dup
822
+
823
+ # Fake a caller_locations array, as RSpec uses a different execution path
824
+ NonDynamicResource.define_singleton_method(:caller_locations) do
825
+ [
826
+ FakeCaller.new(label: "use", path: File.join(__dir__, "resource.rb")),
827
+ FakeCaller.new(label: "noise", path: File.join(__dir__, "no_file")),
828
+ FakeCaller.new(label: "class_from_file", path: File.join(__dir__, "_level3_partial.rb")),
829
+ FakeCaller.new(label: "noise", path: File.join(__dir__, "no_file")),
830
+ FakeCaller.new(label: "class_from_file", path: File.join(__dir__, "_level2_partial.rb")),
831
+ FakeCaller.new(label: "noise", path: File.join(__dir__, "no_file")),
832
+ FakeCaller.new(label: "class_from_file", path: File.join(__dir__, "_level1_partial.rb")),
833
+ FakeCaller.new(label: "noise", path: File.join(__dir__, "no_file")),
834
+ FakeCaller.new(label: "class_from_file", path: File.join(__dir__, "_level0_partial.rb")),
835
+ ]
836
+ end
837
+
838
+ Class.new(NonDynamicResource) do
839
+ use "level3_partial"
840
+ end
841
+ end
842
+
843
+ it "correcly includes a core partial" do
844
+ expected_path = File.expand_path(File.join(__dir__, "../..", "lib/chef", "resource/_core_partial.rb"))
845
+ partial = "property :addon_property, default: true"
846
+
847
+ expect(IO).to receive(:read).with(expected_path).and_return(partial)
848
+ expect(resource_using_core_partial.properties.keys).to include(:addon_property)
849
+ end
850
+
851
+ it "correctly includes a cookbook partial" do
852
+ expected_path = File.expand_path(File.join(__dir__, "_my_local_partial.rb"))
853
+ partial = "property :addon_property, default: true"
854
+
855
+ expect(IO).to receive(:read).with(expected_path).and_return(partial)
856
+ expect(resource_using_cookbook_partial.properties.keys).to include(:addon_property)
857
+ end
858
+
859
+ it "correctly includes nested partials" do
860
+ level0_path = File.expand_path(File.join(__dir__, "_level0_partial.rb"))
861
+ level0_partial = "property :level0_property, default: true"
862
+ expect(IO).to receive(:read).with(level0_path).and_return(level0_partial)
863
+
864
+ level1_path = File.expand_path(File.join(__dir__, "_level1_partial.rb"))
865
+ level1_partial = <<-EOF
866
+ use 'level0_partial'
867
+ property :level1_property, default: true
868
+ EOF
869
+ expect(IO).to receive(:read).with(level1_path).and_return(level1_partial)
870
+
871
+ level2_path = File.expand_path(File.join(__dir__, "_level2_partial.rb"))
872
+ level2_partial = <<-EOF
873
+ use 'level1_partial'
874
+ property :level2_property, default: true
875
+ EOF
876
+ expect(IO).to receive(:read).with(level2_path).and_return(level2_partial)
877
+
878
+ level3_path = File.expand_path(File.join(__dir__, "_level3_partial.rb"))
879
+ level3_partial = <<-EOF
880
+ use 'level2_partial'
881
+ property :level3_property, default: true
882
+ EOF
883
+ expect(IO).to receive(:read).with(level3_path).and_return(level3_partial)
884
+
885
+ expect(resource_using_nested_partials.properties.keys).to include(:level0_property)
886
+ expect(resource_using_nested_partials.properties.keys).to include(:level1_property)
887
+ expect(resource_using_nested_partials.properties.keys).to include(:level2_property)
888
+ expect(resource_using_nested_partials.properties.keys).to include(:level3_property)
889
+ end
890
+ end
891
+
806
892
  describe "should_skip?" do
807
893
  before do
808
894
  resource = Chef::Resource::Cat.new("sugar", run_context)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef
3
3
  version: !ruby/object:Gem::Version
4
- version: 18.1.29
4
+ version: 18.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-07 00:00:00.000000000 Z
11
+ date: 2023-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-config
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 18.1.29
19
+ version: 18.3.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 18.1.29
26
+ version: 18.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: chef-utils
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 18.1.29
33
+ version: 18.3.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 18.1.29
40
+ version: 18.3.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: train-core
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -336,20 +336,20 @@ dependencies:
336
336
  requirements:
337
337
  - - "~>"
338
338
  - !ruby/object:Gem::Version
339
- version: '1.1'
339
+ version: '1.0'
340
340
  - - ">="
341
341
  - !ruby/object:Gem::Version
342
- version: 1.1.3
342
+ version: 1.0.3
343
343
  type: :runtime
344
344
  prerelease: false
345
345
  version_requirements: !ruby/object:Gem::Requirement
346
346
  requirements:
347
347
  - - "~>"
348
348
  - !ruby/object:Gem::Version
349
- version: '1.1'
349
+ version: '1.0'
350
350
  - - ">="
351
351
  - !ruby/object:Gem::Version
352
- version: 1.1.3
352
+ version: 1.0.3
353
353
  - !ruby/object:Gem::Dependency
354
354
  name: chef-zero
355
355
  requirement: !ruby/object:Gem::Requirement
@@ -857,6 +857,7 @@ files:
857
857
  - lib/chef/mixin/windows_env_helper.rb
858
858
  - lib/chef/mixin/xml_escape.rb
859
859
  - lib/chef/mixins.rb
860
+ - lib/chef/monkey_patches/net-http.rb
860
861
  - lib/chef/monkey_patches/webrick-utils.rb
861
862
  - lib/chef/monkey_patches/win32/registry.rb
862
863
  - lib/chef/monologger.rb
@@ -887,7 +888,6 @@ files:
887
888
  - lib/chef/policy_builder/dynamic.rb
888
889
  - lib/chef/policy_builder/expand_node_object.rb
889
890
  - lib/chef/policy_builder/policyfile.rb
890
- - lib/chef/powershell.rb
891
891
  - lib/chef/property.rb
892
892
  - lib/chef/provider.rb
893
893
  - lib/chef/provider/batch.rb
@@ -1162,10 +1162,12 @@ files:
1162
1162
  - lib/chef/resource/selinux_boolean.rb
1163
1163
  - lib/chef/resource/selinux_fcontext.rb
1164
1164
  - lib/chef/resource/selinux_install.rb
1165
+ - lib/chef/resource/selinux_login.rb
1165
1166
  - lib/chef/resource/selinux_module.rb
1166
1167
  - lib/chef/resource/selinux_permissive.rb
1167
1168
  - lib/chef/resource/selinux_port.rb
1168
1169
  - lib/chef/resource/selinux_state.rb
1170
+ - lib/chef/resource/selinux_user.rb
1169
1171
  - lib/chef/resource/service.rb
1170
1172
  - lib/chef/resource/smartos_package.rb
1171
1173
  - lib/chef/resource/snap_package.rb
@@ -1712,10 +1714,10 @@ files:
1712
1714
  - spec/functional/assets/PkgA.1.0.0.0.bff
1713
1715
  - spec/functional/assets/PkgA.2.0.0.0.bff
1714
1716
  - spec/functional/assets/chefinittest
1715
- - spec/functional/assets/chocolatey_feed/test-A.1.0.nupkg
1716
- - spec/functional/assets/chocolatey_feed/test-A.1.5.nupkg
1717
- - spec/functional/assets/chocolatey_feed/test-A.2.0.nupkg
1718
- - spec/functional/assets/chocolatey_feed/test-B.1.0.nupkg
1717
+ - spec/functional/assets/chocolatey_feed/test-A.1.0.0.nupkg
1718
+ - spec/functional/assets/chocolatey_feed/test-A.1.5.0.nupkg
1719
+ - spec/functional/assets/chocolatey_feed/test-A.2.0.0.nupkg
1720
+ - spec/functional/assets/chocolatey_feed/test-B.1.0.0.nupkg
1719
1721
  - spec/functional/assets/dummy-1-0.aix6.1.noarch.rpm
1720
1722
  - spec/functional/assets/dummy-2-0.aix6.1.noarch.rpm
1721
1723
  - spec/functional/assets/inittest
@@ -2324,10 +2326,12 @@ files:
2324
2326
  - spec/unit/resource/selinux_boolean_spec.rb
2325
2327
  - spec/unit/resource/selinux_fcontext_spec.rb
2326
2328
  - spec/unit/resource/selinux_install_spec.rb
2329
+ - spec/unit/resource/selinux_login_spec.rb
2327
2330
  - spec/unit/resource/selinux_module_spec.rb
2328
2331
  - spec/unit/resource/selinux_permissive_spec.rb
2329
2332
  - spec/unit/resource/selinux_port_spec.rb
2330
2333
  - spec/unit/resource/selinux_state_spec.rb
2334
+ - spec/unit/resource/selinux_user_spec.rb
2331
2335
  - spec/unit/resource/service_spec.rb
2332
2336
  - spec/unit/resource/smartos_package_spec.rb
2333
2337
  - spec/unit/resource/snap_package_spec.rb
@@ -1,81 +0,0 @@
1
- #
2
- # Author:: Stuart Preston (<stuart@chef.io>)
3
- # Copyright:: Copyright (c) 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
- require "ffi" unless defined?(FFI)
19
- require_relative "json_compat"
20
-
21
- class Chef
22
- class PowerShell
23
- extend FFI::Library
24
-
25
- attr_reader :result
26
- attr_reader :errors
27
- attr_reader :verbose
28
-
29
- # Run a command under PowerShell via FFI
30
- # This implementation requires the managed dll and native wrapper to be in the library search
31
- # path on Windows (i.e. c:\windows\system32 or in the same location as ruby.exe).
32
- #
33
- # Requires: .NET Framework 4.0 or higher on the target machine.
34
- #
35
- # @param script [String] script to run
36
- # @param timeout [Integer, nil] timeout in seconds.
37
- # @return [Object] output
38
- def initialize(script, timeout: -1)
39
- # This Powershell DLL source lives here: https://github.com/chef/chef-powershell-shim
40
- # Every merge into that repo triggers a Habitat build and promotion. Running
41
- # the rake :update_chef_exec_dll task in this (chef/chef) repo will pull down
42
- # the built packages and copy the binaries to distro/ruby_bin_folder. Bundle install
43
- # ensures that the correct architecture binaries are installed into the path.
44
- @dll ||= "Chef.PowerShell.Wrapper.dll"
45
- exec(script, timeout: timeout)
46
- end
47
-
48
- #
49
- # Was there an error running the command
50
- #
51
- # @return [Boolean]
52
- #
53
- def error?
54
- return true if errors.count > 0
55
-
56
- false
57
- end
58
-
59
- class CommandFailed < RuntimeError; end
60
-
61
- #
62
- # @raise [Chef::PowerShell::CommandFailed] raise if the command failed
63
- #
64
- def error!
65
- raise Chef::PowerShell::CommandFailed, "Unexpected exit in PowerShell command: #{@errors}" if error?
66
- end
67
-
68
- private
69
-
70
- def exec(script, timeout: -1)
71
- FFI.ffi_lib @dll
72
- FFI.attach_function :execute_powershell, :ExecuteScript, %i{string int}, :pointer
73
- timeout = -1 if timeout == 0 || timeout.nil?
74
- execution = FFI.execute_powershell(script, timeout).read_utf16string
75
- hashed_outcome = Chef::JSONCompat.parse(execution)
76
- @result = Chef::JSONCompat.parse(hashed_outcome["result"])
77
- @errors = hashed_outcome["errors"]
78
- @verbose = hashed_outcome["verbose"]
79
- end
80
- end
81
- end