puppet 4.3.2 → 4.4.0

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 (487) hide show
  1. checksums.yaml +4 -4
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/debian/README.source +1 -1
  9. data/ext/debian/control +1 -1
  10. data/ext/debian/copyright +4 -4
  11. data/ext/debian/puppetmaster.README.debian +11 -9
  12. data/ext/emacs/puppet-mode.el +1 -1
  13. data/ext/envpuppet +2 -2
  14. data/ext/ips/puppetagent.xml +1 -1
  15. data/ext/ips/puppetmaster.xml +1 -1
  16. data/ext/project_data.yaml +8 -0
  17. data/ext/puppet-test +3 -3
  18. data/ext/rack/example-passenger-vhost.conf +1 -1
  19. data/ext/redhat/puppet.spec.erb +2 -2
  20. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  21. data/ext/solaris/pkginfo +1 -1
  22. data/ext/solaris/smf/puppet.xml +1 -1
  23. data/ext/suse/puppet.spec +2 -2
  24. data/ext/upload_facts.rb +1 -1
  25. data/ext/windows/puppet_interactive.bat +6 -0
  26. data/ext/windows/puppet_shell.bat +9 -0
  27. data/ext/windows/run_puppet_interactive.bat +9 -0
  28. data/ext/yaml_nodes.rb +1 -1
  29. data/install.rb +30 -20
  30. data/lib/puppet/agent.rb +1 -1
  31. data/lib/puppet/application/agent.rb +4 -2
  32. data/lib/puppet/application/apply.rb +7 -4
  33. data/lib/puppet/application/cert.rb +1 -1
  34. data/lib/puppet/application/device.rb +1 -1
  35. data/lib/puppet/application/filebucket.rb +1 -1
  36. data/lib/puppet/application/inspect.rb +1 -1
  37. data/lib/puppet/application/lookup.rb +4 -4
  38. data/lib/puppet/application/master.rb +2 -2
  39. data/lib/puppet/application/resource.rb +1 -1
  40. data/lib/puppet/configurer.rb +100 -22
  41. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  42. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  43. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  44. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  45. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  46. data/lib/puppet/defaults.rb +65 -19
  47. data/lib/puppet/environments.rb +3 -1
  48. data/lib/puppet/face/config.rb +1 -1
  49. data/lib/puppet/face/epp.rb +1 -1
  50. data/lib/puppet/face/help/man.erb +1 -1
  51. data/lib/puppet/face/module/install.rb +6 -6
  52. data/lib/puppet/face/parser.rb +12 -9
  53. data/lib/puppet/face/status.rb +2 -1
  54. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  55. data/lib/puppet/feature/telnet.rb +9 -0
  56. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  57. data/lib/puppet/file_serving/metadata.rb +18 -2
  58. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  59. data/lib/puppet/file_system.rb +2 -2
  60. data/lib/puppet/file_system/file_impl.rb +2 -2
  61. data/lib/puppet/file_system/memory_impl.rb +1 -1
  62. data/lib/puppet/file_system/uniquefile.rb +1 -1
  63. data/lib/puppet/forge.rb +1 -1
  64. data/lib/puppet/forge/repository.rb +1 -31
  65. data/lib/puppet/functions.rb +45 -6
  66. data/lib/puppet/functions/assert_type.rb +9 -9
  67. data/lib/puppet/functions/each.rb +5 -13
  68. data/lib/puppet/functions/filter.rb +5 -14
  69. data/lib/puppet/functions/map.rb +6 -14
  70. data/lib/puppet/functions/reduce.rb +5 -13
  71. data/lib/puppet/functions/reverse_each.rb +82 -0
  72. data/lib/puppet/functions/scanf.rb +15 -18
  73. data/lib/puppet/functions/slice.rb +22 -36
  74. data/lib/puppet/functions/split.rb +2 -2
  75. data/lib/puppet/functions/step.rb +88 -0
  76. data/lib/puppet/functions/type.rb +70 -0
  77. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  78. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  79. data/lib/puppet/indirector/file_content/http.rb +15 -0
  80. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  81. data/lib/puppet/indirector/generic_http.rb +16 -0
  82. data/lib/puppet/indirector/node/exec.rb +1 -1
  83. data/lib/puppet/indirector/node/ldap.rb +1 -1
  84. data/lib/puppet/indirector/rest.rb +2 -1
  85. data/lib/puppet/info_service/class_information_service.rb +13 -12
  86. data/lib/puppet/loaders.rb +1 -0
  87. data/lib/puppet/module.rb +3 -0
  88. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  89. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  90. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  91. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  92. data/lib/puppet/network/http/pool.rb +9 -0
  93. data/lib/puppet/node.rb +1 -1
  94. data/lib/puppet/node/environment.rb +11 -2
  95. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  96. data/lib/puppet/parser/compiler.rb +3 -3
  97. data/lib/puppet/parser/environment_compiler.rb +0 -1
  98. data/lib/puppet/parser/functions.rb +28 -16
  99. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  100. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  101. data/lib/puppet/parser/functions/map.rb +1 -1
  102. data/lib/puppet/parser/functions/scanf.rb +15 -26
  103. data/lib/puppet/parser/functions/slice.rb +17 -24
  104. data/lib/puppet/parser/functions/split.rb +1 -1
  105. data/lib/puppet/parser/resource.rb +19 -17
  106. data/lib/puppet/parser/scope.rb +176 -5
  107. data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
  108. data/lib/puppet/pops.rb +0 -8
  109. data/lib/puppet/pops/adaptable.rb +4 -1
  110. data/lib/puppet/pops/adapters.rb +38 -13
  111. data/lib/puppet/pops/binder/binder.rb +21 -17
  112. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  113. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  114. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  115. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  116. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  117. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  118. data/lib/puppet/pops/binder/injector.rb +53 -48
  119. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  120. data/lib/puppet/pops/binder/producers.rb +67 -62
  121. data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
  122. data/lib/puppet/pops/evaluator/closure.rb +84 -68
  123. data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
  124. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  125. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  126. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  127. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  128. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  129. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  130. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  131. data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
  132. data/lib/puppet/pops/issue_reporter.rb +6 -4
  133. data/lib/puppet/pops/issues.rb +34 -11
  134. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  135. data/lib/puppet/pops/loader/loader.rb +1 -1
  136. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  137. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  138. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
  139. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  140. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  141. data/lib/puppet/pops/loaders.rb +51 -9
  142. data/lib/puppet/pops/lookup.rb +14 -12
  143. data/lib/puppet/pops/merge_strategy.rb +16 -19
  144. data/lib/puppet/pops/model/factory.rb +26 -2
  145. data/lib/puppet/pops/model/model.rb +8 -8
  146. data/lib/puppet/pops/model/model_label_provider.rb +13 -7
  147. data/lib/puppet/pops/model/model_meta.rb +17 -0
  148. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  149. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  150. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  151. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  152. data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
  153. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  154. data/lib/puppet/pops/parser/lexer2.rb +26 -19
  155. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  156. data/lib/puppet/pops/parser/locator.rb +21 -0
  157. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  158. data/lib/puppet/pops/parser/slurp_support.rb +11 -7
  159. data/lib/puppet/pops/types/class_loader.rb +23 -19
  160. data/lib/puppet/pops/types/enumeration.rb +9 -26
  161. data/lib/puppet/pops/types/iterable.rb +308 -0
  162. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  163. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  164. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  165. data/lib/puppet/pops/types/type_calculator.rb +138 -381
  166. data/lib/puppet/pops/types/type_factory.rb +91 -57
  167. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  168. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  169. data/lib/puppet/pops/types/type_parser.rb +159 -112
  170. data/lib/puppet/pops/types/types.rb +2057 -1247
  171. data/lib/puppet/pops/utils.rb +11 -10
  172. data/lib/puppet/pops/validation.rb +11 -9
  173. data/lib/puppet/pops/validation/checker4_0.rb +83 -55
  174. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  175. data/lib/puppet/provider/aixobject.rb +1 -1
  176. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  177. data/lib/puppet/provider/cron/crontab.rb +1 -1
  178. data/lib/puppet/provider/exec/windows.rb +1 -1
  179. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  180. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  181. data/lib/puppet/provider/package/appdmg.rb +3 -2
  182. data/lib/puppet/provider/package/dnf.rb +1 -1
  183. data/lib/puppet/provider/package/pip.rb +5 -8
  184. data/lib/puppet/provider/package/pip3.rb +1 -1
  185. data/lib/puppet/provider/package/pkg.rb +1 -1
  186. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  187. data/lib/puppet/provider/package/pkgng.rb +13 -4
  188. data/lib/puppet/provider/package/windows.rb +1 -1
  189. data/lib/puppet/provider/package/yum.rb +1 -1
  190. data/lib/puppet/provider/package/zypper.rb +19 -0
  191. data/lib/puppet/provider/service/debian.rb +2 -2
  192. data/lib/puppet/provider/service/launchd.rb +6 -18
  193. data/lib/puppet/provider/service/systemd.rb +9 -2
  194. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  195. data/lib/puppet/provider/user/aix.rb +1 -1
  196. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  197. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  198. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  199. data/lib/puppet/reference/configuration.rb +1 -1
  200. data/lib/puppet/reference/providers.rb +1 -1
  201. data/lib/puppet/resource.rb +15 -12
  202. data/lib/puppet/resource/capability_finder.rb +20 -13
  203. data/lib/puppet/resource/catalog.rb +60 -3
  204. data/lib/puppet/resource/status.rb +11 -2
  205. data/lib/puppet/resource/type.rb +28 -38
  206. data/lib/puppet/settings.rb +1 -1
  207. data/lib/puppet/settings/config_file.rb +1 -1
  208. data/lib/puppet/settings/environment_conf.rb +13 -5
  209. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  210. data/lib/puppet/ssl/certificate_request.rb +4 -4
  211. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  212. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  213. data/lib/puppet/test/test_helper.rb +16 -4
  214. data/lib/puppet/transaction.rb +15 -2
  215. data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
  216. data/lib/puppet/transaction/report.rb +31 -1
  217. data/lib/puppet/transaction/resource_harness.rb +0 -25
  218. data/lib/puppet/type.rb +11 -11
  219. data/lib/puppet/type/augeas.rb +1 -1
  220. data/lib/puppet/type/cron.rb +12 -12
  221. data/lib/puppet/type/file.rb +91 -39
  222. data/lib/puppet/type/file/checksum_value.rb +53 -0
  223. data/lib/puppet/type/file/content.rb +26 -111
  224. data/lib/puppet/type/file/data_sync.rb +84 -0
  225. data/lib/puppet/type/file/ensure.rb +17 -14
  226. data/lib/puppet/type/file/selcontext.rb +1 -1
  227. data/lib/puppet/type/file/source.rb +103 -18
  228. data/lib/puppet/type/filebucket.rb +1 -1
  229. data/lib/puppet/type/interface.rb +8 -3
  230. data/lib/puppet/type/macauthorization.rb +1 -1
  231. data/lib/puppet/type/package.rb +6 -0
  232. data/lib/puppet/type/schedule.rb +1 -1
  233. data/lib/puppet/type/stage.rb +1 -1
  234. data/lib/puppet/type/user.rb +19 -17
  235. data/lib/puppet/type/yumrepo.rb +20 -0
  236. data/lib/puppet/util.rb +109 -22
  237. data/lib/puppet/util/autoload.rb +16 -11
  238. data/lib/puppet/util/checksums.rb +74 -31
  239. data/lib/puppet/util/execution.rb +1 -1
  240. data/lib/puppet/util/http_proxy.rb +72 -0
  241. data/lib/puppet/util/log.rb +2 -0
  242. data/lib/puppet/util/logging.rb +43 -1
  243. data/lib/puppet/util/monkey_patches.rb +2 -2
  244. data/lib/puppet/util/multi_match.rb +51 -0
  245. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  246. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  247. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  248. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  249. data/lib/puppet/util/plist.rb +130 -0
  250. data/lib/puppet/util/resource_template.rb +1 -1
  251. data/lib/puppet/util/run_mode.rb +2 -2
  252. data/lib/puppet/util/skip_tags.rb +9 -0
  253. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  254. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  255. data/lib/puppet/util/windows/adsi.rb +4 -4
  256. data/lib/puppet/util/windows/api_types.rb +24 -18
  257. data/lib/puppet/util/windows/com.rb +3 -3
  258. data/lib/puppet/util/windows/error.rb +1 -1
  259. data/lib/puppet/util/windows/file.rb +8 -8
  260. data/lib/puppet/util/windows/principal.rb +23 -14
  261. data/lib/puppet/util/windows/process.rb +78 -11
  262. data/lib/puppet/util/windows/registry.rb +1 -1
  263. data/lib/puppet/util/windows/root_certs.rb +5 -5
  264. data/lib/puppet/util/windows/security.rb +33 -35
  265. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  266. data/lib/puppet/util/windows/sid.rb +42 -4
  267. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  268. data/lib/puppet/util/windows/user.rb +10 -10
  269. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  270. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  271. data/lib/puppet/vendor/pathspec/README.md +1 -1
  272. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  273. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  274. data/lib/puppet/version.rb +1 -1
  275. data/lib/semver.rb +17 -1
  276. data/man/man5/puppet.conf.5 +12 -12
  277. data/man/man8/extlookup2hiera.8 +1 -1
  278. data/man/man8/puppet-agent.8 +2 -2
  279. data/man/man8/puppet-apply.8 +2 -2
  280. data/man/man8/puppet-ca.8 +2 -2
  281. data/man/man8/puppet-catalog.8 +2 -2
  282. data/man/man8/puppet-cert.8 +2 -2
  283. data/man/man8/puppet-certificate.8 +2 -2
  284. data/man/man8/puppet-certificate_request.8 +2 -2
  285. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  286. data/man/man8/puppet-config.8 +3 -3
  287. data/man/man8/puppet-describe.8 +1 -1
  288. data/man/man8/puppet-device.8 +1 -1
  289. data/man/man8/puppet-doc.8 +1 -1
  290. data/man/man8/puppet-epp.8 +2 -2
  291. data/man/man8/puppet-facts.8 +2 -2
  292. data/man/man8/puppet-file.8 +2 -2
  293. data/man/man8/puppet-filebucket.8 +2 -2
  294. data/man/man8/puppet-help.8 +2 -2
  295. data/man/man8/puppet-inspect.8 +2 -2
  296. data/man/man8/puppet-key.8 +2 -2
  297. data/man/man8/puppet-man.8 +2 -2
  298. data/man/man8/puppet-master.8 +2 -2
  299. data/man/man8/puppet-module.8 +9 -9
  300. data/man/man8/puppet-node.8 +2 -2
  301. data/man/man8/puppet-parser.8 +2 -2
  302. data/man/man8/puppet-plugin.8 +2 -2
  303. data/man/man8/puppet-report.8 +2 -2
  304. data/man/man8/puppet-resource.8 +2 -2
  305. data/man/man8/puppet-resource_type.8 +2 -2
  306. data/man/man8/puppet-status.8 +3 -3
  307. data/man/man8/puppet.8 +1 -1
  308. data/spec/fixtures/module.tar.gz +0 -0
  309. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  310. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  311. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  312. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  313. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  314. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  315. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  316. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  317. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  318. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  319. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  320. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  321. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
  322. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  323. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  324. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  325. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  326. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  327. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  328. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  329. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  330. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  331. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  332. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  333. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  334. data/spec/integration/defaults_spec.rb +14 -2
  335. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  336. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  337. data/spec/integration/node/environment_spec.rb +13 -0
  338. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  339. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  340. data/spec/integration/parser/undef_param_spec.rb +8 -0
  341. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  342. data/spec/integration/test/test_helper_spec.rb +28 -0
  343. data/spec/integration/transaction/report_spec.rb +16 -0
  344. data/spec/integration/transaction_spec.rb +11 -0
  345. data/spec/integration/type/file_spec.rb +194 -4
  346. data/spec/integration/type/package_spec.rb +5 -1
  347. data/spec/integration/type/tidy_spec.rb +21 -9
  348. data/spec/integration/util/execution_spec.rb +22 -0
  349. data/spec/integration/util/windows/principal_spec.rb +90 -4
  350. data/spec/integration/util/windows/process_spec.rb +31 -0
  351. data/spec/integration/util/windows/security_spec.rb +6 -6
  352. data/spec/integration/util/windows/user_spec.rb +1 -1
  353. data/spec/integration/util_spec.rb +49 -27
  354. data/spec/lib/puppet_spec/compiler.rb +17 -0
  355. data/spec/lib/puppet_spec/files.rb +2 -2
  356. data/spec/lib/puppet_spec/pops.rb +13 -0
  357. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  358. data/spec/shared_contexts/types_setup.rb +96 -0
  359. data/spec/unit/agent_spec.rb +1 -0
  360. data/spec/unit/application/agent_spec.rb +10 -0
  361. data/spec/unit/application/apply_spec.rb +9 -0
  362. data/spec/unit/configurer/downloader_spec.rb +5 -5
  363. data/spec/unit/configurer_spec.rb +271 -39
  364. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  365. data/spec/unit/defaults_spec.rb +15 -0
  366. data/spec/unit/environments_spec.rb +24 -4
  367. data/spec/unit/face/parser_spec.rb +43 -2
  368. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  369. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  371. data/spec/unit/file_system_spec.rb +26 -0
  372. data/spec/unit/functions/assert_type_spec.rb +36 -2
  373. data/spec/unit/functions/defined_spec.rb +2 -2
  374. data/spec/unit/functions/epp_spec.rb +11 -3
  375. data/spec/unit/functions/lookup_spec.rb +58 -13
  376. data/spec/unit/functions/regsubst_spec.rb +1 -1
  377. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  378. data/spec/unit/functions/step_spec.rb +113 -0
  379. data/spec/unit/functions/type_spec.rb +35 -0
  380. data/spec/unit/functions4_spec.rb +61 -5
  381. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  382. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  383. data/spec/unit/indirector/indirection_spec.rb +1 -1
  384. data/spec/unit/info_service_spec.rb +94 -32
  385. data/spec/unit/module_spec.rb +14 -0
  386. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  387. data/spec/unit/network/authstore_spec.rb +1 -1
  388. data/spec/unit/network/http/connection_spec.rb +1 -0
  389. data/spec/unit/network/http/pool_spec.rb +30 -0
  390. data/spec/unit/node_spec.rb +1 -1
  391. data/spec/unit/parser/compiler_spec.rb +16 -0
  392. data/spec/unit/parser/scope_spec.rb +28 -11
  393. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  394. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  395. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
  396. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  397. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  398. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  399. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  400. data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
  401. data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
  402. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  403. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  404. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  405. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  406. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  407. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  408. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  409. data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
  410. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  411. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  412. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  413. data/spec/unit/pops/types/types_spec.rb +241 -0
  414. data/spec/unit/pops/validator/validator_spec.rb +100 -43
  415. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  416. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  417. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  418. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  419. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  420. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  421. data/spec/unit/provider/package/pip_spec.rb +47 -34
  422. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  423. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  424. data/spec/unit/provider/package/yum_spec.rb +11 -0
  425. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  426. data/spec/unit/provider/service/launchd_spec.rb +17 -35
  427. data/spec/unit/provider/service/systemd_spec.rb +7 -0
  428. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  429. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  430. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  431. data/spec/unit/resource/catalog_spec.rb +33 -1
  432. data/spec/unit/resource/type_spec.rb +149 -7
  433. data/spec/unit/resource_spec.rb +96 -57
  434. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  435. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  436. data/spec/unit/transaction/report_spec.rb +27 -0
  437. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  438. data/spec/unit/transaction_spec.rb +5 -0
  439. data/spec/unit/type/file/checksum_spec.rb +6 -0
  440. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  441. data/spec/unit/type/file/content_spec.rb +12 -193
  442. data/spec/unit/type/file/source_spec.rb +211 -119
  443. data/spec/unit/type/file_spec.rb +133 -34
  444. data/spec/unit/type/interface_spec.rb +32 -0
  445. data/spec/unit/type/macauthorization_spec.rb +4 -1
  446. data/spec/unit/type/yumrepo_spec.rb +2 -2
  447. data/spec/unit/util/filetype_spec.rb +1 -1
  448. data/spec/unit/util/http_proxy_spec.rb +2 -2
  449. data/spec/unit/util/log/destinations_spec.rb +0 -2
  450. data/spec/unit/util/logging_spec.rb +69 -0
  451. data/spec/unit/util/multi_match_spec.rb +39 -0
  452. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  453. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  454. data/spec/unit/util/plist_spec.rb +110 -0
  455. data/spec/unit/util/resource_template_spec.rb +2 -2
  456. data/spec/unit/util/run_mode_spec.rb +27 -3
  457. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  458. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  459. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  460. data/spec/unit/util/windows/sid_spec.rb +1 -1
  461. data/spec/unit/util_spec.rb +123 -13
  462. data/tasks/cfpropertylist.rake +15 -0
  463. metadata +114 -26
  464. data/lib/puppet/vendor/load_plist.rb +0 -1
  465. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  466. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  467. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  468. data/lib/puppet/vendor/plist/README +0 -36
  469. data/lib/puppet/vendor/plist/Rakefile +0 -144
  470. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  471. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  472. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  473. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  474. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  475. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  476. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  477. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  478. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  479. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  480. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  481. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  482. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  483. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  484. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  485. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  486. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  487. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -234,20 +234,28 @@ class Puppet::Util::NetworkDevice::Cisco::Device < Puppet::Util::NetworkDevice::
