puppet 5.5.17-x64-mingw32 → 5.5.18-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.

Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +2 -3
  4. data/Gemfile.lock +35 -31
  5. data/ext/build_defaults.yaml +1 -0
  6. data/ext/cert_inspector +3 -3
  7. data/ext/puppet-test +2 -2
  8. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  9. data/ext/windows/service/daemon.rb +54 -8
  10. data/install.rb +6 -6
  11. data/lib/puppet/application.rb +1 -1
  12. data/lib/puppet/application/apply.rb +2 -2
  13. data/lib/puppet/application/describe.rb +3 -9
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/lookup.rb +1 -1
  16. data/lib/puppet/application/script.rb +2 -2
  17. data/lib/puppet/configurer.rb +86 -28
  18. data/lib/puppet/configurer/downloader.rb +2 -6
  19. data/lib/puppet/defaults.rb +17 -4
  20. data/lib/puppet/error.rb +9 -1
  21. data/lib/puppet/external/nagios/base.rb +1 -1
  22. data/lib/puppet/face/ca.rb +1 -1
  23. data/lib/puppet/face/module/list.rb +5 -5
  24. data/lib/puppet/face/module/search.rb +1 -1
  25. data/lib/puppet/face/module/uninstall.rb +1 -1
  26. data/lib/puppet/face/module/upgrade.rb +1 -1
  27. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  28. data/lib/puppet/file_system.rb +0 -8
  29. data/lib/puppet/file_system/memory_file.rb +1 -1
  30. data/lib/puppet/file_system/posix.rb +3 -2
  31. data/lib/puppet/forge.rb +3 -3
  32. data/lib/puppet/functions/epp.rb +4 -4
  33. data/lib/puppet/functions/inline_epp.rb +5 -5
  34. data/lib/puppet/gettext/module_translations.rb +1 -1
  35. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  36. data/lib/puppet/graph/simple_graph.rb +6 -5
  37. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  38. data/lib/puppet/indirector/hiera.rb +2 -0
  39. data/lib/puppet/indirector/resource/ral.rb +1 -3
  40. data/lib/puppet/indirector/resource/validator.rb +1 -1
  41. data/lib/puppet/interface.rb +2 -1
  42. data/lib/puppet/loaders.rb +0 -1
  43. data/lib/puppet/metatype/manager.rb +1 -1
  44. data/lib/puppet/module.rb +1 -1
  45. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  46. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  47. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  48. data/lib/puppet/module_tool/metadata.rb +1 -1
  49. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  50. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  51. data/lib/puppet/network/http/api/indirected_routes.rb +12 -11
  52. data/lib/puppet/network/http/connection.rb +10 -12
  53. data/lib/puppet/network/http/pool.rb +2 -0
  54. data/lib/puppet/network/http/rack/rest.rb +2 -2
  55. data/lib/puppet/network/http/site.rb +1 -1
  56. data/lib/puppet/network/resolver.rb +2 -2
  57. data/lib/puppet/node/environment.rb +4 -2
  58. data/lib/puppet/parser/ast.rb +1 -1
  59. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  60. data/lib/puppet/parser/functions.rb +1 -1
  61. data/lib/puppet/parser/functions/epp.rb +3 -3
  62. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  63. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  64. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  65. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  66. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  67. data/lib/puppet/pops/loaders.rb +1 -1
  68. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  69. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  70. data/lib/puppet/pops/merge_strategy.rb +22 -18
  71. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  72. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  73. data/lib/puppet/pops/parser/locator.rb +1 -1
  74. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  75. data/lib/puppet/pops/puppet_stack.rb +51 -48
  76. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  77. data/lib/puppet/pops/types/string_converter.rb +10 -10
  78. data/lib/puppet/pops/types/types.rb +3 -3
  79. data/lib/puppet/property.rb +1 -1
  80. data/lib/puppet/property/ensure.rb +1 -1
  81. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  82. data/lib/puppet/provider/cron/crontab.rb +1 -1
  83. data/lib/puppet/provider/exec.rb +6 -2
  84. data/lib/puppet/provider/mount.rb +1 -1
  85. data/lib/puppet/provider/mount/parsed.rb +8 -8
  86. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  87. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  88. data/lib/puppet/provider/package/dnfmodule.rb +87 -0
  89. data/lib/puppet/provider/package/dpkg.rb +3 -12
  90. data/lib/puppet/provider/package/openbsd.rb +1 -1
  91. data/lib/puppet/provider/package/pip.rb +34 -9
  92. data/lib/puppet/provider/package/portage.rb +4 -4
  93. data/lib/puppet/provider/package/rpm.rb +6 -6
  94. data/lib/puppet/provider/package/windows/package.rb +1 -1
  95. data/lib/puppet/provider/package/yum.rb +1 -1
  96. data/lib/puppet/provider/package_targetable.rb +5 -4
  97. data/lib/puppet/provider/parsedfile.rb +1 -1
  98. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  99. data/lib/puppet/provider/service/daemontools.rb +9 -9
  100. data/lib/puppet/provider/service/openbsd.rb +1 -1
  101. data/lib/puppet/provider/service/rcng.rb +2 -2
  102. data/lib/puppet/provider/service/runit.rb +2 -8
  103. data/lib/puppet/provider/service/systemd.rb +8 -8
  104. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  105. data/lib/puppet/provider/user/hpux.rb +1 -1
  106. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  107. data/lib/puppet/provider/user/useradd.rb +22 -13
  108. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  109. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  110. data/lib/puppet/reference/indirection.rb +2 -2
  111. data/lib/puppet/reference/metaparameter.rb +1 -3
  112. data/lib/puppet/reference/providers.rb +1 -1
  113. data/lib/puppet/reference/type.rb +3 -9
  114. data/lib/puppet/reports.rb +1 -1
  115. data/lib/puppet/resource.rb +1 -1
  116. data/lib/puppet/resource/catalog.rb +1 -1
  117. data/lib/puppet/settings.rb +3 -3
  118. data/lib/puppet/settings/environment_conf.rb +1 -0
  119. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  120. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  121. data/lib/puppet/ssl/host.rb +3 -3
  122. data/lib/puppet/ssl/oids.rb +1 -1
  123. data/lib/puppet/transaction/report.rb +1 -1
  124. data/lib/puppet/type.rb +2 -4
  125. data/lib/puppet/type/cron.rb +1 -1
  126. data/lib/puppet/type/exec.rb +7 -3
  127. data/lib/puppet/type/file.rb +1 -2
  128. data/lib/puppet/type/file/data_sync.rb +5 -1
  129. data/lib/puppet/type/group.rb +4 -2
  130. data/lib/puppet/type/interface.rb +1 -1
  131. data/lib/puppet/type/notify.rb +3 -2
  132. data/lib/puppet/type/package.rb +2 -2
  133. data/lib/puppet/type/schedule.rb +1 -1
  134. data/lib/puppet/type/selboolean.rb +17 -3
  135. data/lib/puppet/type/service.rb +1 -1
  136. data/lib/puppet/type/user.rb +4 -2
  137. data/lib/puppet/util.rb +35 -12
  138. data/lib/puppet/util/command_line/trollop.rb +1 -1
  139. data/lib/puppet/util/http_proxy.rb +8 -14
  140. data/lib/puppet/util/instance_loader.rb +1 -1
  141. data/lib/puppet/util/log.rb +1 -1
  142. data/lib/puppet/util/log/destinations.rb +2 -2
  143. data/lib/puppet/util/logging.rb +30 -18
  144. data/lib/puppet/util/metric.rb +2 -2
  145. data/lib/puppet/util/monkey_patches.rb +1 -1
  146. data/lib/puppet/util/nagios_maker.rb +2 -2
  147. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  148. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  149. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  150. data/lib/puppet/util/provider_features.rb +2 -4
  151. data/lib/puppet/util/rdoc.rb +1 -1
  152. data/lib/puppet/util/reference.rb +1 -1
  153. data/lib/puppet/util/resource_template.rb +1 -1
  154. data/lib/puppet/util/selinux.rb +3 -1
  155. data/lib/puppet/util/windows/adsi.rb +58 -28
  156. data/lib/puppet/util/windows/registry.rb +7 -5
  157. data/lib/puppet/vendor.rb +1 -1
  158. data/lib/puppet/version.rb +1 -1
  159. data/lib/puppet_pal.rb +2 -2
  160. data/locales/puppet.pot +115 -95
  161. data/man/man5/puppet.conf.5 +21 -5
  162. data/man/man8/puppet-agent.8 +1 -1
  163. data/man/man8/puppet-apply.8 +1 -1
  164. data/man/man8/puppet-ca.8 +1 -1
  165. data/man/man8/puppet-catalog.8 +1 -1
  166. data/man/man8/puppet-cert.8 +1 -1
  167. data/man/man8/puppet-certificate.8 +1 -1
  168. data/man/man8/puppet-certificate_request.8 +1 -1
  169. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  170. data/man/man8/puppet-config.8 +1 -1
  171. data/man/man8/puppet-describe.8 +1 -1
  172. data/man/man8/puppet-device.8 +1 -1
  173. data/man/man8/puppet-doc.8 +1 -1
  174. data/man/man8/puppet-epp.8 +1 -1
  175. data/man/man8/puppet-facts.8 +1 -1
  176. data/man/man8/puppet-filebucket.8 +1 -1
  177. data/man/man8/puppet-generate.8 +1 -1
  178. data/man/man8/puppet-help.8 +1 -1
  179. data/man/man8/puppet-key.8 +1 -1
  180. data/man/man8/puppet-lookup.8 +1 -1
  181. data/man/man8/puppet-man.8 +1 -1
  182. data/man/man8/puppet-master.8 +1 -1
  183. data/man/man8/puppet-module.8 +1 -1
  184. data/man/man8/puppet-node.8 +1 -1
  185. data/man/man8/puppet-parser.8 +1 -1
  186. data/man/man8/puppet-plugin.8 +1 -1
  187. data/man/man8/puppet-report.8 +1 -1
  188. data/man/man8/puppet-resource.8 +1 -1
  189. data/man/man8/puppet-script.8 +1 -1
  190. data/man/man8/puppet-status.8 +1 -1
  191. data/man/man8/puppet.8 +2 -2
  192. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +11 -0
  193. data/spec/integration/configurer_spec.rb +52 -0
  194. data/spec/integration/type/notify_spec.rb +46 -0
  195. data/spec/unit/configurer_spec.rb +380 -397
  196. data/spec/unit/forge/forge_spec.rb +1 -3
  197. data/spec/unit/forge/repository_spec.rb +1 -3
  198. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  199. data/spec/unit/network/http/connection_spec.rb +26 -0
  200. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  201. data/spec/unit/provider/exec_spec.rb +209 -0
  202. data/spec/unit/provider/package/dnfmodule_spec.rb +186 -0
  203. data/spec/unit/provider/package/dpkg_spec.rb +15 -3
  204. data/spec/unit/provider/package/pip_spec.rb +51 -6
  205. data/spec/unit/provider/package/portage_spec.rb +4 -4
  206. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  207. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  208. data/spec/unit/provider/service/runit_spec.rb +24 -0
  209. data/spec/unit/provider/service/systemd_spec.rb +22 -22
  210. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  211. data/spec/unit/provider/user/useradd_spec.rb +46 -0
  212. data/spec/unit/type/exec_spec.rb +6 -12
  213. data/spec/unit/type/file/content_spec.rb +9 -3
  214. data/spec/unit/type/file_spec.rb +9 -4
  215. data/spec/unit/type/selboolean_spec.rb +4 -6
  216. data/spec/unit/util/execution_spec.rb +16 -0
  217. data/spec/unit/util/http_proxy_spec.rb +97 -0
  218. data/spec/unit/util/log/destinations_spec.rb +7 -3
  219. data/spec/unit/util/log_spec.rb +0 -138
  220. data/spec/unit/util/logging_spec.rb +200 -0
  221. data/spec/unit/util/windows/adsi_spec.rb +51 -0
  222. data/tasks/manpages.rake +1 -0
  223. metadata +12 -5
  224. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  225. data/locales/ja/puppet.po +0 -12114
