puppet 5.5.17-universal-darwin → 5.5.22-universal-darwin

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 (340) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +4 -5
  4. data/Gemfile.lock +59 -55
  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.rb +5 -2
  12. data/lib/puppet/agent.rb +5 -13
  13. data/lib/puppet/application.rb +1 -1
  14. data/lib/puppet/application/agent.rb +3 -1
  15. data/lib/puppet/application/apply.rb +2 -2
  16. data/lib/puppet/application/describe.rb +3 -9
  17. data/lib/puppet/application/doc.rb +1 -1
  18. data/lib/puppet/application/filebucket.rb +13 -0
  19. data/lib/puppet/application/lookup.rb +1 -1
  20. data/lib/puppet/application/script.rb +2 -2
  21. data/lib/puppet/configurer.rb +106 -31
  22. data/lib/puppet/configurer/downloader.rb +33 -16
  23. data/lib/puppet/daemon.rb +1 -1
  24. data/lib/puppet/defaults.rb +86 -40
  25. data/lib/puppet/error.rb +9 -1
  26. data/lib/puppet/external/nagios/base.rb +1 -1
  27. data/lib/puppet/face/ca.rb +1 -1
  28. data/lib/puppet/face/module/list.rb +5 -5
  29. data/lib/puppet/face/module/search.rb +1 -1
  30. data/lib/puppet/face/module/uninstall.rb +1 -1
  31. data/lib/puppet/face/module/upgrade.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  33. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  34. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  35. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  36. data/lib/puppet/file_system.rb +0 -8
  37. data/lib/puppet/file_system/memory_file.rb +1 -1
  38. data/lib/puppet/file_system/posix.rb +3 -2
  39. data/lib/puppet/file_system/uniquefile.rb +4 -0
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/functions/epp.rb +4 -4
  42. data/lib/puppet/functions/inline_epp.rb +5 -5
  43. data/lib/puppet/functions/new.rb +8 -3
  44. data/lib/puppet/functions/reduce.rb +2 -4
  45. data/lib/puppet/functions/reverse_each.rb +1 -1
  46. data/lib/puppet/functions/step.rb +1 -1
  47. data/lib/puppet/gettext/module_translations.rb +1 -1
  48. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  49. data/lib/puppet/graph/simple_graph.rb +6 -5
  50. data/lib/puppet/indirector/catalog/compiler.rb +8 -0
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  52. data/lib/puppet/indirector/hiera.rb +6 -0
  53. data/lib/puppet/indirector/resource/ral.rb +1 -3
  54. data/lib/puppet/indirector/resource/validator.rb +1 -1
  55. data/lib/puppet/interface.rb +2 -1
  56. data/lib/puppet/loaders.rb +0 -1
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module.rb +1 -1
  59. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  60. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  61. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  64. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  65. data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
  66. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  67. data/lib/puppet/network/http/connection.rb +14 -12
  68. data/lib/puppet/network/http/pool.rb +7 -1
  69. data/lib/puppet/network/http/rack/rest.rb +2 -2
  70. data/lib/puppet/network/http/site.rb +1 -1
  71. data/lib/puppet/network/resolver.rb +2 -2
  72. data/lib/puppet/node/environment.rb +11 -3
  73. data/lib/puppet/parser/ast.rb +1 -1
  74. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  75. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  76. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  77. data/lib/puppet/parser/environment_compiler.rb +3 -0
  78. data/lib/puppet/parser/functions.rb +14 -10
  79. data/lib/puppet/parser/functions/epp.rb +3 -3
  80. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  81. data/lib/puppet/parser/resource.rb +3 -2
  82. data/lib/puppet/parser/resource/param.rb +6 -0
  83. data/lib/puppet/pops/adaptable.rb +7 -13
  84. data/lib/puppet/pops/adapters.rb +8 -4
  85. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  86. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  87. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  88. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  89. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  90. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  91. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  92. data/lib/puppet/pops/issues.rb +5 -0
  93. data/lib/puppet/pops/loaders.rb +1 -1
  94. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  95. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  96. data/lib/puppet/pops/merge_strategy.rb +22 -18
  97. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  98. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  99. data/lib/puppet/pops/parser/locator.rb +1 -1
  100. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  101. data/lib/puppet/pops/puppet_stack.rb +51 -48
  102. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  103. data/lib/puppet/pops/types/iterable.rb +34 -8
  104. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  105. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  106. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  107. data/lib/puppet/pops/types/string_converter.rb +10 -10
  108. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  109. data/lib/puppet/pops/types/types.rb +3 -3
  110. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  111. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  112. data/lib/puppet/property.rb +1 -1
  113. data/lib/puppet/property/ensure.rb +1 -1
  114. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  115. data/lib/puppet/provider/cron/crontab.rb +1 -1
  116. data/lib/puppet/provider/exec.rb +6 -2
  117. data/lib/puppet/provider/group/groupadd.rb +19 -19
  118. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  119. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  120. data/lib/puppet/provider/mount.rb +1 -1
  121. data/lib/puppet/provider/mount/parsed.rb +8 -8
  122. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  123. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +14 -3
  126. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  127. data/lib/puppet/provider/package/dpkg.rb +16 -18
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +4 -2
  130. data/lib/puppet/provider/package/openbsd.rb +14 -2
  131. data/lib/puppet/provider/package/pip.rb +37 -10
  132. data/lib/puppet/provider/package/pkg.rb +18 -5
  133. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  134. data/lib/puppet/provider/package/pkgng.rb +16 -4
  135. data/lib/puppet/provider/package/portage.rb +4 -4
  136. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  137. data/lib/puppet/provider/package/rpm.rb +6 -6
  138. data/lib/puppet/provider/package/windows/package.rb +1 -1
  139. data/lib/puppet/provider/package/yum.rb +28 -20
  140. data/lib/puppet/provider/package/zypper.rb +1 -0
  141. data/lib/puppet/provider/package_targetable.rb +5 -4
  142. data/lib/puppet/provider/parsedfile.rb +1 -1
  143. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  144. data/lib/puppet/provider/selmodule/semodule.rb +43 -26
  145. data/lib/puppet/provider/service/daemontools.rb +9 -9
  146. data/lib/puppet/provider/service/openbsd.rb +1 -1
  147. data/lib/puppet/provider/service/rcng.rb +2 -2
  148. data/lib/puppet/provider/service/runit.rb +2 -8
  149. data/lib/puppet/provider/service/systemd.rb +31 -13
  150. data/lib/puppet/provider/user/directoryservice.rb +31 -6
  151. data/lib/puppet/provider/user/hpux.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +39 -20
  154. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  155. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  156. data/lib/puppet/reference/indirection.rb +2 -2
  157. data/lib/puppet/reference/metaparameter.rb +1 -3
  158. data/lib/puppet/reference/providers.rb +1 -1
  159. data/lib/puppet/reference/type.rb +3 -9
  160. data/lib/puppet/reports.rb +1 -1
  161. data/lib/puppet/resource.rb +1 -1
  162. data/lib/puppet/resource/catalog.rb +1 -1
  163. data/lib/puppet/resource/type.rb +10 -1
  164. data/lib/puppet/settings.rb +3 -3
  165. data/lib/puppet/settings/environment_conf.rb +1 -0
  166. data/lib/puppet/ssl/certificate.rb +2 -1
  167. data/lib/puppet/ssl/certificate_authority.rb +6 -5
  168. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  169. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  170. data/lib/puppet/ssl/host.rb +3 -3
  171. data/lib/puppet/ssl/oids.rb +1 -1
  172. data/lib/puppet/test/test_helper.rb +20 -12
  173. data/lib/puppet/transaction/report.rb +1 -1
  174. data/lib/puppet/transaction/resource_harness.rb +1 -1
  175. data/lib/puppet/type.rb +8 -4
  176. data/lib/puppet/type/cron.rb +1 -1
  177. data/lib/puppet/type/exec.rb +7 -3
  178. data/lib/puppet/type/file.rb +14 -2
  179. data/lib/puppet/type/file/data_sync.rb +5 -1
  180. data/lib/puppet/type/group.rb +4 -2
  181. data/lib/puppet/type/interface.rb +1 -1
  182. data/lib/puppet/type/notify.rb +3 -2
  183. data/lib/puppet/type/package.rb +97 -8
  184. data/lib/puppet/type/schedule.rb +1 -1
  185. data/lib/puppet/type/selboolean.rb +17 -3
  186. data/lib/puppet/type/service.rb +2 -8
  187. data/lib/puppet/type/user.rb +5 -9
  188. data/lib/puppet/util.rb +35 -12
  189. data/lib/puppet/util/autoload.rb +9 -7
  190. data/lib/puppet/util/command_line/trollop.rb +1 -1
  191. data/lib/puppet/util/http_proxy.rb +8 -14
  192. data/lib/puppet/util/instance_loader.rb +1 -1
  193. data/lib/puppet/util/log.rb +1 -1
  194. data/lib/puppet/util/log/destinations.rb +3 -12
  195. data/lib/puppet/util/logging.rb +30 -18
  196. data/lib/puppet/util/metric.rb +2 -2
  197. data/lib/puppet/util/monkey_patches.rb +1 -1
  198. data/lib/puppet/util/nagios_maker.rb +2 -2
  199. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  200. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  201. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  202. data/lib/puppet/util/pidlock.rb +12 -6
  203. data/lib/puppet/util/plist.rb +6 -0
  204. data/lib/puppet/util/provider_features.rb +2 -4
  205. data/lib/puppet/util/rdoc.rb +1 -1
  206. data/lib/puppet/util/reference.rb +1 -1
  207. data/lib/puppet/util/resource_template.rb +1 -1
  208. data/lib/puppet/util/selinux.rb +3 -1
  209. data/lib/puppet/util/windows/adsi.rb +60 -30
  210. data/lib/puppet/util/windows/api_types.rb +45 -32
  211. data/lib/puppet/util/windows/eventlog.rb +1 -6
  212. data/lib/puppet/util/windows/principal.rb +8 -6
  213. data/lib/puppet/util/windows/process.rb +16 -15
  214. data/lib/puppet/util/windows/registry.rb +17 -15
  215. data/lib/puppet/util/windows/security.rb +1 -0
  216. data/lib/puppet/util/windows/sid.rb +3 -3
  217. data/lib/puppet/vendor.rb +1 -1
  218. data/lib/puppet/version.rb +1 -1
  219. data/lib/puppet_pal.rb +2 -2
  220. data/locales/puppet.pot +362 -318
  221. data/man/man5/puppet.conf.5 +39 -9
  222. data/man/man8/puppet-agent.8 +2 -2
  223. data/man/man8/puppet-apply.8 +1 -1
  224. data/man/man8/puppet-ca.8 +1 -1
  225. data/man/man8/puppet-catalog.8 +1 -1
  226. data/man/man8/puppet-cert.8 +1 -1
  227. data/man/man8/puppet-certificate.8 +1 -1
  228. data/man/man8/puppet-certificate_request.8 +1 -1
  229. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  230. data/man/man8/puppet-config.8 +1 -1
  231. data/man/man8/puppet-describe.8 +1 -1
  232. data/man/man8/puppet-device.8 +1 -1
  233. data/man/man8/puppet-doc.8 +1 -1
  234. data/man/man8/puppet-epp.8 +1 -1
  235. data/man/man8/puppet-facts.8 +1 -1
  236. data/man/man8/puppet-filebucket.8 +16 -1
  237. data/man/man8/puppet-generate.8 +1 -1
  238. data/man/man8/puppet-help.8 +1 -1
  239. data/man/man8/puppet-key.8 +1 -1
  240. data/man/man8/puppet-lookup.8 +1 -1
  241. data/man/man8/puppet-man.8 +1 -1
  242. data/man/man8/puppet-master.8 +1 -1
  243. data/man/man8/puppet-module.8 +1 -1
  244. data/man/man8/puppet-node.8 +1 -1
  245. data/man/man8/puppet-parser.8 +1 -1
  246. data/man/man8/puppet-plugin.8 +1 -1
  247. data/man/man8/puppet-report.8 +1 -1
  248. data/man/man8/puppet-resource.8 +1 -1
  249. data/man/man8/puppet-script.8 +1 -1
  250. data/man/man8/puppet-status.8 +1 -1
  251. data/man/man8/puppet.8 +2 -2
  252. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
  253. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  254. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  255. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  256. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  257. data/spec/integration/configurer_spec.rb +66 -0
  258. data/spec/integration/data_binding_spec.rb +1 -0
  259. data/spec/integration/defaults_spec.rb +1 -2
  260. data/spec/integration/faces/plugin_spec.rb +29 -47
  261. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  262. data/spec/integration/parser/compiler_spec.rb +11 -0
  263. data/spec/integration/type/notify_spec.rb +46 -0
  264. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  265. data/spec/integration/util/windows/registry_spec.rb +7 -7
  266. data/spec/shared_contexts/types_setup.rb +2 -0
  267. data/spec/unit/agent_spec.rb +34 -26
  268. data/spec/unit/application/apply_spec.rb +2 -12
  269. data/spec/unit/configurer/downloader_spec.rb +10 -0
  270. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  271. data/spec/unit/configurer_spec.rb +430 -415
  272. data/spec/unit/daemon_spec.rb +0 -1
  273. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  274. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  275. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  276. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  277. data/spec/unit/forge/forge_spec.rb +1 -3
  278. data/spec/unit/forge/repository_spec.rb +1 -3
  279. data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
  280. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  281. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  282. data/spec/unit/network/http/connection_spec.rb +43 -1
  283. data/spec/unit/network/http/pool_spec.rb +32 -0
  284. data/spec/unit/node_spec.rb +7 -4
  285. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  286. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  287. data/spec/unit/provider/exec_spec.rb +209 -0
  288. data/spec/unit/provider/group/groupadd_spec.rb +30 -1
  289. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  290. data/spec/unit/provider/package/aix_spec.rb +29 -0
  291. data/spec/unit/provider/package/apt_spec.rb +13 -2
  292. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  293. data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
  294. data/spec/unit/provider/package/dpkg_spec.rb +35 -7
  295. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  296. data/spec/unit/provider/package/pip_spec.rb +93 -22
  297. data/spec/unit/provider/package/pkg_spec.rb +13 -1
  298. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  299. data/spec/unit/provider/package/pkgng_spec.rb +36 -0
  300. data/spec/unit/provider/package/portage_spec.rb +4 -4
  301. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  302. data/spec/unit/provider/package/yum_spec.rb +90 -0
  303. data/spec/unit/provider/package/zypper_spec.rb +13 -0
  304. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  305. data/spec/unit/provider/selmodule_spec.rb +118 -47
  306. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  307. data/spec/unit/provider/service/runit_spec.rb +24 -0
  308. data/spec/unit/provider/service/systemd_spec.rb +109 -36
  309. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  310. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  311. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  312. data/spec/unit/provider/user/useradd_spec.rb +81 -16
  313. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  314. data/spec/unit/puppet_pal_2pec.rb +3 -0
  315. data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
  316. data/spec/unit/ssl/certificate_spec.rb +7 -0
  317. data/spec/unit/ssl/host_spec.rb +2 -0
  318. data/spec/unit/test/test_helper_spec.rb +17 -0
  319. data/spec/unit/type/exec_spec.rb +6 -12
  320. data/spec/unit/type/file/content_spec.rb +9 -3
  321. data/spec/unit/type/file_spec.rb +9 -4
  322. data/spec/unit/type/package_spec.rb +8 -0
  323. data/spec/unit/type/selboolean_spec.rb +4 -6
  324. data/spec/unit/type/service_spec.rb +9 -8
  325. data/spec/unit/type/user_spec.rb +19 -13
  326. data/spec/unit/util/execution_spec.rb +16 -0
  327. data/spec/unit/util/http_proxy_spec.rb +97 -0
  328. data/spec/unit/util/log/destinations_spec.rb +2 -26
  329. data/spec/unit/util/log_spec.rb +0 -138
  330. data/spec/unit/util/logging_spec.rb +200 -0
  331. data/spec/unit/util/pidlock_spec.rb +67 -40
  332. data/spec/unit/util/plist_spec.rb +20 -0
  333. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  334. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  335. data/spec/unit/util/windows/sid_spec.rb +2 -2
  336. data/tasks/manpages.rake +1 -0
  337. metadata +16 -7
  338. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  339. data/locales/ja/puppet.po +0 -12114
  340. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -196,6 +196,17 @@ describe Puppet::Type.type(:user).provider(:directoryservice) do
