puppet 6.0.9 → 6.0.10

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.

Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +16 -16
  3. data/lib/hiera/scope.rb +7 -0
  4. data/lib/puppet.rb +1 -1
  5. data/lib/puppet/application/device.rb +13 -3
  6. data/lib/puppet/application/ssl.rb +2 -0
  7. data/lib/puppet/configurer.rb +1 -1
  8. data/lib/puppet/network/http/connection.rb +2 -0
  9. data/lib/puppet/network/http/factory.rb +5 -0
  10. data/lib/puppet/pops/types/types.rb +5 -3
  11. data/lib/puppet/provider.rb +1 -2
  12. data/lib/puppet/provider/package.rb +2 -0
  13. data/lib/puppet/provider/package/dpkg.rb +15 -2
  14. data/lib/puppet/provider/package/gem.rb +65 -29
  15. data/lib/puppet/provider/package/pip.rb +135 -111
  16. data/lib/puppet/provider/package/pip3.rb +1 -1
  17. data/lib/puppet/provider/package/puppet_gem.rb +1 -1
  18. data/lib/puppet/provider/package/rpm.rb +27 -16
  19. data/lib/puppet/provider/package/yum.rb +2 -1
  20. data/lib/puppet/provider/package_targetable.rb +68 -0
  21. data/lib/puppet/provider/service/upstart.rb +5 -3
  22. data/lib/puppet/provider/user/useradd.rb +16 -13
  23. data/lib/puppet/settings/server_list_setting.rb +9 -0
  24. data/lib/puppet/ssl/host.rb +0 -11
  25. data/lib/puppet/ssl/validator/default_validator.rb +31 -0
  26. data/lib/puppet/type/package.rb +46 -9
  27. data/lib/puppet/util/pidlock.rb +3 -2
  28. data/lib/puppet/util/windows/process.rb +8 -8
  29. data/lib/puppet/util/windows/registry.rb +7 -1
  30. data/lib/puppet/util/windows/user.rb +14 -4
  31. data/lib/puppet/version.rb +1 -1
  32. data/locales/puppet.pot +83 -79
  33. data/man/man5/puppet.conf.5 +2 -2
  34. data/man/man8/puppet-agent.8 +1 -1
  35. data/man/man8/puppet-apply.8 +1 -1
  36. data/man/man8/puppet-catalog.8 +1 -1
  37. data/man/man8/puppet-config.8 +1 -1
  38. data/man/man8/puppet-describe.8 +1 -1
  39. data/man/man8/puppet-device.8 +1 -1
  40. data/man/man8/puppet-doc.8 +1 -1
  41. data/man/man8/puppet-epp.8 +1 -1
  42. data/man/man8/puppet-facts.8 +1 -1
  43. data/man/man8/puppet-filebucket.8 +1 -1
  44. data/man/man8/puppet-generate.8 +1 -1
  45. data/man/man8/puppet-help.8 +1 -1
  46. data/man/man8/puppet-key.8 +1 -1
  47. data/man/man8/puppet-lookup.8 +1 -1
  48. data/man/man8/puppet-man.8 +1 -1
  49. data/man/man8/puppet-module.8 +1 -1
  50. data/man/man8/puppet-node.8 +1 -1
  51. data/man/man8/puppet-parser.8 +1 -1
  52. data/man/man8/puppet-plugin.8 +1 -1
  53. data/man/man8/puppet-report.8 +1 -1
  54. data/man/man8/puppet-resource.8 +1 -1
  55. data/man/man8/puppet-script.8 +1 -1
  56. data/man/man8/puppet-ssl.8 +1 -1
  57. data/man/man8/puppet-status.8 +1 -1
  58. data/man/man8/puppet.8 +2 -2
  59. data/spec/integration/network/http_pool_spec.rb +120 -0
  60. data/spec/integration/type/package_spec.rb +1 -1
  61. data/spec/integration/util/windows/registry_spec.rb +52 -0
  62. data/spec/integration/util/windows/user_spec.rb +19 -0
  63. data/spec/lib/puppet_spec/https.rb +166 -0
  64. data/spec/unit/application/ssl_spec.rb +5 -0
  65. data/spec/unit/configurer_spec.rb +1 -1
  66. data/spec/unit/functions/new_spec.rb +15 -0
  67. data/spec/unit/hiera/scope_spec.rb +7 -0
  68. data/spec/unit/indirector/resource/ral_spec.rb +1 -0
  69. data/spec/unit/network/http/connection_spec.rb +0 -96
  70. data/spec/unit/network/http/factory_spec.rb +6 -0
  71. data/spec/unit/provider/package/dpkg_spec.rb +18 -1
  72. data/spec/unit/provider/package/gem_spec.rb +101 -48
  73. data/spec/unit/provider/package/pip3_spec.rb +17 -0
  74. data/spec/unit/provider/package/pip_spec.rb +57 -67
  75. data/spec/unit/provider/package/puppet_gem_spec.rb +22 -6
  76. data/spec/unit/provider/package/rpm_spec.rb +116 -27
  77. data/spec/unit/provider/service/upstart_spec.rb +3 -22
  78. data/spec/unit/settings/server_list_setting_spec.rb +21 -0
  79. data/spec/unit/ssl/validator_spec.rb +2 -0
  80. data/spec/unit/util/pidlock_spec.rb +26 -0
  81. metadata +9 -5
  82. data/lib/puppet/rest/client.rb +0 -83
  83. data/spec/unit/rest/client_spec.rb +0 -166
@@ -28,14 +28,16 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
28
28
  # We only want to use upstart as our provider if the upstart daemon is running.
29
29
  # This can be checked by running `initctl version --quiet` on a machine that has
30
30
  # upstart installed.
31
- confine :true => lambda {
31
+ confine :true => lambda { has_initctl? }
32
+
33
+ def self.has_initctl?
32
34
  # Puppet::Util::Execution.execute does not currently work on jRuby.
33
35
  # Unfortunately, since this confine is invoked whenever we check for
34
36
  # provider suitability and since provider suitability is still checked
35
37
  # on the master, this confine will still be invoked on the master. Thus
36
38
  # to avoid raising an exception, we do an early return if we're running
37
39
  # on jRuby.
38
- next false if Puppet::Util::Platform.jruby?
40
+ return false if Puppet::Util::Platform.jruby?
39
41
 
40
42
  begin
41
43
  initctl('version', '--quiet')
@@ -43,7 +45,7 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
43
45
  rescue
44
46
  false
45
47
  end
46
- }
48
+ end
47
49
 
