puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  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/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. 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
  383. 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
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. 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
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. 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
  388. 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
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -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
@@ -56,21 +56,30 @@ module Puppet::Util::Windows::ADSI
56
56
  "winmgmts:{impersonationLevel=impersonate}!//#{host}/root/cimv2"
57
57
  end
58
58
 
59
+ # This method should *only* be used to generate WinNT://<SID> style monikers
60
+ # used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not useable
61
+ # to resolve an account with WIN32OLE.connect
62
+ # Valid input is a SID::Principal, S-X-X style SID string or any valid
63
+ # account name with or without domain prefix
59
64
  # @api private
60
65
  def sid_uri_safe(sid)
61
- return sid_uri(sid) if sid.kind_of?(Win32::Security::SID)
66
+ return sid_uri(sid) if sid.kind_of?(Puppet::Util::Windows::SID::Principal)
62
67
 
63
68
  begin
64
- sid = Win32::Security::SID.new(Win32::Security::SID.string_to_sid(sid))
69
+ sid = Puppet::Util::Windows::SID.name_to_sid_object(sid)
65
70
  sid_uri(sid)
66
- rescue SystemCallError
71
+ rescue Puppet::Util::Windows::Error, Puppet::Error
67
72
  nil
68
73
  end
69
74
  end
70
75
 
76
+ # This method should *only* be used to generate WinNT://<SID> style monikers
77
+ # used for IAdsGroup::Add / IAdsGroup::Remove. These URIs are not useable
78
+ # to resolve an account with WIN32OLE.connect
71
79
  def sid_uri(sid)
72
- raise Puppet::Error.new( "Must use a valid SID object" ) if !sid.kind_of?(Win32::Security::SID)
73
- "WinNT://#{sid.to_s}"
80
+ raise Puppet::Error.new( "Must use a valid SID::Principal" ) if !sid.kind_of?(Puppet::Util::Windows::SID::Principal)
81
+
82
+ "WinNT://#{sid.sid}"
74
83
  end
75
84
 
76
85
  def uri(resource_name, resource_type, host = '.')
@@ -87,7 +96,7 @@ module Puppet::Util::Windows::ADSI
87
96
 
88
97
  ffi_convention :stdcall
89
98
 
90
- # 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
91
100
  # BOOL WINAPI GetComputerName(
92
101
  # _Out_ LPTSTR lpBuffer,
93
102
  # _Inout_ LPDWORD lpnSize
@@ -99,8 +108,6 @@ module Puppet::Util::Windows::ADSI
99
108
 
100
109
  module Shared
101
110
  def uri(name, host = '.')
102
- if sid_uri = Puppet::Util::Windows::ADSI.sid_uri_safe(name) then return sid_uri end
103
-
104
111
  host = '.' if ['NT AUTHORITY', 'BUILTIN', Socket.gethostname].include?(host)
105
112
 
106
113
  # group or user
@@ -136,7 +143,7 @@ module Puppet::Util::Windows::ADSI
136
143
  sids = names.map do |name|
137
144
  sid = Puppet::Util::Windows::SID.name_to_sid_object(name)
138
145
  raise Puppet::Error.new( "Could not resolve name: #{name}" ) if !sid
139
- [sid.to_s, sid]
146
+ [sid.sid, sid]
140
147
  end
141
148
 
142
149
  Hash[ sids ]
@@ -247,20 +254,12 @@ module Puppet::Util::Windows::ADSI
247
254
 
248
255
 
249
256
  def add_group_sids(*sids)
250
- group_names = []
251
- sids.each do |sid|
252
- group_names << Puppet::Util::Windows::SID.sid_to_name(sid)
253
- end
254
-
257
+ group_names = sids.map { |s| s.domain_account }
255
258
  add_to_groups(*group_names)
256
259
  end
257
260
 
258
261
  def remove_group_sids(*sids)
259
- group_names = []
260
- sids.each do |sid|
261
- group_names << Puppet::Util::Windows::SID.sid_to_name(sid)
262
- end
263
-
262
+ group_names = sids.map { |s| s.domain_account }
264
263
  remove_from_groups(*group_names)
265
264
  end
266
265
 
@@ -273,7 +272,7 @@ module Puppet::Util::Windows::ADSI
273
272
 
274
273
  desired_groups = desired_groups.split(',').map(&:strip)
275
274
 
276
- current_hash = Hash[ self.group_sids.map { |sid| [sid.to_s, sid] } ]
275
+ current_hash = Hash[ self.group_sids.map { |sid| [sid.sid, sid] } ]
277
276
  desired_hash = self.class.name_sid_hash(desired_groups)
278
277
 
279
278
  # First we add the user to all the groups it should be in but isn't
@@ -301,7 +300,7 @@ module Puppet::Util::Windows::ADSI
301
300
  new(name, Puppet::Util::Windows::ADSI.create(name, 'user'))
302
301
  end
303
302
 
