chef 18.1.0 → 18.2.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -3
  3. data/chef-universal-mingw-ucrt.gemspec +2 -2
  4. data/chef.gemspec +1 -1
  5. data/lib/chef/application/base.rb +18 -2
  6. data/lib/chef/client.rb +23 -6
  7. data/lib/chef/http/authenticator.rb +117 -34
  8. data/lib/chef/platform/query_helpers.rb +4 -2
  9. data/lib/chef/resource/apt_repository.rb +20 -2
  10. data/lib/chef/resource/bash.rb +13 -0
  11. data/lib/chef/resource/dsc_script.rb +1 -1
  12. data/lib/chef/resource/launchd.rb +2 -2
  13. data/lib/chef/resource/macos_userdefaults.rb +9 -5
  14. data/lib/chef/resource/rhsm_register.rb +1 -1
  15. data/lib/chef/resource/selinux_fcontext.rb +1 -1
  16. data/lib/chef/resource/selinux_login.rb +129 -0
  17. data/lib/chef/resource/selinux_permissive.rb +1 -1
  18. data/lib/chef/resource/selinux_port.rb +1 -1
  19. data/lib/chef/resource/selinux_state.rb +1 -1
  20. data/lib/chef/resource/selinux_user.rb +137 -0
  21. data/lib/chef/resource/service.rb +1 -1
  22. data/lib/chef/resource/user.rb +2 -2
  23. data/lib/chef/resource/windows_user_privilege.rb +14 -10
  24. data/lib/chef/resources.rb +2 -0
  25. data/lib/chef/version.rb +1 -1
  26. data/spec/data/trusted_certs/intermediate.pem +38 -27
  27. data/spec/data/trusted_certs/opscode.pem +33 -54
  28. data/spec/functional/resource/macos_userdefaults_spec.rb +4 -4
  29. data/spec/integration/client/client_spec.rb +22 -16
  30. data/spec/spec_helper.rb +3 -3
  31. data/spec/unit/client_spec.rb +26 -2
  32. data/spec/unit/compliance/runner_spec.rb +8 -0
  33. data/spec/unit/http/authenticator_spec.rb +64 -11
  34. data/spec/unit/provider/apt_repository_spec.rb +26 -5
  35. data/spec/unit/resource/macos_user_defaults_spec.rb +4 -4
  36. data/spec/unit/resource/selinux_login_spec.rb +73 -0
  37. data/spec/unit/resource/selinux_user_spec.rb +92 -0
  38. metadata +17 -16
  39. data/lib/chef/powershell.rb +0 -81
  40. data/spec/data/chef_guid +0 -1
  41. data/spec/data/nodes/mcwfhpowell.json +0 -3
@@ -18,6 +18,9 @@
18
18
 
19
19
  require "spec_helper"
20
20
  require "chef/http/authenticator"
21
+ require "chef/mixin/powershell_exec"
22
+
23
+ require_relative "../../../lib/chef/win32/registry"
21
24
 
22
25
  describe Chef::HTTP::Authenticator, :windows_only do
23
26
  let(:class_instance) { Chef::HTTP::Authenticator.new(client_name: "test") }
@@ -28,7 +31,7 @@ describe Chef::HTTP::Authenticator, :windows_only do
28
31
  let(:node_name) { "test" }
29
32
  let(:passwrd) { "some_insecure_password" }
30
33
 
31
- before do
34
+ before(:each) do
32
35
  Chef::Config[:node_name] = node_name
33
36
  cert_name = "chef-#{node_name}"
34
37
  d = Time.now
@@ -36,6 +39,7 @@ describe Chef::HTTP::Authenticator, :windows_only do
36
39
  end_date = end_date.utc.iso8601
37
40
 
38
41
  my_client = Chef::Client.new
42
+ class_instance.get_cert_password
39
43
  pfx = my_client.generate_pfx_package(cert_name, end_date)
40
44
  my_client.import_pfx_to_store(pfx)
41
45
  end
@@ -47,10 +51,21 @@ describe Chef::HTTP::Authenticator, :windows_only do
47
51
  delete_certificate(cert_name)
48
52
  end
49
53
 
50
- context "when retrieving a certificate from the certificate store" do
54
+ context "when retrieving a certificate from the certificate store it" do
55
+ it "properly creates the password hive in the registry when it doesn't exist" do
56
+ delete_registry_hive
57
+ class_instance.get_cert_password
58
+ win32registry = Chef::Win32::Registry.new
59
+ expected_path = "HKEY_LOCAL_MACHINE\\Software\\Progress\\Authentication"
60
+ path_created = win32registry.key_exists?(expected_path)
61
+ expect(path_created).to be(true)
62
+ end
63
+
51
64
  it "retrieves a certificate password from the registry when the hive does not already exist" do