48
50
  # upstart developer haven't implemented initctl enable/disable yet:
49
51
  # http://www.linuxplanet.com/linuxplanet/tutorials/7033/2/
@@ -105,11 +105,11 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
105
105
  # because by default duplicates are allowed. This check is
106
106
  # to ensure consistent behaviour of the useradd provider when
107
107
  # using both useradd and luseradd
108
- if not @resource.allowdupe? and @resource.forcelocal?
109
- if @resource.should(:uid) and finduser('uid', @resource.should(:uid).to_s)
108
+ if (!@resource.allowdupe?) && @resource.forcelocal?
109
+ if @resource.should(:uid) && finduser('uid', @resource.should(:uid).to_s)
110
110
  raise(Puppet::Error, "UID #{@resource.should(:uid).to_s} already exists, use allowdupe to force user creation")
111
111
  end
112
- elsif @resource.allowdupe? and not @resource.forcelocal?
112
+ elsif @resource.allowdupe? && (!@resource.forcelocal?)
113
113
  return ["-o"]
114
114
  end
115
115
  []
@@ -126,16 +126,16 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
126
126
 
127
127
  def check_manage_home
128
128
  cmd = []
129
- if @resource.managehome? and not @resource.forcelocal?
129
+ if @resource.managehome? && (!@resource.forcelocal?)
130
130
  cmd << "-m"
131
- elsif not @resource.managehome? and Facter.value(:osfamily) == 'RedHat'
131
+ elsif (!@resource.managehome?) && Facter.value(:osfamily) == 'RedHat'
132
132
  cmd << "-M"
133
133
  end
134
134
  cmd
135
135
  end
136
136
 
137
137
  def check_system_users
138
- if self.class.system_users? and resource.system?
138
+ if self.class.system_users? && resource.system?
139
139
  ["-r"]
140
140
  else
141
141
  []
@@ -149,11 +149,11 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
149
149
  Puppet::Type.type(:user).validproperties.sort.each do |property|
150
150
  next if property == :ensure
151
151
  next if property_manages_password_age?(property)
152
- next if property == :groups and @resource.forcelocal?
153
- next if property == :expiry and @resource.forcelocal?
152
+ next if (property == :groups) && @resource.forcelocal?
153
+ next if (property == :expiry) && @resource.forcelocal?
154
154
  # the value needs to be quoted, mostly because -c might
155
155
  # have spaces in it
156
- if value = @resource.should(property) and value != ""
156
+ if (value = @resource.should(property)) && (value != "")
157
157
  cmd << flag(property) << munge(property, value)
158
158
  end
159
159
  end
@@ -167,7 +167,7 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
167
167
  else
168
168
  cmd = [command(:add)]
169
169
  end
170
- if not @resource.should(:gid) and Puppet::Util.gid(@resource[:name])
170
+ if (!@resource.should(:gid)) && Puppet::Util.gid(@resource[:name])
171
171
  cmd += ["-g", @resource[:name]]
172
172
  end
173
173
  cmd += add_properties
@@ -203,7 +203,10 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
203
203
  else
204
204
  cmd = [command(:delete)]
205
205
  end
206
- cmd += @resource.managehome? ? ['-r'] : []
206
+ # Solaris `userdel -r` will fail if the homedir does not exist.
207
+ if @resource.managehome? && (('Solaris' != Facter.value(:operatingsystem)) || Dir.exist?(Dir.home(@resource[:name])))
208
+ cmd << '-r'
209
+ end
207
210
  cmd << @resource[:name]
208
211
  end
209
212
 
@@ -239,10 +242,10 @@ Puppet::Type.type(:user).provide :useradd, :parent => Puppet::Provider::NameServ
239
242
  check_valid_shell
240
243
  end
241
244
  super
242
- if @resource.forcelocal? and self.groups?
245
+ if @resource.forcelocal? && self.groups?
243
246
  set(:groups, @resource[:groups])
244
247
  end
245
- if @resource.forcelocal? and @resource[:expiry]
248
+ if @resource.forcelocal? && @resource[:expiry]
246
249
  set(:expiry, @resource[:expiry])
247
250
  end
248
251
  end
@@ -4,6 +4,15 @@ class Puppet::Settings::ServerListSetting < Puppet::Settings::ArraySetting
4
4
  :server_list
5
5
  end
6
6
 
7
+ def print(value)
8
+ if value.is_a?(Array)
9
+ #turn into a string
10
+ value.map {|item| item.join(":") }.join(",")
11
+ else
12
+ value
13
+ end
14
+ end
15
+
7
16
  def munge(value)
8
17
  servers = super
