puppet 8.2.0 → 8.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +25 -31
- data/ext/project_data.yaml +2 -2
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/ssl.rb +42 -7
- data/lib/puppet/application.rb +5 -1
- data/lib/puppet/defaults.rb +5 -5
- data/lib/puppet/face/config.rb +1 -1
- data/lib/puppet/face/epp.rb +2 -2
- data/lib/puppet/face/module/list.rb +2 -2
- data/lib/puppet/face/parser.rb +1 -1
- data/lib/puppet/functions/split.rb +28 -1
- data/lib/puppet/indirector/facts/facter.rb +1 -1
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/info_service/task_information_service.rb +1 -1
- data/lib/puppet/module_tool.rb +1 -1
- data/lib/puppet/network/formats.rb +3 -3
- data/lib/puppet/network/http/memory_response.rb +1 -1
- data/lib/puppet/parameter/value_collection.rb +1 -1
- data/lib/puppet/parser/files.rb +4 -3
- data/lib/puppet/parser/functions.rb +1 -1
- data/lib/puppet/pops/loader/loader_paths.rb +4 -4
- data/lib/puppet/pops/lookup/explainer.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +1 -1
- data/lib/puppet/pops/model/tree_dumper.rb +1 -1
- data/lib/puppet/pops/parser/epp_support.rb +1 -1
- data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
- data/lib/puppet/pops/parser/pn_parser.rb +1 -1
- data/lib/puppet/pops/pn.rb +1 -1
- data/lib/puppet/pops/serialization/json_path.rb +1 -1
- data/lib/puppet/pops/time/timespan.rb +4 -4
- data/lib/puppet/pops/types/ruby_generator.rb +2 -2
- data/lib/puppet/pops/types/string_converter.rb +6 -6
- data/lib/puppet/pops/types/type_formatter.rb +2 -2
- data/lib/puppet/pops/types/types.rb +1 -1
- data/lib/puppet/provider/nameservice/directoryservice.rb +2 -2
- data/lib/puppet/provider/package/apt.rb +1 -1
- data/lib/puppet/provider/package/dnf.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/reference/configuration.rb +1 -1
- data/lib/puppet/reference/indirection.rb +1 -1
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/type/filebucket.rb +1 -1
- data/lib/puppet/util/diff.rb +1 -1
- data/lib/puppet/util/execution.rb +9 -4
- data/lib/puppet/util/inifile.rb +2 -2
- data/lib/puppet/util/monkey_patches.rb +18 -0
- data/lib/puppet/util/package/version/rpm.rb +1 -1
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/selinux.rb +1 -1
- data/lib/puppet/util/windows/access_control_entry.rb +1 -1
- data/lib/puppet/util/windows/access_control_list.rb +1 -1
- data/lib/puppet/util/windows/adsi.rb +9 -2
- data/lib/puppet/util/windows/error.rb +1 -1
- data/lib/puppet/util/windows/file.rb +2 -2
- data/lib/puppet/util/windows/process.rb +1 -1
- data/lib/puppet/util/windows/sid.rb +4 -2
- data/lib/puppet/util.rb +2 -3
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +6 -2
- data/locales/puppet.pot +40 -32
- data/man/man5/puppet.conf.5 +3 -3
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +1 -1
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/integration/type/exec_spec.rb +13 -0
- data/spec/lib/puppet_spec/verbose.rb +10 -1
- data/spec/unit/agent_spec.rb +2 -9
- data/spec/unit/application/ssl_spec.rb +49 -0
- data/spec/unit/functions/split_spec.rb +6 -0
- data/spec/unit/info_service_spec.rb +1 -1
- data/spec/unit/ssl/certificate_signer_spec.rb +17 -0
- data/spec/unit/ssl/ssl_provider_spec.rb +1 -1
- data/spec/unit/util/execution_spec.rb +1 -0
- data/spec/unit/util/monkey_patches_spec.rb +42 -0
- data/spec/unit/util/windows/adsi_spec.rb +25 -0
- metadata +5 -3
@@ -545,7 +545,7 @@ module Time
|
|
545
545
|
end
|
546
546
|
|
547
547
|
def format(timespan)
|
548
|
-
bld =
|
548
|
+
bld = timespan.negative? ? '-'.dup : ''.dup
|
549
549
|
@segments.each { |segment| segment.append_to(bld, timespan) }
|
550
550
|
bld
|
551
551
|
end
|
@@ -575,7 +575,7 @@ module Time
|
|
575
575
|
end
|
576
576
|
|
577
577
|
def build_regexp
|
578
|
-
bld =
|
578
|
+
bld = '\A-?'.dup
|
579
579
|
@segments.each { |segment| segment.append_regexp(bld) }
|
580
580
|
bld << '\z'
|
581
581
|
Regexp.new(bld)
|
@@ -613,7 +613,7 @@ module Time
|
|
613
613
|
|
614
614
|
def append_literal(bld, codepoint)
|
615
615
|
if bld.empty? || !bld.last.is_a?(Format::LiteralSegment)
|
616
|
-
bld << Format::LiteralSegment.new(
|
616
|
+
bld << Format::LiteralSegment.new(''.dup.concat(codepoint))
|
617
617
|
else
|
618
618
|
bld.last.concat(codepoint)
|
619
619
|
end
|
@@ -634,7 +634,7 @@ module Time
|
|
634
634
|
position = -1
|
635
635
|
fstart = 0
|
636
636
|
|
637
|
-
str.
|
637
|
+
str.each_codepoint do |codepoint|
|
638
638
|
position += 1
|
639
639
|
if state == STATE_LITERAL
|
640
640
|
if codepoint == 0x25 # '%'
|
@@ -60,7 +60,7 @@ class RubyGenerator < TypeFormatter
|
|
60
60
|
if cls.nil?
|
61
61
|
rp = key.resolved_parent
|
62
62
|
parent_class = rp.is_a?(PObjectType) ? rp.implementation_class : Object
|
63
|
-
class_def =
|
63
|
+
class_def = ''.dup
|
64
64
|
class_body(key, EMPTY_ARRAY, class_def)
|
65
65
|
cls = Class.new(parent_class)
|
66
66
|
cls.class_eval(class_def)
|
@@ -109,7 +109,7 @@ class RubyGenerator < TypeFormatter
|
|
109
109
|
end
|
110
110
|
|
111
111
|
# Create class definition of all contained types
|
112
|
-
bld =
|
112
|
+
bld = ''.dup
|
113
113
|
start_module(common_prefix, comment, bld)
|
114
114
|
class_names = []
|
115
115
|
names_by_prefix.each_pair do |seg_array, index_and_name_array|
|
@@ -701,7 +701,7 @@ class StringConverter
|
|
701
701
|
# Performs post-processing of literals to apply width and precision flags
|
702
702
|
def apply_string_flags(f, literal_str)
|
703
703
|
if f.left || f.width || f.prec
|
704
|
-
fmt =
|
704
|
+
fmt = '%'.dup
|
705
705
|
fmt << '-' if f.left
|
706
706
|
fmt << f.width.to_s if f.width
|
707
707
|
fmt << '.' << f.prec.to_s if f.prec
|
@@ -853,7 +853,7 @@ class StringConverter
|
|
853
853
|
end
|
854
854
|
|
855
855
|
# Assume that the string can be single quoted
|
856
|
-
bld =
|
856
|
+
bld = "'".dup
|
857
857
|
bld.force_encoding(str.encoding)
|
858
858
|
escaped = false
|
859
859
|
str.each_codepoint do |codepoint|
|
@@ -879,12 +879,12 @@ class StringConverter
|
|
879
879
|
# If string ended with a backslash, then that backslash must be escaped
|
880
880
|
bld << 0x5c if escaped
|
881
881
|
|
882
|
-
bld << '
|
882
|
+
bld << "'"
|
883
883
|
bld
|
884
884
|
end
|
885
885
|
|
886
886
|
def puppet_double_quote(str)
|
887
|
-
bld =
|
887
|
+
bld = '"'.dup
|
888
888
|
str.each_codepoint do |codepoint|
|
889
889
|
case codepoint
|
890
890
|
when 0x09
|
@@ -940,7 +940,7 @@ class StringConverter
|
|
940
940
|
|
941
941
|
case format.format
|
942
942
|
when :a, :s, :p
|
943
|
-
buf =
|
943
|
+
buf = ''.dup
|
944
944
|
if indentation.breaks?
|
945
945
|
buf << "\n"
|
946
946
|
buf << indentation.padding
|
@@ -1055,7 +1055,7 @@ class StringConverter
|
|
1055
1055
|
|
1056
1056
|
when :h, :s, :p
|
1057
1057
|
indentation = indentation.indenting(format.alt? || indentation.is_indenting?)
|
1058
|
-
buf =
|
1058
|
+
buf = ''.dup
|
1059
1059
|
if indentation.breaks?
|
1060
1060
|
buf << "\n"
|
1061
1061
|
buf << indentation.padding
|
@@ -50,7 +50,7 @@ class TypeFormatter
|
|
50
50
|
# @api public
|
51
51
|
#
|
52
52
|
def string(t)
|
53
|
-
@bld =
|
53
|
+
@bld = ''.dup
|
54
54
|
append_string(t)
|
55
55
|
@bld
|
56
56
|
end
|
@@ -64,7 +64,7 @@ class TypeFormatter
|
|
64
64
|
#
|
65
65
|
# @api public
|
66
66
|
def indented_string(t, indent = 0, indent_width = 2)
|
67
|
-
@bld =
|
67
|
+
@bld = ''.dup
|
68
68
|
append_indented_string(t, indent, indent_width)
|
69
69
|
@bld
|
70
70
|
end
|
@@ -1713,7 +1713,7 @@ class PRegexpType < PScalarType
|
|
1713
1713
|
if options == 0
|
1714
1714
|
rx_string
|
1715
1715
|
else
|
1716
|
-
bld =
|
1716
|
+
bld = '(?'.dup
|
1717
1717
|
bld << 'i' if (options & Regexp::IGNORECASE) != 0
|
1718
1718
|
bld << 'm' if (options & Regexp::MULTILINE) != 0
|
1719
1719
|
bld << 'x' if (options & Regexp::EXTENDED) != 0
|
@@ -218,8 +218,8 @@ class Puppet::Provider::NameService::DirectoryService < Puppet::Provider::NameSe
|
|
218
218
|
password_hash_plist = users_plist['ShadowHashData'][0]
|
219
219
|
converted_hash_plist = convert_binary_to_hash(password_hash_plist)
|
220
220
|
else
|
221
|
-
users_plist['ShadowHashData'] =
|
222
|
-
converted_hash_plist = {'SALTED-SHA512' =>
|
221
|
+
users_plist['ShadowHashData'] = ''.dup
|
222
|
+
converted_hash_plist = {'SALTED-SHA512' => ''.dup}
|
223
223
|
end
|
224
224
|
|
225
225
|
# converted_hash_plist['SALTED-SHA512'] expects a Base64 encoded
|
@@ -13,7 +13,7 @@ Puppet::Type.type(:package).provide :apt, :parent => :dpkg, :source => :dpkg do
|
|
13
13
|
These options should be specified as an array where each element is either a
|
14
14
|
string or a hash."
|
15
15
|
|
16
|
-
has_feature :versionable, :install_options, :virtual_packages
|
16
|
+
has_feature :versionable, :install_options, :virtual_packages, :version_ranges
|
17
17
|
|
18
18
|
commands :aptget => "/usr/bin/apt-get"
|
19
19
|
commands :aptcache => "/usr/bin/apt-cache"
|
@@ -10,7 +10,7 @@ Puppet::Type.type(:package).provide :dnf, :parent => :yum do
|
|
10
10
|
These options should be specified as an array where each element is either
|
11
11
|
a string or a hash."
|
12
12
|
|
13
|
-
has_feature :install_options, :versionable, :virtual_packages, :install_only
|
13
|
+
has_feature :install_options, :versionable, :virtual_packages, :install_only, :version_ranges
|
14
14
|
|
15
15
|
commands :cmd => "dnf", :rpm => "rpm"
|
16
16
|
|
@@ -16,7 +16,7 @@ Puppet::Type.type(:package).provide :yum, :parent => :rpm, :source => :rpm do
|
|
16
16
|
This provider supports the `install_options` attribute, which allows command-line flags to be passed to yum.
|
17
17
|
These options should be specified as an array where each element is either a string or a hash."
|
18
18
|
|
19
|
-
has_feature :install_options, :versionable, :virtual_packages, :install_only
|
19
|
+
has_feature :install_options, :versionable, :virtual_packages, :install_only, :version_ranges
|
20
20
|
|
21
21
|
RPM_VERSION = Puppet::Util::Package::Version::Rpm
|
22
22
|
RPM_VERSION_RANGE = Puppet::Util::Package::Version::Range
|
@@ -637,7 +637,7 @@ Puppet::Type.type(:user).provide :directoryservice do
|
|
637
637
|
def set_salted_sha512(users_plist, shadow_hash_data, value)
|
638
638
|
unless shadow_hash_data
|
639
639
|
shadow_hash_data = Hash.new
|
640
|
-
shadow_hash_data['SALTED-SHA512'] =
|
640
|
+
shadow_hash_data['SALTED-SHA512'] = ''.dup
|
641
641
|
end
|
642
642
|
shadow_hash_data['SALTED-SHA512'] = base64_decode_string(value)
|
643
643
|
binary_plist = self.class.convert_hash_to_binary(shadow_hash_data)
|
@@ -5,7 +5,7 @@ require_relative '../../puppet/file_serving/content'
|
|
5
5
|
require_relative '../../puppet/file_serving/metadata'
|
6
6
|
|
7
7
|
reference = Puppet::Util::Reference.newreference :indirection, :doc => "Indirection types and their terminus classes" do
|
8
|
-
text =
|
8
|
+
text = ''.dup
|
9
9
|
Puppet::Indirector::Indirection.instances.sort_by(&:to_s).each do |indirection|
|
10
10
|
ind = Puppet::Indirector::Indirection.instance(indirection)
|
11
11
|
name = indirection.to_s.capitalize
|
data/lib/puppet/reports.rb
CHANGED
@@ -71,7 +71,7 @@ class Puppet::Reports
|
|
71
71
|
# Collects the docs for all reports.
|
72
72
|
# @api private
|
73
73
|
def self.reportdocs
|
74
|
-
docs =
|
74
|
+
docs = ''.dup
|
75
75
|
|
76
76
|
# Use this method so they all get loaded
|
77
77
|
instance_loader(:report).loadall(Puppet.lookup(:current_environment))
|
@@ -4,7 +4,7 @@ module Puppet
|
|
4
4
|
|
5
5
|
Type.newtype(:filebucket) do
|
6
6
|
@doc = <<-EOT
|
7
|
-
A repository for storing and retrieving file content by
|
7
|
+
A repository for storing and retrieving file content by cryptographic checksum. Can
|
8
8
|
be local to each agent node, or centralized on a primary Puppet server. All
|
9
9
|
puppet servers provide a filebucket service that agent nodes can access
|
10
10
|
via HTTP, but you must declare a filebucket resource before any agents
|
data/lib/puppet/util/diff.rb
CHANGED
@@ -34,7 +34,7 @@ module Puppet::Util::Diff
|
|
34
34
|
data_old = data_old.split(/\n/).map! { |e| e.chomp }
|
35
35
|
data_new = data_new.split(/\n/).map! { |e| e.chomp }
|
36
36
|
|
37
|
-
output =
|
37
|
+
output = ''.dup
|
38
38
|
|
39
39
|
diffs = ::Diff::LCS.diff(data_old, data_new)
|
40
40
|
return output if diffs.empty?
|
@@ -162,7 +162,7 @@ module Puppet::Util::Execution
|
|
162
162
|
# do this after processing 'command' array or string
|
163
163
|
command_str = '[redacted]' if options[:sensitive]
|
164
164
|
|
165
|
-
user_log_s =
|
165
|
+
user_log_s = ''.dup
|
166
166
|
if options[:uid]
|
167
167
|
user_log_s << " uid=#{options[:uid]}"
|
168
168
|
end
|
@@ -202,7 +202,7 @@ module Puppet::Util::Execution
|
|
202
202
|
stderr = options[:combine] ? stdout : Puppet::FileSystem.open(null_file, nil, 'w')
|
203
203
|
|
204
204
|
exec_args = [command, options, stdin, stdout, stderr]
|
205
|
-
output =
|
205
|
+
output = ''.dup
|
206
206
|
|
207
207
|
# We close stdin/stdout/stderr immediately after fork/exec as they're no longer needed by
|
208
208
|
# this process. In most cases they could be closed later, but when `stdout` is the "writer"
|
@@ -223,8 +223,12 @@ module Puppet::Util::Execution
|
|
223
223
|
# Use non-blocking read to check for data. After each attempt,
|
224
224
|
# check whether the child is done. This is done in case the child
|
225
225
|
# forks and inherits stdout, as happens in `foo &`.
|
226
|
-
|
227
|
-
|
226
|
+
# If we encounter EOF, though, then switch to a blocking wait for
|
227
|
+
# the child; after EOF, IO.select will never block and the loop
|
228
|
+
# below will use maximum CPU available.
|
229
|
+
|
230
|
+
wait_flags = Process::WNOHANG
|
231
|
+
until results = Process.waitpid2(child_pid, wait_flags) #rubocop:disable Lint/AssignmentInCondition
|
228
232
|
|
229
233
|
# If not done, wait for data to read with a timeout
|
230
234
|
# This timeout is selected to keep activity low while waiting on
|
@@ -235,6 +239,7 @@ module Puppet::Util::Execution
|
|
235
239
|
output << reader.read_nonblock(4096) if ready
|
236
240
|
rescue Errno::EAGAIN
|
237
241
|
rescue EOFError
|
242
|
+
wait_flags = 0
|
238
243
|
end
|
239
244
|
end
|
240
245
|
|
data/lib/puppet/util/inifile.rb
CHANGED
@@ -79,7 +79,7 @@ module Puppet::Util::IniConfig
|
|
79
79
|
# written to file
|
80
80
|
def format
|
81
81
|
if @destroy
|
82
|
-
text =
|
82
|
+
text = ''.dup
|
83
83
|
else
|
84
84
|
text = "[#{name}]\n"
|
85
85
|
@entries.each do |entry|
|
@@ -208,7 +208,7 @@ module Puppet::Util::IniConfig
|
|
208
208
|
end
|
209
209
|
|
210
210
|
def format
|
211
|
-
text =
|
211
|
+
text = ''.dup
|
212
212
|
|
213
213
|
@contents.each do |content|
|
214
214
|
if content.is_a? Section
|
@@ -30,6 +30,24 @@ class Object
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
unless Dir.singleton_methods.include?(:exists?)
|
34
|
+
class Dir
|
35
|
+
def self.exists?(file_name)
|
36
|
+
warn("Dir.exists?('#{file_name}') is deprecated, use Dir.exist? instead") if $VERBOSE
|
37
|
+
Dir.exist?(file_name)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
unless File.singleton_methods.include?(:exists?)
|
43
|
+
class File
|
44
|
+
def self.exists?(file_name)
|
45
|
+
warn("File.exists?('#{file_name}') is deprecated, use File.exist? instead") if $VERBOSE
|
46
|
+
File.exist?(file_name)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
33
51
|
require_relative '../../puppet/ssl/openssl_loader'
|
34
52
|
unless Puppet::Util::Platform.jruby_fips?
|
35
53
|
class OpenSSL::SSL::SSLContext
|
@@ -76,7 +76,7 @@ module Puppet::Util::ProviderFeatures
|
|
76
76
|
|
77
77
|
# @return [String] Returns a string with documentation covering all features.
|
78
78
|
def featuredocs
|
79
|
-
str =
|
79
|
+
str = ''.dup
|
80
80
|
@features ||= {}
|
81
81
|
return nil if @features.empty?
|
82
82
|
names = @features.keys.sort_by(&:to_s)
|
data/lib/puppet/util/selinux.rb
CHANGED
@@ -227,7 +227,7 @@ module Puppet::Util::SELinux
|
|
227
227
|
|
228
228
|
# Internal helper function to read and parse /proc/mounts
|
229
229
|
def read_mounts
|
230
|
-
mounts =
|
230
|
+
mounts = ''.dup
|
231
231
|
begin
|
232
232
|
if File.method_defined? "read_nonblock"
|
233
233
|
# If possible we use read_nonblock in a loop rather than read to work-
|
@@ -176,6 +176,13 @@ module Puppet::Util::Windows::ADSI
|
|
176
176
|
sids = []
|
177
177
|
adsi_child_collection.each do |m|
|
178
178
|
sids << Puppet::Util::Windows::SID.ads_to_principal(m)
|
179
|
+
rescue Puppet::Util::Windows::Error => e
|
180
|
+
case e.code
|
181
|
+
when Puppet::Util::Windows::SID::ERROR_TRUSTED_RELATIONSHIP_FAILURE, Puppet::Util::Windows::SID::ERROR_TRUSTED_DOMAIN_FAILURE
|
182
|
+
sids << Puppet::Util::Windows::SID.unresolved_principal(m.name, m.sid)
|
183
|
+
else
|
184
|
+
raise e
|
185
|
+
end
|
179
186
|
end
|
180
187
|
|
181
188
|
sids
|
@@ -488,7 +495,7 @@ module Puppet::Util::Windows::ADSI
|
|
488
495
|
# UNLEN from lmcons.h - https://stackoverflow.com/a/2155176
|
489
496
|
MAX_USERNAME_LENGTH = 256
|
490
497
|
def self.current_user_name
|
491
|
-
user_name =
|
498
|
+
user_name = ''.dup
|
492
499
|
max_length = MAX_USERNAME_LENGTH + 1 # NULL terminated
|
493
500
|
FFI::MemoryPointer.new(max_length * 2) do |buffer| # wide string
|
494
501
|
FFI::MemoryPointer.new(:dword, 1) do |buffer_size|
|
@@ -520,7 +527,7 @@ module Puppet::Util::Windows::ADSI
|
|
520
527
|
NameSurname = 14
|
521
528
|
|
522
529
|
def self.current_user_name_with_format(format)
|
523
|
-
user_name =
|
530
|
+
user_name = ''.dup
|
524
531
|
max_length = 1024
|
525
532
|
|
526
533
|
FFI::MemoryPointer.new(:lpwstr, max_length * 2 + 1) do |buffer|
|
@@ -32,7 +32,7 @@ class Puppet::Util::Windows::Error < Puppet::Error
|
|
32
32
|
FORMAT_MESSAGE_ARGUMENT_ARRAY |
|
33
33
|
FORMAT_MESSAGE_IGNORE_INSERTS |
|
34
34
|
FORMAT_MESSAGE_MAX_WIDTH_MASK
|
35
|
-
error_string =
|
35
|
+
error_string = ''.dup
|
36
36
|
|
37
37
|
# this pointer actually points to a :lpwstr (pointer) since we're letting Windows allocate for us
|
38
38
|
FFI::MemoryPointer.new(:pointer, 1) do |buffer_ptr|
|
@@ -245,7 +245,7 @@ module Puppet::Util::Windows::File
|
|
245
245
|
module_function :readlink
|
246
246
|
|
247
247
|
def get_long_pathname(path)
|
248
|
-
converted =
|
248
|
+
converted = ''.dup
|
249
249
|
FFI::Pointer.from_string_to_wide_string(path) do |path_ptr|
|
250
250
|
# includes terminating NULL
|
251
251
|
buffer_size = GetLongPathNameW(path_ptr, FFI::Pointer::NULL, 0)
|
@@ -263,7 +263,7 @@ module Puppet::Util::Windows::File
|
|
263
263
|
module_function :get_long_pathname
|
264
264
|
|
265
265
|
def get_short_pathname(path)
|
266
|
-
converted =
|
266
|
+
converted = ''.dup
|
267
267
|
FFI::Pointer.from_string_to_wide_string(path) do |path_ptr|
|
268
268
|
# includes terminating NULL
|
269
269
|
buffer_size = GetShortPathNameW(path_ptr, FFI::Pointer::NULL, 0)
|
@@ -121,7 +121,7 @@ module Puppet::Util::Windows::Process
|
|
121
121
|
module_function :with_process_token
|
122
122
|
|
123
123
|
def get_process_image_name_by_pid(pid)
|
124
|
-
image_name =
|
124
|
+
image_name = ''.dup
|
125
125
|
|
126
126
|
Puppet::Util::Windows::Security.with_privilege(Puppet::Util::Windows::Security::SE_DEBUG_NAME) do
|
127
127
|
open_process(PROCESS_QUERY_INFORMATION, false, pid) do |phandle|
|
@@ -7,8 +7,10 @@ module Puppet::Util::Windows
|
|
7
7
|
extend FFI::Library
|
8
8
|
|
9
9
|
# missing from Windows::Error
|
10
|
-
ERROR_NONE_MAPPED
|
11
|
-
ERROR_INVALID_SID_STRUCTURE
|
10
|
+
ERROR_NONE_MAPPED = 1332
|
11
|
+
ERROR_INVALID_SID_STRUCTURE = 1337
|
12
|
+
ERROR_TRUSTED_DOMAIN_FAILURE = 1788
|
13
|
+
ERROR_TRUSTED_RELATIONSHIP_FAILURE = 1789
|
12
14
|
|
13
15
|
# Well Known SIDs
|
14
16
|
Null = 'S-1-0'
|
data/lib/puppet/util.rb
CHANGED
@@ -409,8 +409,7 @@ module Util
|
|
409
409
|
def uri_encode(path, opts = { :allow_fragment => false })
|
410
410
|
raise ArgumentError.new(_('path may not be nil')) if path.nil?
|
411
411
|
|
412
|
-
|
413
|
-
encoded = String.new.encode!(Encoding::UTF_8)
|
412
|
+
encoded = ''.dup
|
414
413
|
|
415
414
|
# parse uri into named matches, then reassemble properly encoded
|
416
415
|
parts = path.match(RFC_3986_URI_REGEX)
|
@@ -454,7 +453,7 @@ module Util
|
|
454
453
|
|
455
454
|
def rfc2396_escape(str)
|
456
455
|
str.gsub(UNSAFE) do |match|
|
457
|
-
tmp =
|
456
|
+
tmp = ''.dup
|
458
457
|
match.each_byte do |uc|
|
459
458
|
tmp << sprintf('%%%02X', uc)
|
460
459
|
end
|
data/lib/puppet/version.rb
CHANGED
@@ -376,13 +376,17 @@ class Puppet::X509::CertProvider
|
|
376
376
|
OpenSSL::X509::Request.new(pem)
|
377
377
|
end
|
378
378
|
|
379
|
-
|
380
|
-
|
379
|
+
# Return the path to the cert related object (key, CSR, cert, etc).
|
380
|
+
#
|
381
|
+
# @param base [String] base directory
|
382
|
+
# @param name [String] the name associated with the cert related object
|
381
383
|
def to_path(base, name)
|
382
384
|
raise _("Certname %{name} must not contain unprintable or non-ASCII characters") % { name: name.inspect } unless name =~ VALID_CERTNAME
|
383
385
|
File.join(base, "#{name.downcase}.pem")
|
384
386
|
end
|
385
387
|
|
388
|
+
private
|
389
|
+
|
386
390
|
def permissions_for_setting(name)
|
387
391
|
setting = Puppet.settings.setting(name)
|
388
392
|
perm = { mode: setting.mode.to_i(8) }
|