196
196
  }
197
197
  end
198
198
 
199
+ let (:dsimport_preamble) do
200
+ '0x0A 0x5C 0x3A 0x2C dsRecTypeStandard:Users 2 dsAttrTypeStandard:RecordName base64:dsAttrTypeNative:ShadowHashData'
201
+ end
202
+
203
+ let (:dsimport_contents) do
204
+ <<-DSIMPORT
205
+ #{dsimport_preamble}
206
+ #{username}:#{Base64.strict_encode64(sha512_embedded_bplist)}
207
+ DSIMPORT
208
+ end
209
+
199
210
  # The below represents output of 'dscl -plist . readall /Users' converted to
200
211
  # a native Ruby hash if only one user were installed on the system.
201
212
  # This lets us check the behavior of all the methods necessary to return a
@@ -960,6 +971,24 @@ end
960
971
  end
961
972
  end
962
973
 
974
+ describe '#set_shadow_hash_data' do
975
+ let(:users_plist) { {'ShadowHashData' => ['string_data'] } }
976
+
977
+ it 'should flush the plist data to disk on OS X < 10.15' do
978
+ allow(provider.class).to receive(:get_os_version).and_return('10.12')
979
+
980
+ expect(provider).to receive(:write_users_plist_to_disk)
981
+ provider.set_shadow_hash_data(users_plist, pbkdf2_embedded_plist)
982
+ end
983
+
984
+ it 'should flush the plist data a temporary file on OS X >= 10.15' do
985
+ allow(provider.class).to receive(:get_os_version).and_return('10.15')
986
+
987
+ expect(provider).to receive(:write_and_import_shadow_hash_data)
988
+ provider.set_shadow_hash_data(users_plist, pbkdf2_embedded_plist)
989
+ end
990
+ end
991
+
963
992
  describe '#set_salted_pbkdf2' do