234
234
  trunking[:mode] = :trunk
235
235
  when "static access"
236
236
  trunking[:mode] = :access
237
+ when "dynamic auto"
238
+ trunking[:mode] = 'dynamic auto'
239
+ when "dynamic desirable"
240
+ trunking[:mode] = 'dynamic desirable'
237
241
  else
238
242
  raise "Unknown switchport mode: #{$1} for #{interface}"
239
243
  end
240
244
  when /^Administrative Trunking Encapsulation:\s+(.*)$/
241
245
  case $1
242
246
  when "dot1q","isl"
243
- trunking[:encapsulation] = $1.to_sym if trunking[:mode] == :trunk
247
+ trunking[:encapsulation] = $1.to_sym if trunking[:mode] != :access
248
+ when "negotiate"
249
+ trunking[:encapsulation] = :negotiate
244
250
  else
245
251
  raise "Unknown switchport encapsulation: #{$1} for #{interface}"
246
252
  end
247
253
  when /^Access Mode VLAN:\s+(.*) \(\(Inactive\)\)$/
248
254
  # nothing
249
255
  when /^Access Mode VLAN:\s+(.*) \(.*\)$/
250
- trunking[:native_vlan] = $1 if trunking[:mode] == :access
256
+ trunking[:access_vlan] = $1 if trunking[:mode] != :trunk
257
+ when /^Trunking Native Mode VLAN:\s+(.*) \(.*\)$/
258
+ trunking[:native_vlan] = $1 if trunking[:mode] != :access
251
259
  when /^Trunking VLANs Enabled:\s+(.*)$/