9
18
  servers.map! { |server|
@@ -6,13 +6,6 @@ require 'puppet/ssl/certificate_request_attributes'
6
6
  require 'puppet/rest/errors'
7
7
  require 'puppet/rest/routes'
8
8
  require 'puppet/rest/ssl_context'
9
- begin
10
- # This may fail when being loaded from Puppet Server. However loading the
11
- # client monkey patches the SSL Store and we need to have those monkey
12
- # patches in as soon as possible on the agent.
13
- require 'puppet/rest/client'
14
- rescue LoadError
15
- end
16
9
 
17
10
  # The class that manages all aspects of our SSL certificates --
18
11
  # private keys, public keys, requests, etc.
@@ -123,10 +116,6 @@ class Puppet::SSL::Host
123
116
  true
124
117
  end
125
118
 
126
- def http_client(ssl_context)
127
- Puppet::Rest::Client.new(ssl_context: ssl_context)
128
- end
129
-
130
119
  def certificate
131
120
  unless @certificate
132
121
  generate_key unless key
@@ -9,6 +9,7 @@ require 'puppet/ssl'
9
9
  class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
10
10
  attr_reader :peer_certs
11
11
  attr_reader :verify_errors
12
+ attr_reader :last_error
12
13
 
13
14
  FIVE_MINUTES_AS_SECONDS = 5 * 60
14
15
 
@@ -33,6 +34,8 @@ class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
33
34
  def reset!
34
35
  @peer_certs = []
35
36
  @verify_errors = []
37
+ @hostname = nil
38
+ @last_error = nil
36
39
  end
37
40
 
38
41
  # Performs verification of the SSL connection and collection of the
@@ -78,6 +81,32 @@ class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
78
81
  error_string = store_context.error_string || "OpenSSL error #{error}"
79
82
 
80
83
  case error
84
+ when OpenSSL::X509::V_OK
85
+ if @hostname
86
+ # chain is from leaf to root, opposite of the order that `call` is invoked
87
+ chain_cert = store_context.chain.first
88
+ peer_cert = @peer_certs.last
89
+
90
+ # ruby 2.4 doesn't compare certs based on value, so force to DER byte array
91
+ if peer_cert && chain_cert && peer_cert.to_der == chain_cert.to_der && !OpenSSL::SSL.verify_certificate_identity(peer_cert, @hostname)
92
+ valid_certnames = [peer_cert.subject.to_s.sub(/.*=/, ''),
93
+ *Puppet::SSL::Certificate.subject_alt_names_for(peer_cert)].uniq
94
+ if valid_certnames.size > 1
95
+ expected_certnames = _("expected one of %{certnames}") % { certnames: valid_certnames.join(', ') }
96
+ else
97
+ expected_certnames = _("expected %{certname}") % { certname: valid_certnames.first }
98
+ end
99
+
100
+ msg = _("Server hostname '%{host}' did not match server certificate; %{expected_certnames}") % { host: @hostname, expected_certnames: expected_certnames }
101
+ @last_error = Puppet::Error.new(msg)
102
+ return false
103
+ else
104
+ @verify_errors << "#{error_string} for #{current_cert.subject}"
105
+ end
106
+ else
107
+ @verify_errors << "#{error_string} for #{current_cert.subject}"
108
+ end
109
+
81
110
  when OpenSSL::X509::V_ERR_CRL_NOT_YET_VALID
82
111
  # current_crl can be nil
83
112
  # https://github.com/ruby/ruby/blob/ruby_1_9_3/ext/openssl/ossl_x509store.c#L501-L510
@@ -112,6 +141,8 @@ class Puppet::SSL::Validator::DefaultValidator #< class Puppet::SSL::Validator
112
141
  # @api private
113
142
  #
114
143
  def setup_connection(connection, ssl_host = Puppet.lookup(:ssl_host))
144
+ @hostname = connection.address
145
+
115
146
  if ssl_certificates_are_present?
116
147
  connection.cert_store = ssl_host.ssl_store
117
148
  connection.ca_file = @ca_path
@@ -20,8 +20,8 @@ module Puppet
20
20
  requires in order to function, and you must meet those requirements
21
21
  to use a given provider.
22
22
 
23
- You can declare multiple package resources with the same `name`, as long
24
- as they specify different providers and have unique titles.
23
+ You can declare multiple package resources with the same `name` as long
24
+ as they have unique titles, and specify different providers and commands.
25
25
 
26
26
  Note that you must use the _title_ to make a reference to a package
27
27
  resource; `Package[<NAME>]` is not a synonym for `Package[<TITLE>]` like
@@ -66,6 +66,8 @@ module Puppet
66
66
  :methods => [:package_settings_insync?, :package_settings, :package_settings=]
67
67
  feature :virtual_packages, "The provider accepts virtual package names for install and uninstall."
68
68
 
69
+ feature :targetable, "The provider accepts a targeted package management command."
70
+
69
71
  ensurable do
70
72
  desc <<-EOT
71
73
  What state the package should be in. On packaging systems that can
@@ -271,20 +273,55 @@ module Puppet
271
273
  providify
272
274
  paramclass(:provider).isnamevar
273
275
 
274
- # We have more than one namevar, so we need title_patterns. However, we
275
- # cheat and set the patterns to map to name only and completely ignore
276
- # provider. So far, the logic that determines uniqueness appears to just
277
- # "Do The Right Thing™" when the provider is explicitly set by the user.
276
+ # Specify a targeted package management command.
277
+ newparam(:command, :required_features => :targetable) do
278
+ desc <<-EOT
279
+ The targeted command to use when managing a package:
280
+
281
+ package { 'mysql':
282
+ provider => gem,
283
+ }
284
+
285
+ package { 'mysql-opt':
286
+ name => 'mysql',
287
+ provider => gem,
288
+ command => '/opt/ruby/bin/gem',
289
+ }
290
+
291
+ Each provider defines a package management command; and uses the first
292
+ instance of the command found in the PATH.
293
+
294
+ Providers supporting the targetable feature allow you to specify the
295
+ absolute path of the package management command; useful when multiple
296
+ instances of the command are installed, or the command is not in the PATH.
297
+ EOT
298
+
299
+ isnamevar
300
+ defaultto :default
301
+ end
302
+
303
+ # We have more than one namevar, so we need title_patterns.
304
+ # However, we cheat and set the patterns to map to name only
305
+ # and completely ignore provider (and command, for targetable providers).
306
+ # So far, the logic that determines uniqueness appears to just
307
+ # "Do The Right Thing™" when provider (and command) are explicitly set.
278
308
  #
279
309
  # The following resources will be seen as unique by puppet:
280
310
  #
281
311
  # # Uniqueness Key: ['mysql', nil]
282
- # package{'mysql': }
312
+ # package {'mysql': }
313
+ #
314
+ # # Uniqueness Key: ['mysql', 'gem', nil]
315
+ # package {'gem-mysql':
316
+ # name => 'mysql,
317
+ # provider => gem,
318
+ # }
283
319
  #
284
- # # Uniqueness Key: ['mysql', 'gem']
285
- # package{'gem-mysql':
320
+ # # Uniqueness Key: ['mysql', 'gem', '/opt/ruby/bin/gem']
321
+ # package {'gem-mysql-opt':
286
322
  # name => 'mysql,
287
323
  # provider => gem
324
+ # command => '/opt/ruby/bin/gem',
288
325
  # }
289
326
  #
290
327
  # This does not handle the case where providers like 'yum' and 'rpm' should
@@ -62,12 +62,13 @@ class Puppet::Util::Pidlock
62
62
  # POSIX and Windows platforms (PUP-9247).
63
63
  if Puppet.features.posix?
64
64
  procname = Puppet::Util::Execution.execute(["ps", "-p", lock_pid, "-o", "comm="]).strip
65
- @lockfile.unlock unless procname =~ /puppet(-.*)?$/
65
+ args = Puppet::Util::Execution.execute(["ps", "-p", lock_pid, "-o", "args="]).strip
66
+ @lockfile.unlock unless procname =~ /ruby/ && args =~ /puppet/ || procname =~ /puppet(-.*)?$/
66
67
  elsif Puppet.features.microsoft_windows?
67
68
  # On Windows, we're checking if the filesystem path name of the running
68
69
  # process is our vendored ruby:
69
70
  exe_path = Puppet::Util::Windows::Process::get_process_image_name_by_pid(lock_pid)
70
- @lockfile.unlock unless exe_path =~ /Puppet\\puppet\\bin\\ruby.exe/
71
+ @lockfile.unlock unless exe_path =~ /\\bin\\ruby.exe$/
71
72
  end
72
73
  end
73
74
  private :clear_if_stale
@@ -122,21 +122,21 @@ module Puppet::Util::Windows::Process
122
122
  def get_process_image_name_by_pid(pid)
123
123
  image_name = ""
124
124
 
125
- open_process(PROCESS_QUERY_INFORMATION, false, pid) do |phandle|
125
+ open_process(PROCESS_QUERY_INFORMATION, false, pid) do |phandle|
126
126
 
127
- FFI::MemoryPointer.new(:dword, 1) do |exe_name_length_ptr|
128
- # Add 1 for the null terminator, and UTF is 2 bytes/char:
129
- max_path_length = (MAX_PATH_LENGTH + 1) * 2
130
- exe_name_length_ptr.write_dword(max_path_length)
131
- FFI::MemoryPointer.new(max_path_length) do |exe_name_ptr|
127
+ FFI::MemoryPointer.new(:dword, 1) do |exe_name_length_ptr|
128
+ # UTF is 2 bytes/char:
129
+ max_chars = MAX_PATH_LENGTH + 1
130
+ exe_name_length_ptr.write_dword(max_chars)
131
+ FFI::MemoryPointer.new(:wchar, max_chars) do |exe_name_ptr|
132
132
  use_win32_path_format = 0
133
133
  result = QueryFullProcessImageNameW(phandle, use_win32_path_format, exe_name_ptr, exe_name_length_ptr)
134
134
  if result == FFI::WIN32_FALSE
135
135
  raise Puppet::Util::Windows::Error.new(
136
136
  "QueryFullProcessImageNameW(phandle, #{use_win32_path_format}, " +
137
- "exe_name_ptr, #{max_path_length}")
137
+ "exe_name_ptr, #{max_chars}")
138
138
  end