304
- # UNLEN from lmcons.h - http://stackoverflow.com/a/2155176
303
+ # UNLEN from lmcons.h - https://stackoverflow.com/a/2155176
305
304
  MAX_USERNAME_LENGTH = 256
306
305
  def self.current_user_name
307
306
  user_name = ''
@@ -321,10 +320,30 @@ module Puppet::Util::Windows::ADSI
321
320
  user_name
322
321
  end
323
322
 
324
- def self.exists?(name)
325
- Puppet::Util::Windows::ADSI::connectable?(User.uri(*User.parse_name(name)))
323
+ def self.exists?(name_or_sid)
324
+ well_known = false
325
+ if (sid = Puppet::Util::Windows::SID.name_to_sid_object(name_or_sid))
326
+ return true if sid.account_type == :SidTypeUser
327
+
328
+ # 'well known group' is special as it can be a group like Everyone OR a user like SYSTEM
329
+ # so try to resolve it
330
+ # https://msdn.microsoft.com/en-us/library/cc234477.aspx
331
+ well_known = sid.account_type == :SidTypeWellKnownGroup
332
+ return false if sid.account_type != :SidTypeAlias && !well_known
333
+ name_or_sid = "#{sid.domain}\\#{sid.account}"
334
+ end
335
+
336
+ user = Puppet::Util::Windows::ADSI.connect(User.uri(*User.parse_name(name_or_sid)))
337
+ # otherwise, verify that the account is actually a User account
338
+ user.Class == 'User'
339
+ rescue
340
+ # special accounts like SYSTEM cannot resolve via moniker like WinNT://./SYSTEM,user
341
+ # and thus fail to connect - so given a validly resolved SID, this failure is ambiguous as it
342
+ # may indicate either a group like Service or an account like SYSTEM
343
+ well_known
326
344
  end
327
345
 
346
+
328
347
  def self.delete(name)
329
348
  Puppet::Util::Windows::ADSI.delete(name, 'user')
330
349
  end
@@ -342,7 +361,7 @@ module Puppet::Util::Windows::ADSI
342
361
 
343
362
  ffi_convention :stdcall
344
363
 
345
- # 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
346
365
  # BOOL WINAPI GetUserName(
347
366
  # _Out_ LPTSTR lpBuffer,
348
367
  # _Inout_ LPDWORD lpnSize
@@ -357,7 +376,7 @@ module Puppet::Util::Windows::ADSI
357
376
  begin
358
377
  Puppet::Util::Windows::ADSI.wmi_connection.Delete("Win32_UserProfile.SID='#{sid}'")
359
378
  rescue WIN32OLERuntimeError => e
360
- # 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
361
380
  # Prior to Vista SP1, there's no builtin way to programmatically
362
381
  # delete user profiles (except for delprof.exe). So try to delete
363
382
  # but warn if we fail
@@ -437,7 +456,7 @@ module Puppet::Util::Windows::ADSI
437
456
  def set_members(desired_members, inclusive = true)
438
457
  return if desired_members.nil?
439
458
 
440
- current_hash = Hash[ self.member_sids.map { |sid| [sid.to_s, sid] } ]
459
+ current_hash = Hash[ self.member_sids.map { |sid| [sid.sid, sid] } ]
441
460
  desired_hash = self.class.name_sid_hash(desired_members)
442
461
 
443
462
  # First we add all missing members
@@ -464,8 +483,26 @@ module Puppet::Util::Windows::ADSI
464
483
  new(name, Puppet::Util::Windows::ADSI.create(name, 'group'))
465
484
  end
466
485
 
467
- def self.exists?(name)
468
- Puppet::Util::Windows::ADSI.connectable?(Group.uri(name))
486
+ def self.exists?(name_or_sid)
487
+ well_known = false
488
+ if (sid = Puppet::Util::Windows::SID.name_to_sid_object(name_or_sid))
489
+ return true if sid.account_type == :SidTypeGroup
490
+
491
+ # 'well known group' is special as it can be a group like Everyone OR a user like SYSTEM
492
+ # so try to resolve it
493
+ # https://msdn.microsoft.com/en-us/library/cc234477.aspx
494
+ well_known = sid.account_type == :SidTypeWellKnownGroup
495
+ return false if sid.account_type != :SidTypeAlias && !well_known
496
+ name_or_sid = "#{sid.domain}\\#{sid.account}"
497
+ end
498
+
499
+ user = Puppet::Util::Windows::ADSI.connect(Group.uri(*Group.parse_name(name_or_sid)))
500
+ user.Class == 'Group'
501
+ rescue
502
+ # special groups like Authenticated Users cannot resolve via moniker like WinNT://./Authenticated Users,group
503
+ # and thus fail to connect - so given a validly resolved SID, this failure is ambiguous as it
504
+ # may indicate either a group like Service or an account like SYSTEM
505
+ well_known
469
506
  end
470
507
 
471
508
  def self.delete(name)
@@ -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
  # );
@@ -49,7 +49,7 @@ module Puppet::Util::Windows::COM
49
49
  CLSCTX_ALL = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER
50
50
  CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER
51
51
 
52
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
52
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615(v=vs.85).aspx
53
53
  # HRESULT CoCreateInstance(
54
54
  # _In_ REFCLSID rclsid,
55
55
  # _In_ LPUNKNOWN pUnkOuter,
@@ -202,14 +202,14 @@ module Puppet::Util::Windows::COM
202
202
 
203
203
  Unknown = Instance[IUnknown]
204
204
 
205
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms678543(v=vs.85).aspx
205
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms678543(v=vs.85).aspx
206
206
  # HRESULT CoInitialize(
207
207
  # _In_opt_ LPVOID pvReserved
208
208
  # );
209
209
  ffi_lib :ole32
210
210
  attach_function_private :CoInitialize, [:lpvoid], :hresult
211
211
 
212
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms688715(v=vs.85).aspx
212
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms688715(v=vs.85).aspx
213
213
  # void CoUninitialize(void);
214
214
  ffi_lib :ole32
215
215
  attach_function_private :CoUninitialize, [], :void
@@ -66,7 +66,7 @@ class Puppet::Util::Windows::Error < Puppet::Error
66
66
 
67
67
  ffi_convention :stdcall
68
68
 
69
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
69
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms679351(v=vs.85).aspx
70
70
  # DWORD WINAPI FormatMessage(
71
71
  # _In_ DWORD dwFlags,
72
72
  # _In_opt_ LPCVOID lpSource,
@@ -272,7 +272,7 @@ module Puppet::Util::Windows::File
272
272
 
273
273
  private
274
274
 
275
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa364571(v=vs.85).aspx
275
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa364571(v=vs.85).aspx
276
276
  FSCTL_GET_REPARSE_POINT = 0x900a8
277
277
 
278
278
  def self.resolve_symlink(handle)
@@ -290,7 +290,7 @@ module Puppet::Util::Windows::File
290
290
 
291
291
  ffi_convention :stdcall
292
292
 
293
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa365512(v=vs.85).aspx
293
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa365512(v=vs.85).aspx
294
294
  # BOOL WINAPI ReplaceFile(
295
295
  # _In_ LPCTSTR lpReplacedFileName,
296
296
  # _In_ LPCTSTR lpReplacementFileName,
@@ -305,7 +305,7 @@ module Puppet::Util::Windows::File
305
305
  attach_function_private :ReplaceFileW,
306
306
  [:lpcwstr, :lpcwstr, :lpcwstr, :dword, :lpvoid, :lpvoid], :win32_bool
307
307
 
308
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx
308
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa365240(v=vs.85).aspx
309
309
  # BOOL WINAPI MoveFileEx(
310
310
  # _In_ LPCTSTR lpExistingFileName,
311
311
  # _In_opt_ LPCTSTR lpNewFileName,
@@ -328,7 +328,7 @@ module Puppet::Util::Windows::File
328
328
  rescue LoadError
329
329
  end
330
330
 
331
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa364944(v=vs.85).aspx
331
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa364944(v=vs.85).aspx
332
332
  # DWORD WINAPI GetFileAttributes(
333
333
  # _In_ LPCTSTR lpFileName
334
334
  # );
@@ -336,7 +336,7 @@ module Puppet::Util::Windows::File
336
336
  attach_function_private :GetFileAttributesW,
337
337
  [:lpcwstr], :dword
338
338
 
339
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx
339
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx
340
340
  # BOOL WINAPI SetFileAttributes(
341
341
  # _In_ LPCTSTR lpFileName,
342
342
  # _In_ DWORD dwFileAttributes
@@ -358,7 +358,7 @@ module Puppet::Util::Windows::File
358
358
  attach_function_private :CreateFileW,
359
359
  [:lpcwstr, :dword, :dword, :pointer, :dword, :dword, :handle], :handle
360
360
 
361
- # http://msdn.microsoft.com/en-us/library/windows/desktop/aa363216(v=vs.85).aspx
361
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa363216(v=vs.85).aspx
362
362
  # BOOL WINAPI DeviceIoControl(
363
363
  # _In_ HANDLE hDevice,
364
364
  # _In_ DWORD dwIoControlCode,
@@ -376,8 +376,8 @@ module Puppet::Util::Windows::File
376
376
  MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16384
377
377
 
378
378
  # REPARSE_DATA_BUFFER
379
- # http://msdn.microsoft.com/en-us/library/cc232006.aspx
380
- # http://msdn.microsoft.com/en-us/library/windows/hardware/ff552012(v=vs.85).aspx
379
+ # https://msdn.microsoft.com/en-us/library/cc232006.aspx
380
+ # https://msdn.microsoft.com/en-us/library/windows/hardware/ff552012(v=vs.85).aspx
381
381
  # struct is always MAXIMUM_REPARSE_DATA_BUFFER_SIZE bytes
382
382
  class REPARSE_DATA_BUFFER < FFI::Struct
383
383
  layout :ReparseTag, :win32_ulong,