252
260
  next if trunking[:mode] == :access
253
261
  vlans = $1
@@ -19,17 +19,18 @@ class Puppet::Util::NetworkDevice::Cisco::Interface
19
19
  :description => [1, "description %s"],
20
20
  :speed => [2, "speed %s"],
21
21
  :duplex => [3, "duplex %s"],
22
- :native_vlan => [4, "switchport access vlan %s"],
23
- :encapsulation => [5, "switchport trunk encapsulation %s"],
24
- :mode => [6, "switchport mode %s"],
25
- :allowed_trunk_vlans => [7, "switchport trunk allowed vlan %s"],
26
- :etherchannel => [8, ["channel-group %s", "port group %s"]],
27
- :ipaddress => [9,
22
+ :encapsulation => [4, "switchport trunk encapsulation %s"],
23
+ :mode => [5, "switchport mode %s"],
24
+ :access_vlan => [6, "switchport access vlan %s"],
25
+ :native_vlan => [7, "switchport trunk native vlan %s"],
26
+ :allowed_trunk_vlans => [8, "switchport trunk allowed vlan %s"],
27
+ :etherchannel => [9, ["channel-group %s", "port group %s"]],
28
+ :ipaddress => [10,
28
29
  lambda do |prefix,ip,option|
29
30
  ip.ipv6? ? "ipv6 address #{ip.to_s}/#{prefix} #{option}" :
30
31
  "ip address #{ip.to_s} #{netmask(Socket::AF_INET,prefix)}"
31
32
  end],
32
- :ensure => [10, lambda { |value| value == :present ? "no shutdown" : "shutdown" } ]
33
+ :ensure => [11, lambda { |value| value == :present ? "no shutdown" : "shutdown" } ]
33
34
  }