139
- image_name = exe_name_ptr.read_wide_string(MAX_PATH_LENGTH + 1)
139
+ image_name = exe_name_ptr.read_wide_string(exe_name_length_ptr.read_dword)
140
140
  end
141
141
  end
142
142
  end
@@ -232,7 +232,7 @@ module Puppet::Util::Windows
232
232
  begin
233
233
  case type
234
234
  when Win32::Registry::REG_SZ, Win32::Registry::REG_EXPAND_SZ
235
- result = [ type, data_ptr.read_wide_string(string_length) ]
235
+ result = [ type, sanitize(data_ptr.read_wide_string(string_length)) ]
236
236
  when Win32::Registry::REG_MULTI_SZ
237
237
  result = [ type, data_ptr.read_wide_string(string_length).split(/\0/) ]
238
238
  when Win32::Registry::REG_BINARY
@@ -312,6 +312,12 @@ module Puppet::Util::Windows
312
312
  result
313
313
  end
314
314
 
315
+ def sanitize(value)
316
+ # Replace null bytes with a space
317
+ value.gsub!("\x00", ' ')
318
+ value
319
+ end
320
+
315
321
  ffi_convention :stdcall
316
322
 
317
323
  # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724862(v=vs.85).aspx
@@ -75,15 +75,18 @@ module Puppet::Util::Windows::User
75
75
  module_function :password_is?
76
76
 
77
77
  def logon_user(name, password, &block)
78
- fLOGON32_LOGON_NETWORK = 3
79
78
  fLOGON32_PROVIDER_DEFAULT = 0
79
+ fLOGON32_LOGON_INTERACTIVE = 2
80
+ fLOGON32_LOGON_NETWORK = 3
80
81
 
81
82
  token = nil
82
83
  begin
83
84
  FFI::MemoryPointer.new(:handle, 1) do |token_pointer|
84
- if LogonUserW(wide_string(name), wide_string('.'), password.nil? ? FFI::Pointer::NULL : wide_string(password),
85
- fLOGON32_LOGON_NETWORK, fLOGON32_PROVIDER_DEFAULT, token_pointer) == FFI::WIN32_FALSE
86
- raise Puppet::Util::Windows::Error.new(_("Failed to logon user %{name}") % { name: name.inspect })
85
+ #try logon using network else try logon using interactive mode
86
+ if logon_user_by_logon_type(name, password, fLOGON32_LOGON_NETWORK, fLOGON32_PROVIDER_DEFAULT, token_pointer) == FFI::WIN32_FALSE
87
+ if logon_user_by_logon_type(name, password, fLOGON32_LOGON_INTERACTIVE, fLOGON32_PROVIDER_DEFAULT, token_pointer) == FFI::WIN32_FALSE
88
+ raise Puppet::Util::Windows::Error.new(_("Failed to logon user %{name}") % {name: name.inspect})
89
+ end
87
90
  end
88
91
 
89
92
  yield token = token_pointer.read_handle
@@ -95,8 +98,15 @@ module Puppet::Util::Windows::User
95
98
  # token has been closed by this point
96
99
  true
97
100
  end
101
+
98
102
  module_function :logon_user
99
103
 
104
+ def self.logon_user_by_logon_type(name, password, logon_type, logon_provider, token)
105
+ LogonUserW(wide_string(name), wide_string('.'), password.nil? ? FFI::Pointer::NULL : wide_string(password), logon_type, logon_provider, token)
106
+ end
107
+
108
+ private_class_method :logon_user_by_logon_type
109
+
100
110
  def load_profile(user, password)