@@ -215,7 +215,7 @@ class Parser
215
215
  opts[:type] = opts[:type] || type_from_default || :flag
216
216
 
217
217
  ## fill in :long
218
- opts[:long] = opts[:long] ? opts[:long].to_s : name.to_s.gsub("_", "-")
218
+ opts[:long] = opts[:long] ? opts[:long].to_s : name.to_s.tr("_", "-")
219
219
  opts[:long] =
220
220
  case opts[:long]
221
221
  when /^--([^-].*)$/
@@ -4,13 +4,15 @@ require 'puppet/network/http'
4
4
 
5
5
  module Puppet::Util::HttpProxy
6
6
  def self.proxy(uri)
7
- if self.no_proxy?(uri)
8
- proxy_class = Net::HTTP::Proxy(nil)
7
+ if http_proxy_host && !no_proxy?(uri)
8
+ Net::HTTP.new(uri.host, uri.port, self.http_proxy_host, self.http_proxy_port, self.http_proxy_user, self.http_proxy_password)
9
9
  else
10
- proxy_class = Net::HTTP::Proxy(self.http_proxy_host, self.http_proxy_port, self.http_proxy_user, self.http_proxy_password)
10
+ http = Net::HTTP.new(uri.host, uri.port, nil, nil, nil, nil)
11
+ # Net::HTTP defaults the proxy port even though we said not to
12
+ # use one. Set it to nil so caller is not surprised
13
+ http.proxy_port = nil if http.respond_to?(:proxy_port=)
14
+ http
11
15
  end