52
65
  delete_registry_hive
66
+ password = class_instance.get_cert_password
53
67
  expect { class_instance.get_cert_password }.not_to raise_error
68
+ expect(password).not_to be(nil)
54
69
  end
55
70
 
56
71
  it "should return a password of at least 14 characters in length" do
@@ -58,7 +73,27 @@ describe Chef::HTTP::Authenticator, :windows_only do
58
73
  expect(password.length).to eql(14)
59
74
  end
60
75
 
61
- it "correctly retrieves a valid certificate in pem format from the certstore" do
76
+ it "will retrieve a password from a partial registry hive and upgrades it while using the old decryptor" do
77
+ delete_registry_hive
78
+ load_partial_registry_hive
79
+ password = class_instance.get_cert_password
80
+ expect(password).to eql(passwrd)
81
+ end
82
+
83
+ it "verifies that the new password is now using a vector" do
84
+ win32registry = Chef::Win32::Registry.new
85
+ path = "HKEY_LOCAL_MACHINE\\Software\\Progress\\Authentication"
86
+ password_blob = win32registry.get_values(path)
87
+ if password_blob.nil? || password_blob.empty?
88
+ raise Chef::Exceptions::Win32RegKeyMissing
89
+ end
90
+
91
+ raw_data = password_blob.map { |x| x[:data] }
92
+ vector = raw_data[2]
93
+ expect(vector).not_to be(nil)
94
+ end
95
+
96
+ it "correctly retrieves a valid certificate in pem format from the LocalMachine certstore" do
62
97
  require "openssl"
63
98
  certificate = class_instance.retrieve_certificate_key(node_name)
64
99
  cert_object = OpenSSL::PKey::RSA.new(certificate)
@@ -66,21 +101,39 @@ describe Chef::HTTP::Authenticator, :windows_only do
66
101
  end
67
102
  end
68
103
 
69
- def delete_certificate(cert_name)
104
+ def load_partial_registry_hive
105
+ extend Chef::Mixin::PowershellExec
106
+ password = "some_insecure_password"
70
107
  powershell_code = <<~CODE
71
- Get-ChildItem -path cert:\\LocalMachine\\My -Recurse -Force | Where-Object { $_.Subject -Match "#{cert_name}" } | Remove-item
108
+ $encrypted_string = ConvertTo-SecureString "#{password}" -AsPlainText -Force
109
+ $secure_string = ConvertFrom-SecureString $encrypted_string
110
+ return $secure_string
72
111
  CODE
73
- powershell_exec!(powershell_code)
112
+ encrypted_pass = powershell_exec!(powershell_code).result
113
+ Chef::Config[:auth_key_registry_type] == "user" ? store = "HKEY_CURRENT_USER" : store = "HKEY_LOCAL_MACHINE"
114
+ hive_path = "#{store}\\Software\\Progress\\Authentication"
115
+ win32registry = Chef::Win32::Registry.new
116
+ unless win32registry.key_exists?(hive_path)
117
+ win32registry.create_key(hive_path, true)
118
+ end
119
+ values = { name: "PfxPass", type: :string, data: encrypted_pass }
120
+ win32registry.set_value(hive_path, values)
74
121
  end
75
122
 
76
123
  def delete_registry_hive
77
- @win32registry = Chef::Win32::Registry.new
78
- path = "HKEY_LOCAL_MACHINE\\Software\\Progress\\Authentication"
79
- present = @win32registry.get_values(path)
80
- unless present.nil? || present.empty?
81
- @win32registry.delete_key(path, true)
124
+ win32registry = Chef::Win32::Registry.new
125
+ hive_path = "HKEY_LOCAL_MACHINE\\Software\\Progress"
126
+ if win32registry.key_exists?(hive_path)
127
+ win32registry.delete_key(hive_path, true)
82
128
  end
83
129
  end
130
+
131
+ def delete_certificate(cert_name)
132
+ powershell_code = <<~CODE
133
+ Get-ChildItem -path cert:\\LocalMachine\\My -Recurse -Force | Where-Object { $_.Subject -Match "#{cert_name}" } | Remove-item
134
+ CODE
135
+ powershell_exec!(powershell_code)
136
+ end
84
137
  end
85
138
 