101
111
  logon_user(user, password) do |token|
102
112
  FFI::MemoryPointer.from_string_to_wide_string(user) do |lpUserName|
@@ -6,7 +6,7 @@
6
6
  # Raketasks and such to set the version based on the output of `git describe`
7
7
 
8
8
  module Puppet
9
- PUPPETVERSION = '6.0.9'
9
+ PUPPETVERSION = '6.0.10'
10
10
 
11
11
  ##
12
12
  # version is a public API method intended to always provide a fast and
@@ -6,11 +6,11 @@
6
6
  #, fuzzy
7
7
  msgid ""
8
8
  msgstr ""
9
- "Project-Id-Version: Puppet automation framework 6.0.7-36-gaf24bc1\n"
9
+ "Project-Id-Version: Puppet automation framework 6.0.9-65-gc4f22cb\n"
10
10
  "\n"
11
11
  "Report-Msgid-Bugs-To: https://tickets.puppetlabs.com\n"
12
- "POT-Creation-Date: 2019-04-02 23:22+0000\n"
13
- "PO-Revision-Date: 2019-04-02 23:22+0000\n"
12
+ "POT-Creation-Date: 2019-05-28 23:50+0000\n"
13
+ "PO-Revision-Date: 2019-05-28 23:50+0000\n"
14
14
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
15
15
  "Language-Team: LANGUAGE <LL@li.org>\n"
16
16
  "Language: \n"
@@ -28,11 +28,11 @@ msgstr ""
28
28
  msgid "See https://puppet.com/docs/puppet/%{minor_version}/deprecated_language.html"
29
29
  msgstr ""
30
30
 
31
- #: ../lib/hiera/scope.rb:43 ../lib/puppet/parser/scope.rb:535
31
+ #: ../lib/hiera/scope.rb:46 ../lib/puppet/parser/scope.rb:535
32
32
  msgid "Variable: %{name}"
33
33
  msgstr ""
34
34
 
35
- #: ../lib/hiera/scope.rb:44 ../lib/hiera/scope.rb:46 ../lib/puppet/parser/scope.rb:536 ../lib/puppet/parser/scope.rb:538
35
+ #: ../lib/hiera/scope.rb:47 ../lib/hiera/scope.rb:49 ../lib/puppet/parser/scope.rb:536 ../lib/puppet/parser/scope.rb:538
36
36
  msgid "Undefined variable '%{name}'; %{reason}"
37
37
  msgstr ""
38
38
 
@@ -48,10 +48,6 @@ msgstr ""
48
48
  msgid "Config file %{hiera_config} not found, using Hiera defaults"
49
49
  msgstr ""
50
50
 
51
- #: ../lib/puppet.rb:4
52
- msgid "Puppet %{version} requires ruby 2.3.0 or greater."
53
- msgstr ""
54
-
55
51
  #: ../lib/puppet.rb:130
56
52
  msgid "Support for ruby version %{version} is deprecated and will be removed in a future release. See https://puppet.com/docs/puppet/latest/system_requirements.html for a list of supported ruby versions."
57
53
  msgstr ""
@@ -266,23 +262,23 @@ msgstr ""
266
262
  msgid "No device found in %{config}"
267
263
  msgstr ""
268
264
 
269
- #: ../lib/puppet/application/device.rb:287
265
+ #: ../lib/puppet/application/device.rb:304
270
266
  msgid "retrieving resource: %{resource} from %{target} at %{scheme}%{url_host}%{port}%{url_path}"
271
267
  msgstr ""
272
268
 
273
- #: ../lib/puppet/application/device.rb:302
269
+ #: ../lib/puppet/application/device.rb:319
274
270
  msgid "retrieving facts from %{target} at %{scheme}%{url_host}%{port}%{url_path}"
275
271
  msgstr ""
276
272
 
277
- #: ../lib/puppet/application/device.rb:327
273
+ #: ../lib/puppet/application/device.rb:342
278
274
  msgid "starting applying configuration to %{target} at %{scheme}%{url_host}%{port}%{url_path}"
279
275
  msgstr ""
280
276
 
281
- #: ../lib/puppet/application/device.rb:360 ../lib/puppet/application/resource.rb:196
277
+ #: ../lib/puppet/application/device.rb:380 ../lib/puppet/application/resource.rb:196
282
278
  msgid "You must specify the type to display"
283
279
  msgstr ""
284
280
 
285
- #: ../lib/puppet/application/device.rb:361 ../lib/puppet/application/resource.rb:197
281
+ #: ../lib/puppet/application/device.rb:381 ../lib/puppet/application/resource.rb:197
286
282
  msgid "Could not find type %{type}"
287
283
  msgstr ""
288
284
 
@@ -6127,65 +6123,65 @@ msgstr ""
6127
6123
  msgid "Unknown type <%{type}>"
6128
6124
  msgstr ""
6129
6125
 
6130
- #: ../lib/puppet/pops/types/types.rb:928
6126
+ #: ../lib/puppet/pops/types/types.rb:930
6131
6127
  msgid "The string '%{str}' cannot be converted to Numeric"
6132
6128
  msgstr ""
6133
6129
 
6134
- #: ../lib/puppet/pops/types/types.rb:931
6130
+ #: ../lib/puppet/pops/types/types.rb:933
6135
6131
  msgid "Value of type %{type} cannot be converted to Numeric"
6136
6132
  msgstr ""
6137
6133
 
6138
- #: ../lib/puppet/pops/types/types.rb:1169
6134
+ #: ../lib/puppet/pops/types/types.rb:1171
6139
6135
  msgid "The string '%{str}' cannot be converted to Integer"
6140
6136
  msgstr ""
6141
6137
 
6142
- #: ../lib/puppet/pops/types/types.rb:1172
6138
+ #: ../lib/puppet/pops/types/types.rb:1174
6143
6139
  msgid "Value of type %{type} cannot be converted to Integer"
6144
6140
  msgstr ""
6145
6141
 
6146
- #: ../lib/puppet/pops/types/types.rb:1180
6142
+ #: ../lib/puppet/pops/types/types.rb:1182
6147
6143
  msgid "Illegal radix: %{radix}, expected 2, 8, 10, 16, or default"