34
35
 
35
36
  def update(is={}, should={})
@@ -37,8 +38,20 @@ class Puppet::Util::NetworkDevice::Cisco::Interface
37
38
  command("conf t")
38
39
  command("interface #{name}")
39
40
 
40
- # apply changes in a defined orders for cisco IOS devices
41
+ # apply changes in a defined order for cisco IOS devices
41
42
  [is.keys, should.keys].flatten.uniq.sort {|a,b| COMMANDS[a][0] <=> COMMANDS[b][0] }.each do |property|
43
+ # Work around for old documentation which shows :native_vlan used for access vlan
44
+ if property == :access_vlan and should[:mode] != :trunk and should[:access_vlan].nil?
45
+ should[:access_vlan] = should[:native_vlan]
46
+ end
47
+
48
+ # Don't change non-operational mode parameters
49
+ next if property == :access_vlan and should[:mode] == :trunk
50
+ next if property == :native_vlan and should[:mode] == :access
51
+ next if property == :encapsulation and should[:mode] == :access
52
+
53
+ Puppet.debug("comparing #{property}: #{is[property]} == #{should[property]}")
54
+
42
55
  # They're equal, so do nothing.
43
56
  next if is[property] == should[property]
44
57
 
@@ -68,9 +68,13 @@ class Puppet::Util::NetworkDevice::Transport::Ssh < Puppet::Util::NetworkDevice:
68
68
  end
