puppet 4.3.1-x64-mingw32 → 4.3.2-x64-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/ext/build_defaults.yaml +1 -1
- data/lib/hiera/scope.rb +1 -1
- data/lib/puppet/application/lookup.rb +41 -43
- data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
- data/lib/puppet/functions/lookup.rb +126 -150
- data/lib/puppet/functions/match.rb +1 -0
- data/lib/puppet/indirector/hiera.rb +3 -1
- data/lib/puppet/indirector/indirection.rb +6 -2
- data/lib/puppet/indirector/json.rb +2 -2
- data/lib/puppet/module.rb +3 -2
- data/lib/puppet/node.rb +11 -2
- data/lib/puppet/parser/compiler.rb +1 -8
- data/lib/puppet/parser/functions/lookup.rb +128 -149
- data/lib/puppet/parser/functions/match.rb +1 -0
- data/lib/puppet/plugins/data_providers/data_provider.rb +3 -2
- data/lib/puppet/pops/adapters.rb +43 -0
- data/lib/puppet/pops/evaluator/access_operator.rb +3 -3
- data/lib/puppet/pops/evaluator/closure.rb +51 -51
- data/lib/puppet/pops/evaluator/collector_transformer.rb +16 -0
- data/lib/puppet/pops/evaluator/runtime3_support.rb +11 -2
- data/lib/puppet/pops/functions/function.rb +6 -2
- data/lib/puppet/pops/issues.rb +16 -0
- data/lib/puppet/pops/loader/puppet_function_instantiator.rb +3 -2
- data/lib/puppet/pops/lookup.rb +3 -0
- data/lib/puppet/pops/lookup/explainer.rb +73 -3
- data/lib/puppet/pops/lookup/invocation.rb +21 -19
- data/lib/puppet/pops/model/factory.rb +153 -155
- data/lib/puppet/pops/model/model.rb +9 -0
- data/lib/puppet/pops/model/model_label_provider.rb +1 -0
- data/lib/puppet/pops/parser/evaluating_parser.rb +3 -3
- data/lib/puppet/pops/parser/lexer2.rb +411 -393
- data/lib/puppet/pops/parser/slurp_support.rb +5 -1
- data/lib/puppet/pops/types/type_calculator.rb +2 -6
- data/lib/puppet/pops/types/types.rb +3 -9
- data/lib/puppet/pops/validation/checker4_0.rb +36 -12
- data/lib/puppet/provider/group/windows_adsi.rb +2 -2
- data/lib/puppet/provider/package/pip.rb +11 -1
- data/lib/puppet/provider/package/rpm.rb +0 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/service/debian.rb +5 -18
- data/lib/puppet/provider/service/init.rb +7 -0
- data/lib/puppet/provider/service/launchd.rb +6 -0
- data/lib/puppet/provider/service/systemd.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +2 -2
- data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
- data/lib/puppet/resource/type.rb +2 -1
- data/lib/puppet/transaction/additional_resource_generator.rb +17 -3
- data/lib/puppet/type/group.rb +6 -2
- data/lib/puppet/util/windows.rb +4 -0
- data/lib/puppet/util/windows/adsi.rb +61 -24
- data/lib/puppet/util/windows/principal.rb +181 -0
- data/lib/puppet/util/windows/registry.rb +21 -15
- data/lib/puppet/util/windows/sid.rb +42 -11
- data/lib/puppet/version.rb +1 -1
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
- data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
- data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
- data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +6 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
- data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
- data/spec/integration/parser/collection_spec.rb +8 -0
- data/spec/integration/util/windows/principal_spec.rb +115 -0
- data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
- data/spec/integration/util/windows/security_spec.rb +2 -2
- data/spec/unit/application/lookup_spec.rb +138 -28
- data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/functions/epp_spec.rb +6 -6
- data/spec/unit/functions/inline_epp_spec.rb +4 -4
- data/spec/unit/functions/lookup_spec.rb +30 -3
- data/spec/unit/functions4_spec.rb +1 -1
- data/spec/unit/hiera/scope_spec.rb +5 -2
- data/spec/unit/indirector/json_spec.rb +1 -1
- data/spec/unit/node_spec.rb +8 -0
- data/spec/unit/parser/compiler_spec.rb +0 -18
- data/spec/unit/pops/evaluator/access_ops_spec.rb +4 -4
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +84 -2
- data/spec/unit/pops/parser/lexer2_spec.rb +6 -0
- data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
- data/spec/unit/pops/types/type_calculator_spec.rb +0 -17
- data/spec/unit/pops/validator/validator_spec.rb +87 -0
- data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
- data/spec/unit/provider/package/pip_spec.rb +41 -13
- data/spec/unit/provider/package/rpm_spec.rb +2 -25
- data/spec/unit/provider/package/yum_spec.rb +1 -1
- data/spec/unit/provider/service/debian_spec.rb +6 -24
- data/spec/unit/provider/service/init_spec.rb +11 -1
- data/spec/unit/provider/service/launchd_spec.rb +11 -0
- data/spec/unit/provider/service/systemd_spec.rb +18 -12
- data/spec/unit/provider/service/upstart_spec.rb +57 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
- data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
- data/spec/unit/resource_spec.rb +12 -2
- data/spec/unit/util/windows/adsi_spec.rb +44 -36
- data/spec/unit/util/windows/sid_spec.rb +47 -10
- metadata +77 -10
File without changes
|
File without changes
|
@@ -0,0 +1,81 @@
|
|
1
|
+
function puppet_init_calling_puppet() {
|
2
|
+
usee::usee_puppet()
|
3
|
+
}
|
4
|
+
|
5
|
+
function puppet_init_calling_puppet_init() {
|
6
|
+
usee_puppet_init()
|
7
|
+
}
|
8
|
+
|
9
|
+
function puppet_init_calling_ruby() {
|
10
|
+
usee::usee_ruby()
|
11
|
+
}
|
12
|
+
|
13
|
+
class user {
|
14
|
+
case $::case_number {
|
15
|
+
1: {
|
16
|
+
# Call a puppet function that resides in usee/functions directly from init.pp
|
17
|
+
#
|
18
|
+
notify { 'case_1': message => usee::usee_puppet() }
|
19
|
+
}
|
20
|
+
2: {
|
21
|
+
# Call a puppet function that resides in usee/manifests/init.pp directly from init.pp
|
22
|
+
#
|
23
|
+
include usee
|
24
|
+
notify { 'case_2': message => usee_puppet_init() }
|
25
|
+
}
|
26
|
+
3: {
|
27
|
+
# Call a ruby function that resides in usee directly from init.pp
|
28
|
+
#
|
29
|
+
notify { 'case_3': message => usee::usee_ruby() }
|
30
|
+
}
|
31
|
+
4: {
|
32
|
+
# Call a puppet function that resides in usee/functions from a puppet function under functions
|
33
|
+
#
|
34
|
+
notify { 'case_4': message => user::puppet_calling_puppet() }
|
35
|
+
}
|
36
|
+
5: {
|
37
|
+
# Call a puppet function that resides in usee/manifests/init.pp from a puppet function under functions
|
38
|
+
#
|
39
|
+
include usee
|
40
|
+
notify { 'case_5': message => user::puppet_calling_puppet_init() }
|
41
|
+
}
|
42
|
+
6: {
|
43
|
+
# Call a ruby function that resides in usee from a puppet function under functions
|
44
|
+
#
|
45
|
+
notify { 'case_6': message => user::puppet_calling_ruby() }
|
46
|
+
}
|
47
|
+
7: {
|
48
|
+
# Call a puppet function that resides in usee/functions from a puppet function in init.pp
|
49
|
+
#
|
50
|
+
notify { 'case_7': message => puppet_init_calling_puppet() }
|
51
|
+
}
|
52
|
+
8: {
|
53
|
+
# Call a puppet function that resides in usee/manifests/init.pp from a puppet function in init.pp
|
54
|
+
#
|
55
|
+
include usee
|
56
|
+
notify { 'case_8': message => puppet_init_calling_puppet_init() }
|
57
|
+
}
|
58
|
+
9: {
|
59
|
+
# Call a ruby function that resides in usee from a puppet function in init.pp
|
60
|
+
#
|
61
|
+
notify { 'case_9': message => puppet_init_calling_ruby() }
|
62
|
+
}
|
63
|
+
10: {
|
64
|
+
# Call a puppet function that resides in usee/functions from a ruby function in this module
|
65
|
+
#
|
66
|
+
notify { 'case_10': message => user::ruby_calling_puppet() }
|
67
|
+
}
|
68
|
+
11: {
|
69
|
+
# Call a puppet function that resides in usee/manifests/init.pp from a ruby function in this module
|
70
|
+
#
|
71
|
+
include usee
|
72
|
+
notify { 'case_11': message => user::ruby_calling_puppet_init() }
|
73
|
+
}
|
74
|
+
12: {
|
75
|
+
# Call a ruby function that resides in usee from a ruby function in this module
|
76
|
+
#
|
77
|
+
notify { 'case_12': message => user::ruby_calling_ruby() }
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
@@ -95,6 +95,14 @@ describe 'collectors' do
|
|
95
95
|
MANIFEST
|
96
96
|
end
|
97
97
|
|
98
|
+
it "matches with resource references" do
|
99
|
+
expect_the_message_to_be(["wanted"], <<-MANIFEST)
|
100
|
+
@notify { "foobar": }
|
101
|
+
@notify { "testing": require => Notify["foobar"], message => "wanted" }
|
102
|
+
Notify <| require == Notify["foobar"] |>
|
103
|
+
MANIFEST
|
104
|
+
end
|
105
|
+
|
98
106
|
it "allows criteria to be combined with 'and'" do
|
99
107
|
expect_the_message_to_be(["the message"], <<-MANIFEST)
|
100
108
|
@notify { "testing": message => "the message" }
|
@@ -0,0 +1,115 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'puppet/util/windows'
|
4
|
+
|
5
|
+
describe Puppet::Util::Windows::SID::Principal, :if => Puppet.features.microsoft_windows? do
|
6
|
+
|
7
|
+
let (:system_bytes) { [1, 1, 0, 0, 0, 0, 0, 5, 18, 0, 0, 0] }
|
8
|
+
let (:administrator_bytes) { [1, 2, 0, 0, 0, 0, 0, 5, 32, 0, 0, 0, 32, 2, 0, 0] }
|
9
|
+
|
10
|
+
describe ".lookup_account_name" do
|
11
|
+
it "should create an instance from a well-known account name" do
|
12
|
+
principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('SYSTEM')
|
13
|
+
expect(principal.account).to eq('SYSTEM')
|
14
|
+
expect(principal.sid_bytes).to eq(system_bytes)
|
15
|
+
expect(principal.sid).to eq('S-1-5-18')
|
16
|
+
expect(principal.domain).to eq('NT AUTHORITY')
|
17
|
+
expect(principal.domain_account).to eq('NT AUTHORITY\\SYSTEM')
|
18
|
+
expect(principal.account_type).to eq(:SidTypeWellKnownGroup)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should create an instance from a well-known account prefixed with NT AUTHORITY" do
|
22
|
+
principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('NT AUTHORITY\\SYSTEM')
|
23
|
+
expect(principal.account).to eq('SYSTEM')
|
24
|
+
expect(principal.sid_bytes).to eq(system_bytes)
|
25
|
+
expect(principal.sid).to eq('S-1-5-18')
|
26
|
+
expect(principal.domain).to eq('NT AUTHORITY')
|
27
|
+
expect(principal.domain_account).to eq('NT AUTHORITY\\SYSTEM')
|
28
|
+
expect(principal.account_type).to eq(:SidTypeWellKnownGroup)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should create an instance from a local account prefixed with hostname" do
|
32
|
+
current_user_name = Puppet::Util::Windows::ADSI::User.current_user_name
|
33
|
+
running_as_system = (current_user_name == 'SYSTEM')
|
34
|
+
username = running_as_system ? 'Administrator' : current_user_name
|
35
|
+
|
36
|
+
user_exists = Puppet::Util::Windows::ADSI::User.exists?(".\\#{username}")
|
37
|
+
|
38
|
+
# when running as SYSTEM (in Jenkins CI), then Administrator should be used
|
39
|
+
# otherwise running in AppVeyor there is no Administrator and a the current local user can be used
|
40
|
+
skip if (running_as_system && !user_exists)
|
41
|
+
|
42
|
+
hostname = Socket.gethostname
|
43
|
+
|
44
|
+
principal = Puppet::Util::Windows::SID::Principal.lookup_account_name("#{hostname}\\#{username}")
|
45
|
+
expect(principal.account).to match(/^#{Regexp.quote(username)}$/i)
|
46
|
+
# skip SID and bytes in this case since the most interesting thing here is domain_account
|
47
|
+
expect(principal.domain).to match(/^#{Regexp.quote(hostname)}$/i)
|
48
|
+
expect(principal.domain_account).to match(/^#{Regexp.quote(hostname)}\\#{Regexp.quote(username)}$/i)
|
49
|
+
expect(principal.account_type).to eq(:SidTypeUser)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should create an instance from a well-known group alias" do
|
53
|
+
principal = Puppet::Util::Windows::SID::Principal.lookup_account_name('Administrators')
|
54
|
+
expect(principal.account).to eq('Administrators')
|
55
|
+
expect(principal.sid_bytes).to eq(administrator_bytes)
|
56
|
+
expect(principal.sid).to eq('S-1-5-32-544')
|
57
|
+
expect(principal.domain).to eq('BUILTIN')
|
58
|
+
expect(principal.domain_account).to eq('BUILTIN\\Administrators')
|
59
|
+
expect(principal.account_type).to eq(:SidTypeAlias)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should raise an error when trying to lookup an account that doesn't exist" do
|
63
|
+
principal = Puppet::Util::Windows::SID::Principal
|
64
|
+
expect {
|
65
|
+
principal.lookup_account_name('ConanTheBarbarian')
|
66
|
+
}.to raise_error(Puppet::Util::Windows::Error, /Failed to call LookupAccountNameW/)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe ".lookup_account_sid" do
|
71
|
+
it "should create an instance from a well-known account SID" do
|
72
|
+
principal = Puppet::Util::Windows::SID::Principal.lookup_account_sid(system_bytes)
|
73
|
+
expect(principal.account).to eq('SYSTEM')
|
74
|
+
expect(principal.sid_bytes).to eq(system_bytes)
|
75
|
+
expect(principal.sid).to eq('S-1-5-18')
|
76
|
+
expect(principal.domain).to eq('NT AUTHORITY')
|
77
|
+
expect(principal.domain_account).to eq('NT AUTHORITY\\SYSTEM')
|
78
|
+
|
79
|
+
# Windows API LookupAccountSid behaves differently if current user is SYSTEM
|
80
|
+
# even though LookupAccountName does not demonstrate same behavior
|
81
|
+
if Puppet::Util::Windows::ADSI::User.current_user_name != 'SYSTEM'
|
82
|
+
account_type = :SidTypeWellKnownGroup
|
83
|
+
else
|
84
|
+
account_type = :SidTypeUser
|
85
|
+
end
|
86
|
+
|
87
|
+
expect(principal.account_type).to eq(account_type)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should create an instance from a well-known group SID" do
|
91
|
+
principal = Puppet::Util::Windows::SID::Principal.lookup_account_sid(administrator_bytes)
|
92
|
+
expect(principal.account).to eq('Administrators')
|
93
|
+
expect(principal.sid_bytes).to eq(administrator_bytes)
|
94
|
+
expect(principal.sid).to eq('S-1-5-32-544')
|
95
|
+
expect(principal.domain).to eq('BUILTIN')
|
96
|
+
expect(principal.domain_account).to eq('BUILTIN\\Administrators')
|
97
|
+
expect(principal.account_type).to eq(:SidTypeAlias)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should raise an error when trying to lookup completely invalid SID bytes" do
|
101
|
+
principal = Puppet::Util::Windows::SID::Principal
|
102
|
+
expect {
|
103
|
+
principal.lookup_account_sid([])
|
104
|
+
}.to raise_error(Puppet::Util::Windows::Error, /Failed to call LookupAccountSidW: The parameter is incorrect/)
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should raise an error when trying to lookup a valid SID that doesn't have a matching account" do
|
108
|
+
principal = Puppet::Util::Windows::SID::Principal
|
109
|
+
expect {
|
110
|
+
# S-1-1-1 which is not a valid account
|
111
|
+
principal.lookup_account_sid([1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0])
|
112
|
+
}.to raise_error(Puppet::Util::Windows::Error, /Failed to call LookupAccountSidW: No mapping between account names and security IDs was done/)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -2,10 +2,30 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
require 'puppet/util/windows'
|
4
4
|
|
5
|
-
|
5
|
+
if Puppet::Util::Platform.windows?
|
6
|
+
describe Puppet::Util::Windows::Registry do
|
6
7
|
subject do
|
7
8
|
class TestRegistry
|
8
9
|
include Puppet::Util::Windows::Registry
|
10
|
+
extend FFI::Library
|
11
|
+
|
12
|
+
ffi_lib :advapi32
|
13
|
+
attach_function :RegSetValueExW,
|
14
|
+
[:handle, :pointer, :dword, :dword, :pointer, :dword], :win32_long
|
15
|
+
|
16
|
+
def write_corrupt_dword(reg, valuename)
|
17
|
+
# Normally DWORDs contain 4 bytes. This bad data only has 2
|
18
|
+
bad_data = [0, 0]
|
19
|
+
FFI::Pointer.from_string_to_wide_string(valuename) do |name_ptr|
|
20
|
+
FFI::MemoryPointer.new(:uchar, bad_data.length) do |data_ptr|
|
21
|
+
data_ptr.write_array_of_uchar(bad_data)
|
22
|
+
if RegSetValueExW(reg.hkey, name_ptr, 0,
|
23
|
+
Win32::Registry::REG_DWORD, data_ptr, data_ptr.size) != 0
|
24
|
+
raise Puppet::Util::Windows::Error.new("Failed to write registry value")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
9
29
|
end
|
10
30
|
|
11
31
|
TestRegistry.new
|
@@ -163,5 +183,75 @@ describe Puppet::Util::Windows::Registry, :if => Puppet::Util::Platform.windows?
|
|
163
183
|
end
|
164
184
|
end
|
165
185
|
end
|
186
|
+
|
187
|
+
context "when reading values" do
|
188
|
+
let (:hklm) { Win32::Registry::HKEY_LOCAL_MACHINE }
|
189
|
+
let (:puppet_key) { "SOFTWARE\\Puppet Labs"}
|
190
|
+
let (:subkey_name) { "PuppetRegistryTest" }
|
191
|
+
let (:value_name) { SecureRandom.uuid }
|
192
|
+
|
193
|
+
after(:each) do
|
194
|
+
hklm.open(puppet_key, Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
195
|
+
subject.delete_key(reg, subkey_name)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
[
|
200
|
+
{:name => 'REG_SZ', :type => Win32::Registry::REG_SZ, :value => 'reg sz string'},
|
201
|
+
{:name => 'REG_EXPAND_SZ', :type => Win32::Registry::REG_EXPAND_SZ, :value => 'reg expand string'},
|
202
|
+
{:name => 'REG_MULTI_SZ', :type => Win32::Registry::REG_MULTI_SZ, :value => ['string1', 'string2']},
|
203
|
+
{:name => 'REG_BINARY', :type => Win32::Registry::REG_BINARY, :value => 'abinarystring'},
|
204
|
+
{:name => 'REG_DWORD', :type => Win32::Registry::REG_DWORD, :value => 0xFFFFFFFF},
|
205
|
+
{:name => 'REG_DWORD_BIG_ENDIAN', :type => Win32::Registry::REG_DWORD_BIG_ENDIAN, :value => 0xFFFF},
|
206
|
+
{:name => 'REG_QWORD', :type => Win32::Registry::REG_QWORD, :value => 0xFFFFFFFFFFFFFFFF},
|
207
|
+
].each do |pair|
|
208
|
+
it "should return #{pair[:name]} values" do
|
209
|
+
hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS) do |reg|
|
210
|
+
reg.write(value_name, pair[:type], pair[:value])
|
211
|
+
end
|
212
|
+
|
213
|
+
hklm.open("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_READ) do |reg|
|
214
|
+
vals = subject.values(reg)
|
215
|
+
|
216
|
+
expect(vals).to have_key(value_name)
|
217
|
+
subject.each_value(reg) do |subkey, type, data|
|
218
|
+
expect(type).to eq(pair[:type])
|
219
|
+
end
|
220
|
+
|
221
|
+
written = vals[value_name]
|
222
|
+
expect(written).to eq(pair[:value])
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
context "when reading corrupt values" do
|
229
|
+
let (:hklm) { Win32::Registry::HKEY_LOCAL_MACHINE }
|
230
|
+
let (:puppet_key) { "SOFTWARE\\Puppet Labs"}
|
231
|
+
let (:subkey_name) { "PuppetRegistryTest" }
|
232
|
+
let (:value_name) { SecureRandom.uuid }
|
233
|
+
|
234
|
+
before(:each) do
|
235
|
+
hklm.create("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS) do |reg_key|
|
236
|
+
subject.write_corrupt_dword(reg_key, value_name)
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
after(:each) do
|
241
|
+
hklm.open(puppet_key, Win32::Registry::KEY_ALL_ACCESS) do |reg_key|
|
242
|
+
subject.delete_key(reg_key, subkey_name)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
it "should return nil for a corrupt DWORD" do
|
247
|
+
hklm.open("#{puppet_key}\\#{subkey_name}", Win32::Registry::KEY_ALL_ACCESS) do |reg_key|
|
248
|
+
vals = subject.values(reg_key)
|
249
|
+
|
250
|
+
expect(vals).to have_key(value_name)
|
251
|
+
expect(vals[value_name]).to be_nil
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
166
255
|
end
|
167
256
|
end
|
257
|
+
end
|
@@ -478,7 +478,7 @@ describe "Puppet::Util::Windows::Security", :if => Puppet.features.microsoft_win
|
|
478
478
|
user = Puppet::Util::Windows::ADSI::User.create("puppet#{rand(10000)}")
|
479
479
|
user.commit
|
480
480
|
begin
|
481
|
-
sid = Puppet::Util::Windows::ADSI::User.new(user.name).sid.
|
481
|
+
sid = Puppet::Util::Windows::ADSI::User.new(user.name).sid.sid
|
482
482
|
winsec.set_owner(sid, path)
|
483
483
|
winsec.set_mode(WindowsSecurityTester::S_IRWXU, path)
|
484
484
|
ensure
|
@@ -494,7 +494,7 @@ describe "Puppet::Util::Windows::Security", :if => Puppet.features.microsoft_win
|
|
494
494
|
group = Puppet::Util::Windows::ADSI::Group.create("puppet#{rand(10000)}")
|
495
495
|
group.commit
|
496
496
|
begin
|
497
|
-
sid = Puppet::Util::Windows::ADSI::Group.new(group.name).sid.
|
497
|
+
sid = Puppet::Util::Windows::ADSI::Group.new(group.name).sid.sid
|
498
498
|
winsec.set_group(sid, path)
|
499
499
|
winsec.set_mode(WindowsSecurityTester::S_IRWXG, path)
|
500
500
|
ensure
|