964
993
  let(:users_plist) { {'ShadowHashData' => ['string_data'] } }
965
994
  let(:entropy_shadow_hash_data) do
@@ -1011,6 +1040,18 @@ end
1011
1040
  end
1012
1041
  end
1013
1042
 
1043
+ describe '#write_and_import_shadow_hash_data' do
1044
+ it 'should save the passed plist to a temporary file and import it' do
1045
+ tmpfile = double('tempfile', :path => "/tmp/dsimport_#{username}", :flush => nil)
1046
+ allow(Tempfile).to receive(:create).and_yield(tmpfile)
1047
+ allow(provider).to receive(:dscl).with('.', 'delete', user_path, 'ShadowHashData')
1048
+
1049
+ expect(tmpfile).to receive(:write).with(dsimport_contents)
1050
+ expect(provider).to receive(:dsimport).with(tmpfile.path, '/Local/Default', 'M')
1051
+ provider.write_and_import_shadow_hash_data(sha512_embedded_bplist)
1052
+ end
1053
+ end
1054
+
1014
1055
  describe '#merge_attribute_with_dscl' do
1015
1056
  it 'should raise an error if a dscl command raises an error' do
1016
1057
  expect(provider).to receive(:dscl).with('.', '-merge', user_path, 'GeneratedUID', 'GUID').and_raise(Puppet::ExecutionFailure, 'boom')