69
69
 
70
70
  def close
71
- @channel.close if @channel
72
- @channel = nil
73
- @ssh.close if @ssh
71
+ begin
72
+ @channel.close if @channel
73
+ @channel = nil
74
+ @ssh.close if @ssh
75
+ rescue IOError
76
+ Puppet.debug "device terminated ssh session impolitely"
77
+ end
74
78
  end
75
79
 
76
80
  def expect(prompt)
@@ -1,44 +1,47 @@
1
1
  require 'puppet/util/network_device'
2
2
  require 'puppet/util/network_device/transport'
3
3
  require 'puppet/util/network_device/transport/base'
4
- require 'net/telnet'
5
-
6
- class Puppet::Util::NetworkDevice::Transport::Telnet < Puppet::Util::NetworkDevice::Transport::Base
7
- def initialize(verbose = false)
8
- super()
9
- @verbose = verbose
10
- end
11
-
12
- def handles_login?
13
- false
14
- end
15
-
16
- def connect
17
- @telnet = Net::Telnet::new("Host" => host, "Port" => port || 23,
18
- "Timeout" => 10,
19
- "Prompt" => default_prompt)
20
- end
21
-
22
- def close
23
- @telnet.close if @telnet
24
- @telnet = nil
25
- end
26
-
27
- def expect(prompt)
28
- @telnet.waitfor(prompt) do |out|
29
- yield out if block_given?
4
+
5
+ if Puppet.features.telnet?
6
+ require 'net/telnet'
7
+
8
+ class Puppet::Util::NetworkDevice::Transport::Telnet < Puppet::Util::NetworkDevice::Transport::Base
9
+ def initialize(verbose = false)
10
+ super()
11
+ @verbose = verbose
12
+ end
13
+
14
+ def handles_login?
15
+ false
16
+ end
17
+
18
+ def connect
19
+ @telnet = Net::Telnet::new("Host" => host, "Port" => port || 23,
20
+ "Timeout" => 10,
21
+ "Prompt" => default_prompt)
30
22
  end
31
- end
32
23
 