6148
6144
  msgstr ""
6149
6145
 
6150
- #: ../lib/puppet/pops/types/types.rb:1293
6146
+ #: ../lib/puppet/pops/types/types.rb:1295
6151
6147
  msgid "The string '%{str}' cannot be converted to Float"
6152
6148
  msgstr ""
6153
6149
 
6154
- #: ../lib/puppet/pops/types/types.rb:1296
6150
+ #: ../lib/puppet/pops/types/types.rb:1298
6155
6151
  msgid "Value of type %{type} cannot be converted to Float"
6156
6152
  msgstr ""
6157
6153
 
6158
6154
  #. TRANSLATORS 'PStringType#initialize' is a class and method name and should not be translated
6159
- #: ../lib/puppet/pops/types/types.rb:1513
6155
+ #: ../lib/puppet/pops/types/types.rb:1515
6160
6156
  msgid "Passing more than one argument to PStringType#initialize is deprecated"
6161
6157
  msgstr ""
6162
6158
 
6163
6159
  #. TRANSLATORS 'PStringType#values' and '#value' are classes and method names and should not be translated
6164
- #: ../lib/puppet/pops/types/types.rb:1567
6160
+ #: ../lib/puppet/pops/types/types.rb:1569
6165
6161
  msgid "Method PStringType#values is deprecated. Use #value instead"
6166
6162
  msgstr ""
6167
6163
 
6168
- #: ../lib/puppet/pops/types/types.rb:1892
6164
+ #: ../lib/puppet/pops/types/types.rb:1894
6169
6165
  msgid "The string '%{str}' cannot be converted to Boolean"
6170
6166
  msgstr ""
6171
6167
 
6172
- #: ../lib/puppet/pops/types/types.rb:1895
6168
+ #: ../lib/puppet/pops/types/types.rb:1897
6173
6169
  msgid "Value of type %{type} cannot be converted to Boolean"
6174
6170
  msgstr ""
6175
6171
 
6176
- #: ../lib/puppet/pops/types/types.rb:2623
6172
+ #: ../lib/puppet/pops/types/types.rb:2625
6177
6173
  msgid "Value of type %{type} cannot be converted to Array"
6178
6174
  msgstr ""
6179
6175
 
6180
- #: ../lib/puppet/pops/types/types.rb:2693
6176
+ #: ../lib/puppet/pops/types/types.rb:2695
6181
6177
  msgid "Puppet::Pops::Types::PHashType#element_type is deprecated, use #value_type instead"
6182
6178
  msgstr ""
6183
6179
 
6184
- #: ../lib/puppet/pops/types/types.rb:2830
6180
+ #: ../lib/puppet/pops/types/types.rb:2832
6185
6181
  msgid "odd number of arguments for Hash"
6186
6182
  msgstr ""
6187
6183
 
6188
- #: ../lib/puppet/pops/types/types.rb:2841
6184
+ #: ../lib/puppet/pops/types/types.rb:2843
6189
6185
  msgid "Value of type %{type} cannot be converted to Hash"
6190
6186
  msgstr ""
6191
6187
 
@@ -6269,7 +6265,7 @@ msgid "No command %{command} defined for provider %{provider}"
6269
6265
  msgstr ""
6270
6266
 
6271
6267
  #: ../lib/puppet/provider.rb:398
6272
- msgid "Provider %{provider} has not defined the 'instances' class method"
6268
+ msgid "To support listing resources of this type the '%{provider}' provider needs to implement an 'instances' class method returning the current set of resources. We recommend porting your module to the simpler Resource API instead: https://puppet.com/search/docs?keys=resource+api"
6273
6269
  msgstr ""
6274
6270
 
6275
6271
  #: ../lib/puppet/provider.rb:470
@@ -6540,7 +6536,7 @@ msgstr ""
6540
6536
  msgid "You cannot install dpkg packages without a source"
6541
6537
  msgstr ""
6542
6538
 
6543
- #: ../lib/puppet/provider/package/dpkg.rb:108
6539
+ #: ../lib/puppet/provider/package/dpkg.rb:107
6544
6540
  msgid "source doesn't contain named package, but %{name}"
6545
6541
  msgstr ""
6546
6542
 
@@ -6548,27 +6544,27 @@ msgstr ""
6548
6544
  msgid "source is defined but does not have trailing slash, ignoring %{source}"
6549
6545
  msgstr ""
6550
6546
 
6551
- #: ../lib/puppet/provider/package/gem.rb:42
6547
+ #: ../lib/puppet/provider/package/gem.rb:84
6552
6548
  msgid "Could not list gems: %{detail}"
6553
6549
  msgstr ""
6554
6550
 
6555
- #: ../lib/puppet/provider/package/gem.rb:68
6551
+ #: ../lib/puppet/provider/package/gem.rb:110
6556
6552
  msgid "Could not match %{desc}"
6557
6553
  msgstr ""
6558
6554
 
6559
- #: ../lib/puppet/provider/package/gem.rb:109
6555
+ #: ../lib/puppet/provider/package/gem.rb:158
6560
6556
  msgid "Invalid source '%{uri}': %{detail}"
6561
6557
  msgstr ""
6562
6558
 
6563
- #: ../lib/puppet/provider/package/gem.rb:120
6559
+ #: ../lib/puppet/provider/package/gem.rb:169
6564
6560
  msgid "puppet:// URLs are not supported as gem sources"
6565
6561
  msgstr ""
6566
6562
 
6567
- #: ../lib/puppet/provider/package/gem.rb:136
6563
+ #: ../lib/puppet/provider/package/gem.rb:185
6568
6564
  msgid "Could not install: %{output}"
6569
6565
  msgstr ""
6570
6566
 
6571
- #: ../lib/puppet/provider/package/gem.rb:161
6567
+ #: ../lib/puppet/provider/package/gem.rb:211
6572
6568
  msgid "Could not uninstall: %{output}"
6573
6569
  msgstr ""
6574
6570
 
@@ -6839,6 +6835,14 @@ msgstr ""
6839
6835
  msgid "Failed to update to version %{should}, got version %{version} instead"
6840
6836
  msgstr ""
6841
6837
 