@@ -56,14 +56,14 @@ describe Puppet::Type.type(:user).provider(:hpuxuseradd), :unless => Puppet.feat
56
56
  it "should add modprpw to modifycmd if Trusted System" do
57
57
  allow(resource).to receive(:allowdupe?).and_return(true)
58
58
  expect(provider).to receive(:exec_getprpw).with('root','-m uid').and_return('uid=0')
59
- expect(provider).to receive(:execute).with(['/usr/sam/lbin/usermod.sam', '-u', 1000, '-o', 'testuser', '-F', ';', '/usr/lbin/modprpw', '-v', '-l', 'testuser'], hash_including(custom_environment: {}))
59
+ expect(provider).to receive(:execute).with(['/usr/sam/lbin/usermod.sam', '-F', '-u', 1000, '-o', 'testuser', ';', '/usr/lbin/modprpw', '-v', '-l', 'testuser'], hash_including(custom_environment: {}))
60
60
  provider.uid = 1000
61
61
  end
62
62
 
63
63
  it "should not add modprpw if not Trusted System" do
64
64
  allow(resource).to receive(:allowdupe?).and_return(true)
65
65
  expect(provider).to receive(:exec_getprpw).with('root','-m uid').and_return('System is not trusted')
66
- expect(provider).to receive(:execute).with(['/usr/sam/lbin/usermod.sam', '-u', 1000, '-o', 'testuser', '-F'], hash_including(custom_environment: {}))
66
+ expect(provider).to receive(:execute).with(['/usr/sam/lbin/usermod.sam', '-F', '-u', 1000, '-o', 'testuser'], hash_including(custom_environment: {}))
67
67
  provider.uid = 1000