12
-
13
- return proxy_class.new(uri.host, uri.port)
14
16
  end
15
17
 
16
18
  def self.http_proxy_env
@@ -49,14 +51,6 @@ module Puppet::Util::HttpProxy
49
51
  host, port = d.split(':')
50
52
  host = Regexp.escape(host).gsub('\*', '.*')
51
53
 
52
- #If the host of this no_proxy value starts with '.', this entry is
53
- #a domain level entry. Don't pin the regex to the beginning of the entry.
54
- #If it does not start with a '.' then it is a host specific entry and
55
- #should be matched to the destination starting at the beginning.
56
- unless host =~ /^\\\./
57
- host = "^#{host}"
58
- end
59
-
60
54
  #If this no_proxy entry specifies a port, we want to match it against
61
55
  #the destination port. Otherwise just match hosts.
62
56
  if port
@@ -192,7 +186,7 @@ module Puppet::Util::HttpProxy
192
186
 
193
187
  headers = { 'Accept' => '*/*', 'User-Agent' => Puppet[:http_user_agent] }
194
188
  if Puppet.features.zlib?
195
- headers.merge!({"Accept-Encoding" => Puppet::Network::HTTP::Compression::ACCEPT_ENCODING})
189
+ headers["Accept-Encoding"] = Puppet::Network::HTTP::Compression::ACCEPT_ENCODING
196
190
  end