33
- def command(cmd, options = {})
34
- send(cmd)
35
- expect(options[:prompt] || default_prompt) do |output|
36
- yield output if block_given?
24
+ def close
25
+ @telnet.close if @telnet
26
+ @telnet = nil
37
27
  end
38
- end
39
28
 
40
- def send(line)
41
- Puppet.debug("telnet: send #{line}") if @verbose
42
- @telnet.puts(line)
43
- end
29
+ def expect(prompt)
30
+ @telnet.waitfor(prompt) do |out|
31
+ yield out if block_given?
32
+ end
33
+ end
34
+
35
+ def command(cmd, options = {})
36
+ send(cmd)
37
+ expect(options[:prompt] || default_prompt) do |output|
38
+ yield output if block_given?
39
+ end
40
+ end
41
+
42
+ def send(line)
43
+ Puppet.debug("telnet: send #{line}") if @verbose
44
+ @telnet.puts(line)
45
+ end
46
+ end
44
47
  end
@@ -0,0 +1,130 @@
1
+ require 'cfpropertylist'
2
+ require 'puppet/util/execution'
3
+
4
+ module Puppet::Util::Plist
5
+
6
+ class FormatError < RuntimeError; end
7
+
8
+ # So I don't have to prepend every method name with 'self.' Most of the
9
+ # methods are going to be Provider methods (as opposed to methods of the
10
+ # INSTANCE of the provider).
11
+ class << self
12
+ # Defines the magic number for binary plists
13
+ #
14
+ # @api private
15
+ def binary_plist_magic_number
16
+ "bplist00"
17
+ end
18
+
19
+ # Defines a default doctype string that should be at the top of most plist
20
+ # files. Useful if we need to modify an invalid doctype string in memory.
21
+ # In version 10.9 and lower of OS X the plist at
22
+ # /System/Library/LaunchDaemons/org.ntp.ntpd.plist had an invalid doctype
23
+ # string. This corrects for that.
24
+ def plist_xml_doctype
25
+ '<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">'
26
+ end
27
+
28
+ # Read a plist file, whether its format is XML or in Apple's "binary1"
29
+ # format, using the CFPropertyList gem.
30
+ def read_plist_file(file_path)
31
+ # We can't really read the file until we know the source encoding in
32
+ # Ruby 1.9.x, so we use the magic number to detect it.
33
+ # NOTE: We used IO.read originally to be Ruby 1.8.x compatible.
34
+ if read_file_with_offset(file_path, binary_plist_magic_number.length) == binary_plist_magic_number
35
+ plist_obj = new_cfpropertylist(:file => file_path)
36
+ convert_cfpropertylist_to_native_types(plist_obj)
37
+ else
38
+ plist_data = open_file_with_args(file_path, "r:UTF-8")
39
+ plist = parse_plist(plist_data, file_path)
40
+ return plist if plist
41
+
42
+ Puppet.debug "Plist #{file_path} ill-formatted, converting with plutil"
43
+ begin
44
+ plist = Puppet::Util::Execution.execute(['/usr/bin/plutil', '-convert', 'xml1', '-o', '/dev/stdout', file_path],
45
+ {:failonfail => true, :combine => true})
46
+ return parse_plist(plist)
47
+ rescue Puppet::ExecutionFailure => detail
48
+ Puppet.warning("Cannot read file #{path}; Puppet is skipping it.\n" + "Details: #{detail}")
49
+ end
50
+ end
51
+ end
52
+
53
+ # Read plist text using the CFPropertyList gem.
54
+ def parse_plist(plist_data, file_path = '')
55
+ bad_xml_doctype = /^.*<!DOCTYPE plist PUBLIC -\/\/Apple Computer.*$/
56
+ if plist_data =~ bad_xml_doctype
57
+ plist_data.gsub!( bad_xml_doctype, plist_xml_doctype )
58
+ Puppet.debug("Had to fix plist with incorrect DOCTYPE declaration: #{file_path}")
59
+ end
60
+
61
+ begin
62
+ plist_obj = new_cfpropertylist(:data => plist_data)
63
+ rescue CFFormatError => e
64
+ Puppet.debug "Failed with #{e.class} on #{file_path}: #{e.inspect}"
65
+ return nil
66
+ end
67
+ convert_cfpropertylist_to_native_types(plist_obj)
68
+ end
69
+
70
+ # Helper method to assist in reading a file. It's its own method for
71
+ # stubbing purposes
72
+ #
73
+ # @api private
74
+ def open_file_with_args(file, args)
75
+ File.open(file, args).read
76
+ end
77
+
78
+ # Helper method to assist in generating a new CFPropertList Plist. It's
79
+ # its own method for stubbing purposes
80
+ #
81
+ # @api private
82
+ def new_cfpropertylist(plist_opts)
83
+ CFPropertyList::List.new(plist_opts)
84
+ end
85
+
86
+ # Helper method to assist in converting a native CFPropertList object to a
87
+ # native Ruby object (hash). It's its own method for stubbing purposes
88
+ #
89
+ # @api private
90
+ def convert_cfpropertylist_to_native_types(plist_obj)
91
+ CFPropertyList.native_types(plist_obj.value)
92
+ end
93
+
94
+ # Helper method to assist in reading a file with an offset value. It's its
95
+ # own method for stubbing purposes
96
+ #
97
+ # @api private
98
+ def read_file_with_offset(file_path, offset)
99
+ IO.read(file_path, offset)
100
+ end
101
+
102
+ def to_format(format)
103
+ if format.to_sym == :xml
104
+ plist_format = CFPropertyList::List::FORMAT_XML
105
+ elsif format.to_sym == :binary
106
+ plist_format = CFPropertyList::List::FORMAT_BINARY
107
+ else
108
+ raise FormatError.new "Unknown plist format #{format}"
109
+ end
110
+ end
111
+
112
+ # This method will write a plist file using a specified format (or XML
113
+ # by default)
114
+ def write_plist_file(plist, file_path, format = :xml)
115
+ begin
116
+ plist_to_save = CFPropertyList::List.new
117
+ plist_to_save.value = CFPropertyList.guess(plist)
118
+ plist_to_save.save(file_path, to_format(format))
119
+ rescue IOError => e
120
+ Puppet.error("Unable to write the file #{file_path}. #{e.inspect}")
121
+ end
122
+ end
123
+
124
+ def dump_plist(plist_data, format = :xml)
125
+ plist_to_save = CFPropertyList::List.new
126
+ plist_to_save.value = CFPropertyList.guess(plist_data)
127
+ plist_to_save.to_str(to_format(format))
128
+ end
129
+ end
130
+ end
@@ -40,7 +40,7 @@ class Puppet::Util::ResourceTemplate
40
40
 