68
68
  end
69
69
  end
@@ -45,6 +45,7 @@ describe Puppet::Type.type(:user).provider(:openbsd) do
45
45
  describe "#addcmd" do
46
46
  it "should return an array with the full command and expiry as MM/DD/YY" do
47
47
  allow(Facter).to receive(:value).with(:osfamily).and_return('OpenBSD')
48
+ allow(Facter).to receive(:value).with(:operatingsystemmajrelease)
48
49
  resource[:expiry] = "1997-06-01"
49
50
  expect(provider.addcmd).to eq(['/usr/sbin/useradd', '-e', 'June 01 1997', 'myuser'])
50
51
  end
@@ -72,20 +72,24 @@ describe Puppet::Type.type(:user).provider(:useradd) do
72
72
  provider.create
73
73
  end
74
74
 
75
- it "should use -G to set groups" do
76
- allow(Facter).to receive(:value).with(:osfamily).and_return('Not RedHat')
77
- resource[:ensure] = :present
78
- resource[:groups] = ['group1', 'group2']
79
- expect(provider).to receive(:execute).with(['/usr/sbin/useradd', '-G', 'group1,group2', 'myuser'], kind_of(Hash))
80
- provider.create
81
- end
75
+ context "when setting groups" do
76
+ it "uses -G to set groups" do
77
+ allow(Facter).to receive(:value).with(:osfamily).and_return('Solaris')
78
+ allow(Facter).to receive(:value).with(:operatingsystemmajrelease)
79
+ resource[:ensure] = :present
80
+ resource[:groups] = ['group1', 'group2']
81
+ expect(provider).to receive(:execute).with(['/usr/sbin/useradd', '-G', 'group1,group2', 'myuser'], kind_of(Hash))
82
+ provider.create
83
+ end
82
84
 
83
- it "should use -G to set groups without -M on RedHat" do
84
- allow(Facter).to receive(:value).with(:osfamily).and_return('RedHat')
85
- resource[:ensure] = :present
86
- resource[:groups] = ['group1', 'group2']
87
- expect(provider).to receive(:execute).with(['/usr/sbin/useradd', '-G', 'group1,group2', '-M', 'myuser'], kind_of(Hash))
88
- provider.create
85
+ it "uses -G to set groups with -M on supported systems" do
86
+ allow(Facter).to receive(:value).with(:osfamily).and_return('RedHat')
87
+ allow(Facter).to receive(:value).with(:operatingsystemmajrelease)
88
+ resource[:ensure] = :present
89
+ resource[:groups] = ['group1', 'group2']
90
+ expect(provider).to receive(:execute).with(['/usr/sbin/useradd', '-G', 'group1,group2', '-M', 'myuser'], kind_of(Hash))
91
+ provider.create
92
+ end
89
93
  end
90
94
 
91
95
  it "should add -o when allowdupe is enabled and the user is being created" do
@@ -315,6 +319,65 @@ describe Puppet::Type.type(:user).provider(:useradd) do
315
319
  expect(provider).to receive(:execute).with(['/usr/sbin/usermod', '-e', '', 'myuser'], hash_including(custom_environment: {}))
316
320
  provider.expiry = :absent
317
321
  end
322
+
323
+ it "should use -e with -1 when the expiry property is removed on SLES11" do
324
+ allow(Facter).to receive(:value).with(:operatingsystem).and_return('SLES')
325
+ allow(Facter).to receive(:value).with(:operatingsystemmajrelease).and_return('11')
326
+ resource[:expiry] = :absent
327
+ expect(provider).to receive(:execute).with(['/usr/sbin/usermod', '-e', -1, 'myuser'], hash_including(custom_environment: {}))
328
+ provider.expiry = :absent
329
+ end
330
+ end
331
+
332
+ describe "#comment" do
333
+ before { described_class.has_feature :libuser }
334
+
335
+ let(:content) { "myuser:x:x:x:local comment:x:x" }
336
+
337
+ it "should return the local comment string when forcelocal is true" do
338
+ resource[:forcelocal] = true
339
+ allow(File).to receive(:read).with('/etc/passwd').and_return(content)
340
+ expect(provider.comment).to eq('local comment')
341
+ end
342
+
343
+ it "should fall back to nameservice comment string when forcelocal is false" do
344
+ resource[:forcelocal] = false
345
+ allow(provider).to receive(:get).with(:comment).and_return('remote comment')
346
+ expect(provider).not_to receive(:localcomment)
347
+ expect(provider.comment).to eq('remote comment')
348
+ end
349
+ end
350
+
351
+ describe "#finduser" do
352
+ before { allow(File).to receive(:read).with('/etc/passwd').and_return(content) }
353
+
354
+ let(:content) { "sample_account:sample_password:sample_uid:sample_gid:sample_gecos:sample_directory:sample_shell" }
355
+ let(:output) do
356
+ {
357
+ account: 'sample_account',
358
+ password: 'sample_password',
359
+ uid: 'sample_uid',
360
+ gid: 'sample_gid',
361
+ gecos: 'sample_gecos',
362
+ directory: 'sample_directory',
363
+ shell: 'sample_shell',
364
+ }
365
+ end
366
+
367
+ [:account, :password, :uid, :gid, :gecos, :directory, :shell].each do |key|
368
+ it "finds an user by #{key} when asked" do
369
+ expect(provider.finduser(key, "sample_#{key}")).to eq(output)
370
+ end
371
+ end
372
+
373
+ it "returns false when specified key/value pair is not found" do
374
+ expect(provider.finduser(:account, 'invalid_account')).to eq(false)
375
+ end
376
+
377
+ it "reads the user file only once per resource" do
378
+ expect(File).to receive(:read).with('/etc/passwd').once
379
+ 5.times { provider.finduser(:account, 'sample_account') }
380
+ end
318
381
  end