6838
+ #: ../lib/puppet/provider/package_targetable.rb:53
6839
+ msgid "Provider %{name} package command is not functional on this host"
6840
+ msgstr ""
6841
+
6842
+ #: ../lib/puppet/provider/package_targetable.rb:56
6843
+ msgid "Provider %{name} package command '%{cmd}' does not exist on this host"
6844
+ msgstr ""
6845
+
6842
6846
  #: ../lib/puppet/provider/parsedfile.rb:52
6843
6847
  msgid "Invalid filetype %{type}"
6844
6848
  msgstr ""
@@ -7473,7 +7477,7 @@ msgstr ""
7473
7477
  msgid "Invalid priority format '%{value}' for parameter: %{name}"
7474
7478
  msgstr ""
7475
7479
 
7476
- #: ../lib/puppet/settings/server_list_setting.rb:16
7480
+ #: ../lib/puppet/settings/server_list_setting.rb:25
7477
7481
  msgid "Expected an Array of String, got a %{klass}"
7478
7482
  msgstr ""
7479
7483
 
@@ -7581,15 +7585,15 @@ msgstr ""
7581
7585
  msgid "unexpected attributes %{keys} in %{path}"
7582
7586
  msgstr ""
7583
7587
 
7584
- #: ../lib/puppet/ssl/host.rb:165
7588
+ #: ../lib/puppet/ssl/host.rb:154
7585
7589
  msgid "No certificate to validate."
7586
7590
  msgstr ""
7587
7591
 
7588
- #: ../lib/puppet/ssl/host.rb:166
7592
+ #: ../lib/puppet/ssl/host.rb:155
7589
7593
  msgid "No private key with which to validate certificate with fingerprint: %{fingerprint}"
7590
7594
  msgstr ""
7591
7595
 
7592
- #: ../lib/puppet/ssl/host.rb:168
7596
+ #: ../lib/puppet/ssl/host.rb:157
7593
7597
  msgid ""
7594
7598
  "The certificate retrieved from the master does not match the agent's private key. Did you forget to run as root?\n"
7595
7599
  "Certificate fingerprint: %{fingerprint}\n"
@@ -7601,7 +7605,7 @@ msgid ""
7601
7605
  " 2. puppet %{puppet_params}\n"
7602
7606
  msgstr ""
7603
7607
 
7604
- #: ../lib/puppet/ssl/host.rb:250
7608
+ #: ../lib/puppet/ssl/host.rb:239
7605
7609
  msgid ""
7606
7610
  "The local CSR does not match the agent's public key.\n"
7607
7611
  "CSR fingerprint: %{fingerprint}\n"
@@ -7613,7 +7617,7 @@ msgid ""
7613
7617
  " 2. puppet %{puppet_params}\n"
7614
7618
  msgstr ""
7615
7619
 
7616
- #: ../lib/puppet/ssl/host.rb:266
7620
+ #: ../lib/puppet/ssl/host.rb:255
7617
7621
  msgid ""
7618
7622
  "The CSR retrieved from the master does not match the agent's public key.\n"
7619
7623
  "CSR fingerprint: %{fingerprint}\n"
@@ -7627,73 +7631,73 @@ msgid ""
7627
7631
  " 2. puppet %{puppet_params}\n"
7628
7632
  msgstr ""
7629
7633
 
7630
- #: ../lib/puppet/ssl/host.rb:320 ../lib/puppet/ssl/host.rb:341
7634
+ #: ../lib/puppet/ssl/host.rb:309 ../lib/puppet/ssl/host.rb:330
7631
7635
  msgid "Could not request certificate: %{message}"
7632
7636
  msgstr ""
7633
7637
 
7634
- #: ../lib/puppet/ssl/host.rb:322
7638
+ #: ../lib/puppet/ssl/host.rb:311
7635
7639
  msgid "Exiting; failed to retrieve certificate and waitforcert is disabled"
7636
7640
  msgstr ""
7637
7641
 
7638
- #: ../lib/puppet/ssl/host.rb:331
7642
+ #: ../lib/puppet/ssl/host.rb:320
7639
7643
  msgid "Exiting; no certificate found and waitforcert is disabled"
7640
7644
  msgstr ""
7641
7645
 
7642
- #: ../lib/puppet/ssl/host.rb:339
7646
+ #: ../lib/puppet/ssl/host.rb:328
7643
7647
  msgid "Did not receive certificate"
7644
7648
  msgstr ""
7645
7649
 
7646
- #: ../lib/puppet/ssl/host.rb:379
7650
+ #: ../lib/puppet/ssl/host.rb:368
7647
7651
  msgid "Response from the CA did not contain a valid certificate request: %{message}"
7648
7652
  msgstr ""
7649
7653
 
7650
- #: ../lib/puppet/ssl/host.rb:385
7654
+ #: ../lib/puppet/ssl/host.rb:374
7651
7655
  msgid "Could not download certificate request: %{message}"
7652
7656
  msgstr ""
7653
7657
 
7654
- #: ../lib/puppet/ssl/host.rb:412
7658
+ #: ../lib/puppet/ssl/host.rb:401
7655
7659
  msgid ""
7656
7660
  "Failed attempting to load CRL from %{crl_path}! The CRL below caused the error '%{error}':\n"
7657
7661
  "%{crl}"
7658
7662
  msgstr ""
7659
7663
 
7660
- #: ../lib/puppet/ssl/host.rb:440
7664
+ #: ../lib/puppet/ssl/host.rb:429
7661
7665
  msgid "The CA certificate at %{file_path} is invalid: %{message}"
7662
7666
  msgstr ""
7663
7667
 
7664
- #: ../lib/puppet/ssl/host.rb:464
7668
+ #: ../lib/puppet/ssl/host.rb:453
7665
7669
  msgid "No valid PEM-encoded certificates."
7666
7670
  msgstr ""
7667
7671
 
7668
- #: ../lib/puppet/ssl/host.rb:471
7672
+ #: ../lib/puppet/ssl/host.rb:460
7669
7673
  msgid "Could not parse certificate: %{message}"
7670
7674
  msgstr ""
7671
7675
 
7672
- #: ../lib/puppet/ssl/host.rb:494
7676
+ #: ../lib/puppet/ssl/host.rb:483
7673
7677
  msgid "Could not download CRLs: %{message}"