41
41
  def evaluate
42
42
  set_resource_variables
43
- ERB.new(File.read(@file), 0, "-").result(binding)
43
+ ERB.new(Puppet::FileSystem.read(@file, :encoding => 'utf-8'), 0, "-").result(binding)
44
44
  end
45
45
 
46
46
  def initialize(file, resource)
@@ -44,10 +44,10 @@ module Puppet
44
44
  # select the system or the user directory depending on the context of
45
45
  # this process. The most common use is determining filesystem path
46
46
  # values for confdir and vardir. The intended semantics are:
47
- # {http://projects.puppetlabs.com/issues/16637 #16637} for Puppet 3.x
47
+ # {https://projects.puppetlabs.com/issues/16637 #16637} for Puppet 3.x
48
48
  #
49
49
  # @todo this code duplicates {Puppet::Settings#which\_configuration\_file}
50
- # as described in {http://projects.puppetlabs.com/issues/16637 #16637}
50
+ # as described in {https://projects.puppetlabs.com/issues/16637 #16637}
51
51
  def which_dir( system, user )
52
52
  if Puppet.features.root?
53
53
  File.expand_path(system)
@@ -0,0 +1,9 @@
1
+ require 'puppet/util/tagging'
2
+
3
+ class Puppet::Util::SkipTags
4
+ include Puppet::Util::Tagging
5
+
6
+ def initialize(stags)
7
+ self.tags = stags unless defined?(@tags)
8
+ end
9
+ end
@@ -3,7 +3,7 @@
3
3
  # Represents an access control entry, which grants or denies a subject,
4
4
  # identified by a SID, rights to a securable object.
5
5
  #
6
- # @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa374868(v=vs.85).aspx
6
+ # @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa374868(v=vs.85).aspx
7
7
  # @api private
8
8
  class Puppet::Util::Windows::AccessControlEntry
9
9
  require 'puppet/util/windows/security'
@@ -2,7 +2,7 @@
2
2
  #
3
3
  # Represents a list of access control entries (ACEs).
4
4
  #
5
- # @see http://msdn.microsoft.com/en-us/library/windows/desktop/aa374872(v=vs.85).aspx
5
+ # @see https://msdn.microsoft.com/en-us/library/windows/desktop/aa374872(v=vs.85).aspx
6
6
  # @api private
7
7
  class Puppet::Util::Windows::AccessControlList
8
8
  include Enumerable
@@ -76,7 +76,7 @@ class Puppet::Util::Windows::AccessControlList
76
76
  else
77
77
  new_ace.sid = new_sid
78
78
 
79
- prepend_needed = old_sid == Win32::Security::SID::LocalSystem
79
+ prepend_needed = old_sid == Puppet::Util::Windows::SID::LocalSystem
80
80
  end
81
81
  end
82
82
  new_aces << new_ace
@@ -87,7 +87,7 @@ class Puppet::Util::Windows::AccessControlList
87
87
  if prepend_needed
88
88
  mask = Puppet::Util::Windows::File::STANDARD_RIGHTS_ALL | Puppet::Util::Windows::File::SPECIFIC_RIGHTS_ALL
89
89
  ace = Puppet::Util::Windows::AccessControlEntry.new(
90
- Win32::Security::SID::LocalSystem,
90
+ Puppet::Util::Windows::SID::LocalSystem,
91
91
  mask)
92
92
  @aces << ace
93
93
  end
@@ -96,7 +96,7 @@ module Puppet::Util::Windows::ADSI
96
96
 
97
97
  ffi_convention :stdcall
98
98
 
99
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx
99
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx
100
100
  # BOOL WINAPI GetComputerName(
101
101
  # _Out_ LPTSTR lpBuffer,
102
102
  # _Inout_ LPDWORD lpnSize
@@ -300,7 +300,7 @@ module Puppet::Util::Windows::ADSI
300
300
  new(name, Puppet::Util::Windows::ADSI.create(name, 'user'))
301
301
  end
302
302
 
303
- # UNLEN from lmcons.h - http://stackoverflow.com/a/2155176
303
+ # UNLEN from lmcons.h - https://stackoverflow.com/a/2155176
304
304
  MAX_USERNAME_LENGTH = 256
305
305
  def self.current_user_name
306
306
  user_name = ''
@@ -361,7 +361,7 @@ module Puppet::Util::Windows::ADSI
361
361
 
362
362
  ffi_convention :stdcall
363
363
 
364
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724432(v=vs.85).aspx
364
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724432(v=vs.85).aspx
365
365
  # BOOL WINAPI GetUserName(
366
366
  # _Out_ LPTSTR lpBuffer,
367
367
  # _Inout_ LPDWORD lpnSize
@@ -376,7 +376,7 @@ module Puppet::Util::Windows::ADSI
376
376
  begin
377
377
  Puppet::Util::Windows::ADSI.wmi_connection.Delete("Win32_UserProfile.SID='#{sid}'")