319
382
 
320
383
  describe "#check_allow_dup" do
@@ -370,15 +433,17 @@ describe Puppet::Type.type(:user).provider(:useradd) do
370
433
  provider.delete
371
434
  end
372
435
 
373
- it "should use -M flag if home is not managed and on Redhat" do
436
+ it "should use -M flag if home is not managed on a supported system" do
374
437
  allow(Facter).to receive(:value).with(:osfamily).and_return("RedHat")
438
+ allow(Facter).to receive(:value).with(:operatingsystemmajrelease)
375
439
  resource[:managehome] = :false
376
440
  expect(provider).to receive(:execute).with(include('-M'), kind_of(Hash))
377
441
  provider.create
378
442
  end
379
443
 
380
- it "should not use -M flag if home is not managed and not on Redhat" do
381
- allow(Facter).to receive(:value).with(:osfamily).and_return("not RedHat")
444
+ it "should not use -M flag if home is not managed on an unsupported system" do
445
+ allow(Facter).to receive(:value).with(:osfamily).and_return("Suse")
446
+ allow(Facter).to receive(:value).with(:operatingsystemmajrelease).and_return("11")
382
447
  resource[:managehome] = :false
383
448
  expect(provider).to receive(:execute).with(excluding('-M'), kind_of(Hash))
384
449
  provider.create
@@ -78,9 +78,9 @@ describe Puppet::Type.type(:user).provider(:windows_adsi), :if => Puppet.feature
78
78
  let(:group3) { double(:account => 'group3', :domain => '.', :sid => 'group3sid') }
79
79
 
80
80
  before :each do
81
- allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('group1').and_return(group1)
82
- allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('group2').and_return(group2)
83
- allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('group3').and_return(group3)
81
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('group1', any_args).and_return(group1)
82
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('group2', any_args).and_return(group2)
83
+ allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('group3', any_args).and_return(group3)
84
84
  end
85
85
 
86
86
  it "should return true for same lists of members" do
@@ -714,6 +714,9 @@ describe 'Puppet Pal' do
714
714
 
715
715
  context 'facts are supported such that' do
716
716
  it 'they are obtained if they are not given' do
717
+ facts = Puppet::Node::Facts.new(Puppet[:certname], 'puppetversion' => Puppet.version)
718
+ Puppet::Node::Facts.indirection.save(facts)
719
+
717
720
  testing_env_dir # creates the structure
718
721
  result = Puppet::Pal.in_tmp_environment('pal_env', modulepath: modulepath ) do |ctx|
719
722
  ctx.with_script_compiler {|c| c.evaluate_string("$facts =~ Hash and $facts[puppetversion] == '#{Puppet.version}'") }
@@ -876,9 +876,8 @@ describe Puppet::SSL::CertificateAuthority do
876
876
  @ca.verify("me")
877
877
  end
878
878
 
879
- it "should set the store purpose to OpenSSL::X509::PURPOSE_SSL_CLIENT" do
880
- Puppet[:cacert] = cacert
881
- expect(@store).to receive(:add_file).with(cacert)
879
+ it "should set the store purpose to OpenSSL::X509::PURPOSE_ANY" do
880
+ expect(@store).to receive(:purpose=).with OpenSSL::X509::PURPOSE_ANY
882
881
 
883
882
  @ca.verify("me")
884
883
  end
@@ -138,6 +138,13 @@ describe Puppet::SSL::Certificate do
138
138
  expect(cert.custom_extensions).to include('oid' => '1.3.6.1.4.1.34380.1.2.1', 'value' => 'x509 :(')
139
139
  end
140
140
 
141
+ it "returns extensions under the ppAuthCertExt" do
142
+ exts = {'pp_auth_role' => 'taketwo'}
143
+ cert = build_cert(:extension_requests => exts)
144
+ sign_wrapped_cert(cert)
145
+ expect(cert.custom_extensions).to include('oid' => 'pp_auth_role', 'value' => 'taketwo')
146
+ end
147
+
141
148
  it "doesn't return standard extensions" do