86
139
  describe Chef::HTTP::Authenticator do
@@ -82,6 +82,15 @@ C5986B4F1257FFA86632CBA746181433FBB75451
82
82
  843938DF228D22F7B3742BC0D94AA3F0EFE21092}
83
83
  end
84
84
 
85
+ let(:apt_public_keys) do
86
+ %w{
87
+ pub:-:1024:17:40976EAF437D05B5:2004-09-12
88
+ pub:-:1024:17:46181433FBB75451:2004-12-30
89
+ pub:-:4096:1:3B4FE6ACC0B21F32:2012-05-11
90
+ pub:-:4096:1:D94AA3F0EFE21092:2012-05-11
91
+ }
92
+ end
93
+
85
94
  it "responds to load_current_resource" do
86
95
  expect(provider).to respond_to(:load_current_resource)
87
96
  end
@@ -113,6 +122,18 @@ C5986B4F1257FFA86632CBA746181433FBB75451
113
122
  end
114
123
  end
115
124
 
125
+ describe "#extract_public_keys_from_cmd" do
126
+ it "runs the desired command" do
127
+ expect(provider).to receive(:shell_out).and_return(apt_key_finger)
128
+ provider.extract_public_keys_from_cmd(*apt_key_finger_cmd)
129
+ end
130
+
131
+ it "returns a list of key fingerprints" do
132
+ expect(provider).to receive(:shell_out).and_return(apt_key_finger)
133
+ expect(provider.extract_public_keys_from_cmd(*apt_key_finger_cmd)).to eql(apt_public_keys)
134
+ end
135
+ end
136
+
116
137
  describe "#cookbook_name" do
117
138
  it "returns 'test' when the cookbook property is set" do
118
139
  new_resource.cookbook("test")
@@ -122,22 +143,22 @@ C5986B4F1257FFA86632CBA746181433FBB75451
122
143
 
123
144
  describe "#no_new_keys?" do
124
145
  before do
125
- allow(provider).to receive(:extract_fingerprints_from_cmd).with(*apt_key_finger_cmd).and_return(apt_fingerprints)
146
+ allow(provider).to receive(:extract_public_keys_from_cmd).with(*apt_key_finger_cmd).and_return(apt_public_keys)
126
147
  end
127
148
 
128
149
  let(:file) { "/tmp/remote-gpg-keyfile" }
129
150
 
130
151
  it "matches a set of keys" do
131
- allow(provider).to receive(:extract_fingerprints_from_cmd)
152
+ allow(provider).to receive(:extract_public_keys_from_cmd)
132
153
  .with("gpg", "--with-fingerprint", "--with-colons", file)
133
- .and_return(Array(apt_fingerprints.first))
154
+ .and_return([apt_public_keys.first])
134
155
  expect(provider.no_new_keys?(file)).to be_truthy
135
156
  end
136
157
 
137
158
  it "notices missing keys" do
138
- allow(provider).to receive(:extract_fingerprints_from_cmd)
159
+ allow(provider).to receive(:extract_public_keys_from_cmd)
139
160
  .with("gpg", "--with-fingerprint", "--with-colons", file)
140
- .and_return(%w{ F36A89E33CC1BD0F71079007327574EE02A818DD })
161
+ .and_return(%w{pub:-:4096:1:871920D1991BC93C:1537196506})
141
162
  expect(provider.no_new_keys?(file)).to be_falsey
142
163
  end
143
164
  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
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.0
4
+ version: 18.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Jacob
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-05 00:00:00.000000000 Z
11
+ date: 2023-04-04 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.0
19
+ version: 18.2.7
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.0
26
+ version: 18.2.7
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.0
33
+ version: 18.2.7
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.0
40
+ version: 18.2.7
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: train-core
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -483,19 +483,19 @@ dependencies:
483
483
  - !ruby/object:Gem::Version
484
484
  version: 0.3.4
485
485
  - !ruby/object:Gem::Dependency
486
- name: proxifier
486
+ name: proxifier2
487
487
  requirement: !ruby/object:Gem::Requirement
488
488
  requirements:
489
489
  - - "~>"
490
490
  - !ruby/object:Gem::Version
491
- version: '1.0'
491
+ version: '1.1'
492
492
  type: :runtime
493
493
  prerelease: false
494
494
  version_requirements: !ruby/object:Gem::Requirement
495
495
  requirements:
496
496
  - - "~>"
497
497
  - !ruby/object:Gem::Version