378
378
  rescue WIN32OLERuntimeError => e
379
- # http://social.technet.microsoft.com/Forums/en/ITCG/thread/0f190051-ac96-4bf1-a47f-6b864bfacee5
379
+ # https://social.technet.microsoft.com/Forums/en/ITCG/thread/0f190051-ac96-4bf1-a47f-6b864bfacee5
380
380
  # Prior to Vista SP1, there's no builtin way to programmatically
381
381
  # delete user profiles (except for delprof.exe). So try to delete
382
382
  # but warn if we fail
@@ -19,7 +19,6 @@ module Puppet::Util::Windows::APITypes
19
19
 
20
20
  class ::FFI::Pointer
21
21
  NULL_HANDLE = 0
22
- NULL_TERMINATOR_WCHAR = 0
23
22
 
24
23
  def self.from_string_to_wide_string(str, &block)
25
24
  str = Puppet::Util::Windows::String.wide_string(str)
@@ -52,6 +51,7 @@ module Puppet::Util::Windows::APITypes
52
51
 
53
52
  alias_method :read_wchar, :read_uint16
54
53
  alias_method :read_word, :read_uint16
54
+ alias_method :read_array_of_wchar, :read_array_of_uint16
55
55
 
56
56
  def read_wide_string(char_length, dst_encoding = Encoding::UTF_8)
57
57
  # char_length is number of wide chars (typically excluding NULLs), *not* bytes
@@ -59,18 +59,24 @@ module Puppet::Util::Windows::APITypes
59
59
  str.encode(dst_encoding)
60
60
  end
61
61
 
62
- def read_arbitrary_wide_string_up_to(max_char_length = 512)
63
- # max_char_length is number of wide chars (typically excluding NULLs), *not* bytes
64
- # use a pointer to read one UTF-16LE char (2 bytes) at a time
65
- wchar_ptr = FFI::Pointer.new(:wchar, address)
62
+ # @param max_char_length [Integer] Maximum number of wide chars tp return (typically excluding NULLs), *not* bytes
63
+ # @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
64
+ # null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
65
+ # null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
66
+ def read_arbitrary_wide_string_up_to(max_char_length = 512, null_terminator = :single_null)
67
+ if null_terminator != :single_null && null_terminator != :double_null
68
+ raise "Unable to read wide strings with #{null_terminator} terminal nulls"
69
+ end
66
70
 
67
- # now iterate 2 bytes at a time until an offset lower than max_char_length is found
68
- 0.upto(max_char_length - 1) do |i|
69
- if wchar_ptr[i].read_wchar == NULL_TERMINATOR_WCHAR
70
- return read_wide_string(i)
71
- end
71
+ terminator_width = null_terminator == :single_null ? 1 : 2
72
+ reader_method = null_terminator == :single_null ? :get_uint16 : :get_uint32
73
+
74
+ # Look for a null terminating characters; if found, read up to that null (exclusive)
75
+ (0...max_char_length - terminator_width).each do |i|
76
+ return read_wide_string(i) if send(reader_method, (i * 2)) == 0
72
77
  end
73
78
 
79
+ # String is longer than the max; read just to the max
74
80
  read_wide_string(max_char_length)
75
81
  end
76
82
 
@@ -113,10 +119,10 @@ module Puppet::Util::Windows::APITypes
113
119
  # https://github.com/ffi/ffi/wiki/Types
114
120
 
115
121
  # Windows - Common Data Types
116
- # http://msdn.microsoft.com/en-us/library/cc230309.aspx
122
+ # https://msdn.microsoft.com/en-us/library/cc230309.aspx
117
123
 
118
124
  # Windows Data Types
119
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
125
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
120
126
 
121
127
  FFI.typedef :uint16, :word
122
128
  FFI.typedef :uint32, :dword
@@ -156,7 +162,7 @@ module Puppet::Util::Windows::APITypes
156
162
  FFI.typedef :int32, :win32_long
157
163
  # FFI bool can be only 1 byte at times,
158
164
  # Win32 BOOL is a signed int, and is always 4 bytes, even on x64
159
- # http://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
165
+ # https://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
160
166
  FFI.typedef :int32, :win32_bool
161
167
 
162
168
  # Same as a LONG, a 32-bit signed integer
@@ -173,7 +179,7 @@ module Puppet::Util::Windows::APITypes
173
179
  module ::FFI::WIN32
174
180
  extend ::FFI::Library
175
181
 
176
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
182
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
177
183
  # typedef struct _GUID {
178
184
  # DWORD Data1;
179
185
  # WORD Data2;
@@ -204,7 +210,7 @@ module Puppet::Util::Windows::APITypes
204
210
  def ==(other) Windows.memcmp(other, self, size) == 0 end
205
211
  end
206
212
 
207
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
213
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
208
214
  # typedef struct _SYSTEMTIME {
209
215
  # WORD wYear;
210
216
  # WORD wMonth;
@@ -245,21 +251,21 @@ module Puppet::Util::Windows::APITypes
245
251
 
246
252
  ffi_convention :stdcall
247
253
 
248
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
254
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
249
255
  # HLOCAL WINAPI LocalFree(
250
256
  # _In_ HLOCAL hMem
251
257
  # );
252
258
  ffi_lib :kernel32
253
259
  attach_function :LocalFree, [:handle], :handle
254
260
 
255
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
261
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
256
262
  # BOOL WINAPI CloseHandle(
257
263
  # _In_ HANDLE hObject
258
264
  # );
259
265
  ffi_lib :kernel32
260
266
  attach_function_private :CloseHandle, [:handle], :win32_bool
261
267
 
262
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
268
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
263
269
  # void CoTaskMemFree(
264
270
  # _In_opt_ LPVOID pv
265
271
  # );