142
149
  cert = build_cert(:dns_alt_names => 'foo')
143
150
  expect(cert.custom_extensions).to be_empty
@@ -158,6 +158,7 @@ describe Puppet::SSL::Host do
158
158
 
159
159
  it "should not include defaults if we can't resolve our fqdn" do
160
160
  allow(Puppet::SSL::CertificateAuthority).to receive(:ca?).and_return(true)
161
+ allow(Facter).to receive(:value).and_call_original
161
162
  allow(Facter).to receive(:value).with(:fqdn).and_return(nil)
162
163
 
163
164
  expect(@cr).to receive(:generate).with(@key, {})
@@ -167,6 +168,7 @@ describe Puppet::SSL::Host do
167
168
 
168
169
  it "should provide defaults if we're bootstrapping the local master" do
169
170
  allow(Puppet::SSL::CertificateAuthority).to receive(:ca?).and_return(true)
171
+ allow(Facter).to receive(:value).and_call_original
170
172
  allow(Facter).to receive(:value).with(:fqdn).and_return('web.foo.com')
171
173
  allow(Facter).to receive(:value).with(:domain).and_return('foo.com')
172
174
 
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe "TestHelper" do
4
+ context "#after_each_test" do
5
+ it "restores the original environment" do
6
+ varname = 'test_helper_spec-test_variable'
7
+ Puppet::Util.set_env(varname, "\u16A0")
8
+
9
+ expect(Puppet::Util.get_env(varname)).to eq("\u16A0")
10
+
11
+ # Prematurely trigger the after_each_test method
12
+ Puppet::Test::TestHelper.after_each_test
13
+
14
+ expect(Puppet::Util::get_env(varname)).to be_nil
15
+ end
16
+ end
17
+ end
@@ -150,16 +150,13 @@ RSpec.describe Puppet::Type.type(:exec) do
150
150
  end
151
151
  end
152
152
 
153
- it "should redact the command on failure" do
153
+ it "should redact the sensitive command on failure" do
154
154
  output = "output1\noutput2\n"
155
155
  expect { exec_tester('false', 1, :output => output, :logoutput => :on_failure, :sensitive_parameters => [:command]).refresh }.
156
156
  to raise_error(Puppet::Error, /^\[command redacted\] returned 1 instead of/)
157
157
 
158
- output.split("\n").each do |line|
159
- log = @logs.shift
160
- expect(log.level).to eq(:err)
161
- expect(log.message).to eq(line)
162
- end
158
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: '[output redacted]'))
159
+ expect(@logs).to_not include(an_object_having_attributes(message: /output1|output2/))
163
160
  end
164
161
 
165
162
  it "should log the output on failure when returns is specified as an array" do
@@ -177,7 +174,7 @@ RSpec.describe Puppet::Type.type(:exec) do
177
174
  end
178
175
  end
179
176
 
180
- it "should redact the command on failure when returns is specified as an array" do
177
+ it "should redact the sensitive command on failure when returns is specified as an array" do
181
178
  output = "output1\noutput2\n"
182
179
 
183
180
  expect {
@@ -185,11 +182,8 @@ RSpec.describe Puppet::Type.type(:exec) do
185
182
  :logoutput => :on_failure, :sensitive_parameters => [:command]).refresh
186
183
  }.to raise_error(Puppet::Error, /^\[command redacted\] returned 1 instead of/)
187
184
 
188
- output.split("\n").each do |line|
189
- log = @logs.shift
190
- expect(log.level).to eq(:err)
191
- expect(log.message).to eq(line)
192
- end
185
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: '[output redacted]'))
186
+ expect(@logs).to_not include(an_object_having_attributes(message: /output1|output2/))
193
187
  end
194
188
 
195
189
  it "shouldn't log the output on success" do
@@ -200,15 +200,21 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
200
200
  end
201
201
 
202
202
  it "prints the diff" do