197
191
 
198
192
  response = proxy.send(:head, current_uri.path, headers)
@@ -40,7 +40,7 @@ module Puppet::Util::InstanceLoader
40
40
  instance_loader(type).loadall
41
41
 
42
42
  # Use this method so they all get loaded
43
- loaded_instances(type).sort { |a,b| a.to_s <=> b.to_s }.each do |name|
43
+ loaded_instances(type).sort_by(&:to_s).each do |name|
44
44
  mod = self.loaded_instance(type, name)
45
45
  docs << "#{name}\n#{"-" * name.to_s.length}\n"
46
46
 
@@ -392,7 +392,7 @@ class Puppet::Util::Log
392
392
  end
393
393
 
394
394
  def to_report
395
- "#{time} #{source} (#{level}): #{to_s}"
395
+ "#{time} #{source} (#{level}): #{self}"
396
396
  end
397
397
 
398
398
  def to_s
@@ -34,7 +34,7 @@ Puppet::Util::Log.newdesttype :syslog do
34
34
  end
35
35
  else
36
36
  msg.to_s.split("\n").each do |line|
37
- @syslog.send(msg.level, "(%s) %s" % [msg.source.to_s.gsub("%", ""),
37
+ @syslog.send(msg.level, "(%s) %s" % [msg.source.to_s.delete("%"),
38
38
  line.gsub("%", '%%')
39
39
  ]
40
40
  )
@@ -77,7 +77,7 @@ Puppet::Util::Log.newdesttype :file do
77
77
 
78
78
  # create the log file, if it doesn't already exist
79
79
  need_array_start = false
80
- file_exists = File.exists?(path)
80
+ file_exists = Puppet::FileSystem.exist?(path)
81
81
  if @json == 1
82
82
  need_array_start = true
83
83
  if file_exists
@@ -48,11 +48,12 @@ module Logging
48
48
  # wish to log a message at all; in this case it is likely that you are only calling this method in order
49
49
  # to take advantage of the backtrace logging.
50
50
  def log_exception(exception, message = :default, options = {})
51
- trace = Puppet[:trace] || options[:trace]
51
+ combined_trace = Puppet[:trace] || options[:trace]
52
+ puppet_trace = Puppet[:puppet_trace] || options[:puppet_trace]
53
+
52
54
  if message == :default && exception.is_a?(Puppet::ParseErrorWithIssue)
53
55
  # Retain all detailed info and keep plain message and stacktrace separate
54
- backtrace = []
55
- build_exception_trace(backtrace, exception, trace)
56
+ backtrace = build_exception_trace(exception, combined_trace, puppet_trace)
56
57
  Puppet::Util::Log.create({
57
58
  :level => options[:level] || :err,
58
59
  :source => log_source,
@@ -66,28 +67,27 @@ module Logging
66
67
  :node => exception.node
67
68
  }.merge(log_metadata))
68
69
  else
69
- err(format_exception(exception, message, trace))
70
+ err(format_exception(exception, message, combined_trace, puppet_trace))
70
71
  end
71
72
  end
72
73
 
73
- def build_exception_trace(arr, exception, trace = true)
74
- if trace and exception.backtrace
75
- exception.backtrace.each do |line|
76
- arr << line =~ /^(.+):(\d+.*)$/ ? ("#{Pathname($1).realpath}:#{$2}" rescue line) : line
77
- end
78
- end
74
+ def build_exception_trace(exception, combined_trace = true, puppet_trace = false)
75
+ built_trace = format_backtrace(exception, combined_trace, puppet_trace)
76
+
79
77
  if exception.respond_to?(:original)
80
78
  original = exception.original
81
79
  unless original.nil?
82
- arr << _('Wrapped exception:')
83
- arr << original.message
84
- build_exception_trace(arr, original, trace)
80
+ built_trace << _('Wrapped exception:')
81
+ built_trace << original.message
82
+ built_trace += build_exception_trace(original, combined_trace, puppet_trace)
85
83
  end
86
84
  end
85
+
86
+ built_trace
87
87
  end
88
88
  private :build_exception_trace
89
89
 
90
- def format_exception(exception, message = :default, trace = true)
90
+ def format_exception(exception, message = :default, combined_trace = true, puppet_trace = false)
91
91
  arr = []
92
92
  case message
93
93
  when :default
@@ -98,16 +98,28 @@ module Logging
98
98
  arr << message
99
99
  end
100
100
 
101
- if trace and exception.backtrace
102
- arr << Puppet::Util.pretty_backtrace(exception.backtrace)
103
- end
101
+ arr += format_backtrace(exception, combined_trace, puppet_trace)
102
+
104
103
  if exception.respond_to?(:original) and exception.original
105
104
  arr << _("Wrapped exception:")
106
- arr << format_exception(exception.original, :default, trace)
105
+ arr << format_exception(exception.original, :default, combined_trace, puppet_trace)
107
106
  end
107
+
108
108
  arr.flatten.join("\n")
109
109
  end
110
110
 
111
+ def format_backtrace(exception, combined_trace, puppet_trace)
112
+ puppetstack = exception.respond_to?(:puppetstack) ? exception.puppetstack : []
113
+
114
+ if combined_trace and exception.backtrace
115
+ Puppet::Util.format_backtrace_array(exception.backtrace, puppetstack)
116
+ elsif puppet_trace && !puppetstack.empty?
117
+ Puppet::Util.format_backtrace_array(puppetstack)
118
+ else
119
+ []
120
+ end
121
+ end
122
+
111
123
  def log_and_raise(exception, message)
112
124
  log_exception(exception, message)
113
125
  raise exception, message + "\n" + exception.to_s, exception.backtrace
@@ -54,11 +54,11 @@ class Puppet::Util::Metric
54
54
  end
55
55
 
56
56
  def values
57
- @values.sort { |a, b| a[1] <=> b[1] }
57
+ @values.sort_by { |a| a[1] }
58
58
  end
59
59
 
60
60
  # Convert a name into a label.
61
61
  def self.labelize(name)
62
- name.to_s.capitalize.gsub("_", " ")
62
+ name.to_s.capitalize.tr("_", " ")
63
63
  end
64
64
  end
@@ -70,7 +70,7 @@ if Puppet::Util::Platform.windows?
70
70
  begin
71
71
  add_cert(x509)
72
72
  rescue OpenSSL::X509::StoreError
73
- warn "Failed to add #{x509.subject.to_s}"
73
+ warn "Failed to add #{x509.subject}"
74
74
  end
75
75
  end
76
76
  end
@@ -65,11 +65,11 @@ module Puppet::Util::NagiosMaker
65
65
  end
66
66
  end
67
67
 
68
- target = "/etc/nagios/#{full_name.to_s}.cfg"
68
+ target = "/etc/nagios/#{full_name}.cfg"
69
69
  provider = type.provide(:naginator, :parent => Puppet::Provider::Naginator, :default_target => target) {}
70
70
  provider.nagios_type
71
71
 
72
- type.desc "The Nagios type #{name.to_s}. This resource type is autogenerated using the
72
+ type.desc "The Nagios type #{name}. This resource type is autogenerated using the
73
73
  model developed in Naginator, and all of the Nagios types are generated using the
74
74
  same code and the same library.
75
75
 
@@ -103,7 +103,7 @@ class Puppet::Util::NetworkDevice::Cisco::Device < Puppet::Util::NetworkDevice::
103
103
  IF.each do |k,ifnames|
104
104
  if found = ifnames.find { |ifname| interface =~ /^#{ifname}\s*\d/i }
105
105
  found = /^#{found}(.+)\Z/i.match(interface)
106
- return "#{k.to_s}#{found[1]}".gsub(/\s+/,'')
106
+ return "#{k}#{found[1]}".gsub(/\s+/,'')
107
107
  end
108
108
  end
109
109
  interface
@@ -27,8 +27,8 @@ class Puppet::Util::NetworkDevice::Cisco::Interface
27
27
  :etherchannel => [9, ["channel-group %s", "port group %s"]],
28
28
  :ipaddress => [10,
29
29
  lambda do |prefix,ip,option|
30
- ip.ipv6? ? "ipv6 address #{ip.to_s}/#{prefix} #{option}" :
31
- "ip address #{ip.to_s} #{netmask(Socket::AF_INET,prefix)}"
30
+ ip.ipv6? ? "ipv6 address #{ip}/#{prefix} #{option}" :
31
+ "ip address #{ip} #{netmask(Socket::AF_INET,prefix)}"
32
32
  end],
33
33
  :ensure => [11, lambda { |value| value == :present ? "no shutdown" : "shutdown" } ]
34
34
  }
@@ -59,7 +59,7 @@ class Puppet::Util::NetworkDevice::Transport::Ssh < Puppet::Util::NetworkDevice:
59
59
  # the ssh loop there while still having the ssh connection up
60
60
  # otherwise we wouldn't be able to return ssh stdout/stderr
61
61
  # for a given call of command.
62
- return
62
+ return # rubocop:disable Lint/NonLocalExitFromIterator
63
63
  end
64
64
 
65
65
  end
@@ -81,7 +81,7 @@ module Puppet::Util::ProviderFeatures
81
81
  str = ""
82
82
  @features ||= {}
83
83
  return nil if @features.empty?
84
- names = @features.keys.sort { |a,b| a.to_s <=> b.to_s }
84
+ names = @features.keys.sort_by(&:to_s)
85
85
  names.each do |name|
86
86
  doc = @features[name].docs.gsub(/\n\s+/, " ")
87
87
  str << "- *#{name}*: #{doc}\n"
@@ -130,9 +130,7 @@ module Puppet::Util::ProviderFeatures
130
130
  # Create a method that will list all functional features.
131
131
  @feature_module.send(:define_method, :features) do
132
132
  return false unless defined?(features)
133
- features.keys.find_all { |n| feature?(n) }.sort { |a,b|
134
- a.to_s <=> b.to_s
135
- }
133
+ features.keys.find_all { |n| feature?(n) }.sort_by(&:to_s)
136
134
  end
137
135
 
138
136
  # Create a method that will determine if a provided list of
@@ -31,7 +31,7 @@ module Puppet::Util::RDoc
31
31
  # uses relative_path_from that will generate errors when the slashes don't
32
32
  # properly match. This is a workaround for that issue.
33
33
  if Puppet.features.microsoft_windows? && RDoc::VERSION !~ /^[0-3]\./
34
- options += [ "--root", Dir.pwd.gsub(/\\/, '/')]
34
+ options += [ "--root", Dir.pwd.tr('\\', '/')]
35
35
  end
36
36
  options += files
37
37
 
@@ -60,7 +60,7 @@ class Puppet::Util::Reference
60
60
 
61
61
  def self.references
62
62
  instance_loader(:reference).loadall
63
- loaded_instances(:reference).sort { |a,b| a.to_s <=> b.to_s }
63
+ loaded_instances(:reference).sort_by(&:to_s)
64
64
  end
65
65
 
66
66
  attr_accessor :page, :depth, :header, :title, :dynamic
@@ -53,7 +53,7 @@ class Puppet::Util::ResourceTemplate
53
53
 
54
54
  def set_resource_variables
55
55
  @resource.to_hash.each do |param, value|
56
- var = "@#{param.to_s}"
56
+ var = "@#{param}"
57
57
  instance_variable_set(var, value)
58
58
  end
59
59
  end
@@ -206,7 +206,9 @@ module Puppet::Util::SELinux
206
206
  # If possible we use read_nonblock in a loop rather than read to work-
207
207
  # a linux kernel bug. See ticket #1963 for details.
208
208
  mountfh = File.open("/proc/mounts")
209
- mounts += mountfh.read_nonblock(1024) while true
209
+ loop do
210
+ mounts += mountfh.read_nonblock(1024)
211
+ end
210
212
  else
211
213
  # Otherwise we shell out and let cat do it for us
212
214
  mountfh = IO.popen("/bin/cat /proc/mounts")
@@ -1,6 +1,23 @@
1
1
  module Puppet::Util::Windows::ADSI
2
2
  require 'ffi'
3
3
 
4
+ # https://docs.microsoft.com/en-us/windows/win32/api/dsrole/ne-dsrole-dsrole_machine_role
5
+ STANDALONE_WORKSTATION = 0
6
+ MEMBER_WORKSTATION = 1
7
+ STANDALONE_SERVER = 2
8
+ MEMBER_SERVER = 3
9
+ BACKUP_DOMAIN_CONTROLLER = 4
10
+ PRIMARY_DOMAIN_CONTROLLER = 5
11
+
12
+ DOMAIN_ROLES = {
13
+ STANDALONE_WORKSTATION => :STANDALONE_WORKSTATION,
14
+ MEMBER_WORKSTATION => :MEMBER_WORKSTATION,
15
+ STANDALONE_SERVER => :STANDALONE_SERVER,
16
+ MEMBER_SERVER => :MEMBER_SERVER,
17
+ BACKUP_DOMAIN_CONTROLLER => :BACKUP_DOMAIN_CONTROLLER,
18
+ PRIMARY_DOMAIN_CONTROLLER => :PRIMARY_DOMAIN_CONTROLLER,
19
+ }
20
+
4
21
  class << self
5
22
  extend FFI::Library
6
23
 
@@ -94,6 +111,14 @@ module Puppet::Util::Windows::ADSI
94
111
  wmi_connection.execquery(query)
95
112
  end
96
113
 
114
+ def domain_role
115
+ unless @domain_role
116
+ query_result = Puppet::Util::Windows::ADSI.execquery('select DomainRole from Win32_ComputerSystem').to_enum.first
117
+ @domain_role = DOMAIN_ROLES[query_result.DomainRole] if query_result
118
+ end
119
+ @domain_role
120
+ end
121
+
97
122
  ffi_convention :stdcall
98
123
 
99
124
  # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx
@@ -126,24 +151,24 @@ module Puppet::Util::Windows::ADSI
126
151
  Puppet::Util::Windows::SID.name_to_principal('SYSTEM').domain.upcase
127
152
  ]
128
153
  end
129
-
154
+
130
155
  def uri(name, host = '.')
131
156
  host = '.' if (localized_domains << Socket.gethostname.upcase).include?(host.upcase)
132
157
  Puppet::Util::Windows::ADSI.uri(name, @object_class, host)
133
158
  end
134
-
159
+
135
160
  def parse_name(name)
136
161
  if name =~ /\//
137
162
  raise Puppet::Error.new( _("Value must be in DOMAIN\\%{object_class} style syntax") % { object_class: @object_class } )
138
163
  end
139
-
164
+
140
165
  matches = name.scan(/((.*)\\)?(.*)/)
141
166
  domain = matches[0][1] || '.'
142
167
  account = matches[0][2]
143
-
168
+
144
169
  return account, domain
145
170
  end
146
-
171
+
147
172
  # returns Puppet::Util::Windows::SID::Principal[]
148
173
  # may contain objects that represent unresolvable SIDs
149
174
  def get_sids(adsi_child_collection)
@@ -151,19 +176,19 @@ module Puppet::Util::Windows::ADSI
151
176
  adsi_child_collection.each do |m|
152
177
  sids << Puppet::Util::Windows::SID.ads_to_principal(m)
153
178
  end
154
-
179
+
155
180
  sids
156
181
  end
157
-
182
+
158
183
  def name_sid_hash(names)
159
184
  return {} if names.nil? || names.empty?
160
-
185
+
161
186
  sids = names.map do |name|
162
187
  sid = Puppet::Util::Windows::SID.name_to_principal(name)
163
188
  raise Puppet::Error.new( _("Could not resolve name: %{name}") % { name: name } ) if !sid
164
189
  [sid.sid, sid]
165
190
  end
166
-
191
+
167
192
  Hash[ sids ]
168
193
  end
169
194
 
@@ -176,8 +201,13 @@ module Puppet::Util::Windows::ADSI
176
201
  well_known = false
177
202
  if (sid = Puppet::Util::Windows::SID.name_to_principal(name_or_sid))
178
203
  # Examples of SidType include SidTypeUser, SidTypeGroup
179
- return true if sid.account_type == "SidType#{@object_class.capitalize}".to_sym
180
-
204
+ if sid.account_type == "SidType#{@object_class.capitalize}".to_sym
205
+ # Check if we're getting back a local user when domain-joined
206
+ return true unless [:MEMBER_WORKSTATION, :MEMBER_SERVER].include?(Puppet::Util::Windows::ADSI.domain_role)
207
+ # The resource domain and the computer name are not always case-matching
208
+ return sid.domain.casecmp(Puppet::Util::Windows::ADSI.computer_name) == 0
209
+ end
210
+
181
211
  # 'well known group' is special as it can be a group like Everyone OR a user like SYSTEM
182
212
  # so try to resolve it
183
213
  # https://msdn.microsoft.com/en-us/library/cc234477.aspx
@@ -388,23 +418,23 @@ module Puppet::Util::Windows::ADSI
388
418
  ADS_UF_SCRIPT: 0x0001,
389
419
  ADS_UF_ACCOUNTDISABLE: 0x0002,
390
420
  ADS_UF_HOMEDIR_REQUIRED: 0x0008,
391
- ADS_UF_LOCKOUT: 0x0010,
392
- ADS_UF_PASSWD_NOTREQD: 0x0020,
393
- ADS_UF_PASSWD_CANT_CHANGE: 0x0040,
394
- ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED: 0x0080,
395
- ADS_UF_TEMP_DUPLICATE_ACCOUNT: 0x0100,
396
- ADS_UF_NORMAL_ACCOUNT: 0x0200,
397
- ADS_UF_INTERDOMAIN_TRUST_ACCOUNT: 0x0800,
398
- ADS_UF_WORKSTATION_TRUST_ACCOUNT: 0x1000,
399
- ADS_UF_SERVER_TRUST_ACCOUNT: 0x2000,
400
- ADS_UF_DONT_EXPIRE_PASSWD: 0x10000,
401
- ADS_UF_MNS_LOGON_ACCOUNT: 0x20000,
402
- ADS_UF_SMARTCARD_REQUIRED: 0x40000,
403
- ADS_UF_TRUSTED_FOR_DELEGATION: 0x80000,
404
- ADS_UF_NOT_DELEGATED: 0x100000,
405
- ADS_UF_USE_DES_KEY_ONLY: 0x200000,
406
- ADS_UF_DONT_REQUIRE_PREAUTH: 0x400000,
407
- ADS_UF_PASSWORD_EXPIRED: 0x800000,
421
+ ADS_UF_LOCKOUT: 0x0010,
422
+ ADS_UF_PASSWD_NOTREQD: 0x0020,
423
+ ADS_UF_PASSWD_CANT_CHANGE: 0x0040,
424
+ ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED: 0x0080,
425
+ ADS_UF_TEMP_DUPLICATE_ACCOUNT: 0x0100,
426
+ ADS_UF_NORMAL_ACCOUNT: 0x0200,
427
+ ADS_UF_INTERDOMAIN_TRUST_ACCOUNT: 0x0800,
428
+ ADS_UF_WORKSTATION_TRUST_ACCOUNT: 0x1000,
429
+ ADS_UF_SERVER_TRUST_ACCOUNT: 0x2000,
430
+ ADS_UF_DONT_EXPIRE_PASSWD: 0x10000,
431
+ ADS_UF_MNS_LOGON_ACCOUNT: 0x20000,
432
+ ADS_UF_SMARTCARD_REQUIRED: 0x40000,
433
+ ADS_UF_TRUSTED_FOR_DELEGATION: 0x80000,
434
+ ADS_UF_NOT_DELEGATED: 0x100000,
435
+ ADS_UF_USE_DES_KEY_ONLY: 0x200000,
436
+ ADS_UF_DONT_REQUIRE_PREAUTH: 0x400000,
437
+ ADS_UF_PASSWORD_EXPIRED: 0x800000,
408
438
  ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION: 0x1000000
409
439
  }
410
440