498
- version: '1.0'
498
+ version: '1.1'
499
499
  - !ruby/object:Gem::Dependency
500
500
  name: aws-sdk-s3
501
501
  requirement: !ruby/object:Gem::Requirement
@@ -887,7 +887,6 @@ files:
887
887
  - lib/chef/policy_builder/dynamic.rb
888
888
  - lib/chef/policy_builder/expand_node_object.rb
889
889
  - lib/chef/policy_builder/policyfile.rb
890
- - lib/chef/powershell.rb
891
890
  - lib/chef/property.rb
892
891
  - lib/chef/provider.rb
893
892
  - lib/chef/provider/batch.rb
@@ -1162,10 +1161,12 @@ files:
1162
1161
  - lib/chef/resource/selinux_boolean.rb
1163
1162
  - lib/chef/resource/selinux_fcontext.rb
1164
1163
  - lib/chef/resource/selinux_install.rb
1164
+ - lib/chef/resource/selinux_login.rb
1165
1165
  - lib/chef/resource/selinux_module.rb
1166
1166
  - lib/chef/resource/selinux_permissive.rb
1167
1167
  - lib/chef/resource/selinux_port.rb
1168
1168
  - lib/chef/resource/selinux_state.rb
1169
+ - lib/chef/resource/selinux_user.rb
1169
1170
  - lib/chef/resource/service.rb
1170
1171
  - lib/chef/resource/smartos_package.rb
1171
1172
  - lib/chef/resource/snap_package.rb
@@ -1427,7 +1428,6 @@ files:
1427
1428
  - spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-ufy6g3-0
1428
1429
  - spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-x2d6j9-0
1429
1430
  - spec/data/checksum_cache/chef-file--tmp-chef-rendered-template20100929-10863-xi0l6h-0
1430
- - spec/data/chef_guid
1431
1431
  - spec/data/client.d_00/00-foo.rb
1432
1432
  - spec/data/client.d_00/01-bar.rb
1433
1433
  - spec/data/client.d_00/02-strings.rb
@@ -1560,7 +1560,6 @@ files:
1560
1560
  - spec/data/mixin/real_data.rb
1561
1561
  - spec/data/nested.json
1562
1562
  - spec/data/nodes/default.rb
1563
- - spec/data/nodes/mcwfhpowell.json
1564
1563
  - spec/data/nodes/test.example.com.rb
1565
1564
  - spec/data/nodes/test.rb
1566
1565
  - spec/data/null_config.rb
@@ -2326,10 +2325,12 @@ files:
2326
2325
  - spec/unit/resource/selinux_boolean_spec.rb
2327
2326
  - spec/unit/resource/selinux_fcontext_spec.rb
2328
2327
  - spec/unit/resource/selinux_install_spec.rb
2328
+ - spec/unit/resource/selinux_login_spec.rb
2329
2329
  - spec/unit/resource/selinux_module_spec.rb
2330
2330
  - spec/unit/resource/selinux_permissive_spec.rb
2331
2331
  - spec/unit/resource/selinux_port_spec.rb
2332
2332
  - spec/unit/resource/selinux_state_spec.rb
2333
+ - spec/unit/resource/selinux_user_spec.rb
2333
2334
  - spec/unit/resource/service_spec.rb
2334
2335
  - spec/unit/resource/smartos_package_spec.rb
2335
2336
  - spec/unit/resource/snap_package_spec.rb
@@ -2449,7 +2450,7 @@ metadata:
2449
2450
  homepage_uri: https://www.chef.io
2450
2451
  mailing_list_uri: https://discourse.chef.io/
2451
2452
  source_code_uri: https://github.com/chef/chef/
2452
- post_install_message:
2453
+ post_install_message:
2453
2454
  rdoc_options: []
2454
2455
  require_paths:
2455
2456
  - lib
@@ -2464,8 +2465,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2464
2465
  - !ruby/object:Gem::Version
2465
2466
  version: '0'
2466
2467
  requirements: []
2467
- rubygems_version: 3.3.26
2468
- signing_key:
2468
+ rubygems_version: 3.3.7
2469
+ signing_key:
2469
2470
  specification_version: 4
2470
2471
  summary: A systems integration framework, built to bring the benefits of configuration
2471
2472
  management to your entire infrastructure.
@@ -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
data/spec/data/chef_guid DELETED
@@ -1 +0,0 @@
1
- 25435897-47c0-49b1-9eb3-561b312cbfd6
@@ -1,3 +0,0 @@
1
- {
2
- "name": "mcwfhpowell"
3
- }