7674
7678
  msgstr ""
7675
7679
 
7676
- #: ../lib/puppet/ssl/host.rb:513
7680
+ #: ../lib/puppet/ssl/host.rb:502
7677
7681
  msgid "Response from the CA did not contain a valid CA certificate: %{message}"
7678
7682
  msgstr ""
7679
7683
 
7680
- #: ../lib/puppet/ssl/host.rb:516
7684
+ #: ../lib/puppet/ssl/host.rb:505
7681
7685
  msgid "Could not download CA certificate: %{message}"
7682
7686
  msgstr ""
7683
7687
 
7684
- #: ../lib/puppet/ssl/host.rb:556
7688
+ #: ../lib/puppet/ssl/host.rb:545
7685
7689
  msgid "The certificate at %{file_path} is invalid. Could not load."
7686
7690
  msgstr ""
7687
7691
 
7688
- #: ../lib/puppet/ssl/host.rb:577
7692
+ #: ../lib/puppet/ssl/host.rb:566
7689
7693
  msgid "Response from the CA did not contain a valid certificate for %{cert_name}."
7690
7694
  msgstr ""
7691
7695
 
7692
- #: ../lib/puppet/ssl/host.rb:581
7696
+ #: ../lib/puppet/ssl/host.rb:570
7693
7697
  msgid "No certificate for %{cert_name} on CA"
7694
7698
  msgstr ""
7695
7699
 
7696
- #: ../lib/puppet/ssl/host.rb:584
7700
+ #: ../lib/puppet/ssl/host.rb:573
7697
7701
  msgid "Could not download host certificate: %{message}"
7698
7702
  msgstr ""
7699
7703
 
@@ -7721,6 +7725,18 @@ msgstr ""
7721
7725
  msgid "Error registering ssl custom OIDs mapping from file '%{custom_oid_file}': %{err}"
7722
7726
  msgstr ""
7723
7727
 
7728
+ #: ../lib/puppet/ssl/validator/default_validator.rb:95 ../lib/puppet/util/ssl.rb:81
7729
+ msgid "expected one of %{certnames}"
7730
+ msgstr ""
7731
+
7732
+ #: ../lib/puppet/ssl/validator/default_validator.rb:97 ../lib/puppet/util/ssl.rb:83
7733
+ msgid "expected %{certname}"
7734
+ msgstr ""
7735
+
7736
+ #: ../lib/puppet/ssl/validator/default_validator.rb:100 ../lib/puppet/util/ssl.rb:86
7737
+ msgid "Server hostname '%{host}' did not match server certificate; %{expected_certnames}"
7738
+ msgstr ""
7739
+
7724
7740
  #: ../lib/puppet/syntax_checkers/base64.rb:18
7725
7741
  msgid "Base64 syntax checker: the text to check must be a String."
7726
7742
  msgstr ""
@@ -7857,7 +7873,7 @@ msgstr[1] ""
7857
7873
  msgid "Failed to call %{callback}: %{detail}"
7858
7874
  msgstr ""
7859
7875
 
7860
- #: ../lib/puppet/transaction/event_manager.rb:171
7876
+ #: ../lib/puppet/transaction/event_manager.rb:172
7861
7877
  msgid "Would have triggered '%{callback}' from %{count} event"
7862
7878
  msgid_plural "Would have triggered '%{callback}' from %{count} events"
7863
7879
  msgstr[0] ""
@@ -8214,15 +8230,15 @@ msgstr ""
8214
8230
  msgid "Invalid GID %{gid}"
8215
8231
  msgstr ""
8216
8232
 
8217
- #: ../lib/puppet/type/package.rb:114 ../lib/puppet/type/package.rb:128
8233
+ #: ../lib/puppet/type/package.rb:116 ../lib/puppet/type/package.rb:130
8218
8234
  msgid "Could not update: %{detail}"
8219
8235
  msgstr ""
8220
8236
 
8221
- #: ../lib/puppet/type/package.rb:163
8237
+ #: ../lib/puppet/type/package.rb:165
8222
8238
  msgid "Could not get latest version: %{detail}"
8223
8239
  msgstr ""
8224
8240
 
8225
- #: ../lib/puppet/type/package.rb:263
8241
+ #: ../lib/puppet/type/package.rb:265
8226
8242
  msgid "Name must be a String not %{klass}"
8227
8243
  msgstr ""
8228
8244
 
@@ -8266,15 +8282,15 @@ msgstr ""
8266
8282
  msgid "Invalid minute '%{n}'"
8267
8283
  msgstr ""
8268
8284
 
8269
- #: ../lib/puppet/type/schedule.rb:278
8285
+ #: ../lib/puppet/type/schedule.rb:282
8270
8286
  msgid "Repeat must be a number"
8271
8287
  msgstr ""
8272
8288
 
8273
- #: ../lib/puppet/type/schedule.rb:287
8289
+ #: ../lib/puppet/type/schedule.rb:291
8274
8290
  msgid "Repeat must be 1 unless periodmatch is 'distance', not '%{period}'"
8275
8291
  msgstr ""
8276
8292
 
8277
- #: ../lib/puppet/type/schedule.rb:331
8293
+ #: ../lib/puppet/type/schedule.rb:335
8278
8294
  msgid "%{value} is not a valid day of the week"
8279
8295
  msgstr ""
8280
8296
 
@@ -9190,18 +9206,6 @@ msgstr ""
9190
9206
  msgid "Sleeping for %{time} seconds (splay is enabled)"
9191
9207
  msgstr ""
9192
9208
 
9193
- #: ../lib/puppet/util/ssl.rb:81
9194
- msgid "expected one of %{certnames}"
9195
- msgstr ""
9196
-
9197
- #: ../lib/puppet/util/ssl.rb:83
9198
- msgid "expected %{certname}"
9199
- msgstr ""
9200
-
9201
- #: ../lib/puppet/util/ssl.rb:86
9202
- msgid "Server hostname '%{host}' did not match server certificate; %{expected_certnames}"
9203
- msgstr ""
9204
-
9205
9209
  #: ../lib/puppet/util/storage.rb:53
9206
9210
  msgid "Checksumfile %{filename} is not a file, ignoring"
9207
9211
  msgstr ""