203
- expect(content).to receive(:diff).and_return("my diff").once
204
- expect(content).to receive(:debug).with("\nmy diff").once
203
+ expect(content).to receive(:diff).and_return("my diff")
204
+ expect(content).to receive(:debug).with("\nmy diff")
205
+ expect(content).not_to be_safe_insync("other content")
206
+ end
207
+
208
+ it "prints binary file notice if diff is not valid encoding" do
209
+ expect(content).to receive(:diff).and_return("\xc7\xd1\xfc\x84")
210
+ expect(content).to receive(:debug).with(/\nBinary files #{filename} and .* differ/)
205
211
  expect(content).not_to be_safe_insync("other content")
206
212
  end
207
213
 
208
214
  it "redacts the diff when the property is sensitive" do
209
215
  content.sensitive = true
210
216
  expect(content).not_to receive(:diff)
211
- expect(content).to receive(:debug).with("[diff redacted]").once
217
+ expect(content).to receive(:debug).with("[diff redacted]")
212
218
  expect(content).not_to be_safe_insync("other content")
213
219
  end
214
220
  end
@@ -477,6 +477,9 @@ describe Puppet::Type.type(:file) do
477
477
  end
478
478
 
479
479
  describe "#recurse" do
480
+ let(:name) { 'bar' }
481
+ let(:child) { double('puppet_type_file') }
482
+
480
483
  before do
481
484
  file[:recurse] = true
482
485
  @metadata = Puppet::FileServing::Metadata
@@ -485,8 +488,9 @@ describe Puppet::Type.type(:file) do
485
488
  describe "and a source is set" do
486
489
  it "should pass the already-discovered resources to recurse_remote" do
487
490
  file[:source] = File.expand_path(__FILE__)
488
- allow(file).to receive(:recurse_local).and_return(:foo => "bar")
489
- expect(file).to receive(:recurse_remote).with(:foo => "bar").and_return([])
491
+ allow(child).to receive(:[]).with(:path).and_return(name)
492
+ allow(file).to receive(:recurse_local).and_return(name => child)
493
+ expect(file).to receive(:recurse_remote).with(name => child).and_return([])
490
494
  file.recurse
491
495
  end
492
496
  end
@@ -494,8 +498,9 @@ describe Puppet::Type.type(:file) do
494
498
  describe "and a target is set" do
495
499
  it "should use recurse_link" do
496
500
  file[:target] = File.expand_path(__FILE__)
497
- allow(file).to receive(:recurse_local).and_return(:foo => "bar")
498
- expect(file).to receive(:recurse_link).with(:foo => "bar").and_return([])
501
+ allow(child).to receive(:[]).with(:path).and_return(name)
502
+ allow(file).to receive(:recurse_local).and_return(name => child)
503
+ expect(file).to receive(:recurse_link).with(name => child).and_return([])
499
504
  file.recurse
500
505
  end
501
506
  end
@@ -30,6 +30,10 @@ describe Puppet::Type.type(:package) do
30
30
  expect(Puppet::Type.type(:package).provider_feature(:versionable)).not_to be_nil
31
31
  end
32
32
 
33
+ it "should have a :supports_flavors feature" do
34
+ expect(Puppet::Type.type(:package).provider_feature(:supports_flavors)).not_to be_nil
35
+ end
36
+
33
37
  it "should have a :package_settings feature that requires :package_settings_insync?, :package_settings and :package_settings=" do
34
38
  expect(Puppet::Type.type(:package).provider_feature(:package_settings).methods).to eq([:package_settings_insync?, :package_settings, :package_settings=])
35
39
  end
@@ -53,6 +57,10 @@ describe Puppet::Type.type(:package) do
53
57
  it "should have a package_settings property" do
54
58
  expect(Puppet::Type.type(:package).attrtype(:package_settings)).to eq(:property)
55
59
  end
60
+
61
+ it "should have a flavor property" do
62
+ expect(Puppet::Type.type(:package).attrtype(:flavor)).to eq(:property)
63
+ end
56
64
  end
57
65
 
58
66
  describe "when validating attribute values" do
@@ -24,12 +24,10 @@ describe Puppet::Type.type(:selboolean), "when validating values" do
24
24
  allow(@provider_class).to receive(:new).and_return(@provider)
25
25
  end
26
26
 
27
- it "should support :on as a value to :value" do
28
- Puppet::Type.type(:selboolean).new(:name => "yay", :value => :on)
29
- end
30
-
31
- it "should support :off as a value to :value" do
32
- Puppet::Type.type(:selboolean).new(:name => "yay", :value => :off)
27
+ [:on, :off, :true, :false, true, false].each do |val|
28
+ it "should support #{val.inspect} as a value to :value" do
29
+ Puppet::Type.type(:selboolean).new(:name => "yay", :value => val)
30
+ end
33
31
  end
34
32
 
35
33
  it "should support :true as a value to :persistent" do
@@ -234,20 +234,21 @@ describe Puppet::Type.type(:service), "when changing the host" do
234
234
  @service.property(:enable).sync
235
235
  end
236
236
 
237
- it "should always consider the enable state of a static service to be in sync" do
237
+ it "should let superclass implementation resolve insyncness when provider does not respond to the 'enabled_insync?' method" do
238
238
  allow(@service.provider.class).to receive(:supports_parameter?).and_return(true)
239
- expect(@service.provider).to receive(:cached_enabled?).and_return('static')
240
- @service[:enable] = false
241
- expect(Puppet).to receive(:debug).with("Unable to enable or disable static service yay")
239
+ @service[:enable] = true
240
+ allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?).and_return(false)
241
+
242
242
  expect(@service.property(:enable).insync?(:true)).to eq(true)
243
243
  end
244
244
 
245
- it "should determine insyncness normally when the service is not static" do
245
+ it "insyncness should be resolved by provider instead of superclass implementation when provider responds to the 'enabled_insync?' method" do
246
246
  allow(@service.provider.class).to receive(:supports_parameter?).and_return(true)
247
- expect(@service.provider).to receive(:cached_enabled?).and_return('true')
248
247
  @service[:enable] = true
249
- expect(Puppet).not_to receive(:debug)
250
- expect(@service.property(:enable).insync?(:true)).to eq(true)
248
+ allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?).and_return(true)
249
+ allow(@service.provider).to receive(:enabled_insync?).and_return(false)
250
+
251
+ expect(@service.property(:enable).insync?(:true)).to eq(false)
251
252
  end
252
253
 
253
254
  it "should sync the service's enable state when changing the state of :ensure if :enable is being managed" do