puppet 6.16.0-universal-darwin → 7.0.0-universal-darwin

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (645) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -3
  3. data/Gemfile.lock +31 -33
  4. data/README.md +4 -5
  5. data/Rakefile +4 -12
  6. data/conf/fileserver.conf +5 -10
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/osx/file_mapping.yaml +0 -5
  9. data/ext/project_data.yaml +1 -14
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/ext/windows/service/daemon.rb +6 -5
  12. data/install.rb +21 -17
  13. data/lib/puppet.rb +11 -20
  14. data/lib/puppet/agent.rb +2 -2
  15. data/lib/puppet/agent/locker.rb +0 -7
  16. data/lib/puppet/application.rb +172 -98
  17. data/lib/puppet/application/agent.rb +22 -6
  18. data/lib/puppet/application/apply.rb +18 -20
  19. data/lib/puppet/application/device.rb +100 -104
  20. data/lib/puppet/application/doc.rb +1 -1
  21. data/lib/puppet/application/filebucket.rb +15 -11
  22. data/lib/puppet/application/lookup.rb +16 -4
  23. data/lib/puppet/application/ssl.rb +1 -1
  24. data/lib/puppet/configurer.rb +66 -31
  25. data/lib/puppet/configurer/downloader.rb +31 -10
  26. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  27. data/lib/puppet/confine.rb +2 -2
  28. data/lib/puppet/confine/any.rb +1 -1
  29. data/lib/puppet/defaults.rb +166 -169
  30. data/lib/puppet/environments.rb +41 -15
  31. data/lib/puppet/face/catalog.rb +1 -1
  32. data/lib/puppet/face/config.rb +56 -16
  33. data/lib/puppet/face/epp.rb +12 -2
  34. data/lib/puppet/face/facts.rb +66 -6
  35. data/lib/puppet/face/help.rb +1 -1
  36. data/lib/puppet/face/node.rb +3 -3
  37. data/lib/puppet/face/node/clean.rb +2 -2
  38. data/lib/puppet/face/plugin.rb +5 -8
  39. data/lib/puppet/feature/base.rb +1 -1
  40. data/lib/puppet/ffi/windows.rb +12 -0
  41. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  42. data/lib/puppet/ffi/windows/constants.rb +404 -0
  43. data/lib/puppet/ffi/windows/functions.rb +628 -0
  44. data/lib/puppet/ffi/windows/structs.rb +338 -0
  45. data/lib/puppet/file_bucket/dipper.rb +1 -1
  46. data/lib/puppet/file_serving/configuration.rb +0 -5
  47. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  48. data/lib/puppet/file_serving/http_metadata.rb +13 -1
  49. data/lib/puppet/file_serving/metadata.rb +4 -1
  50. data/lib/puppet/file_serving/mount.rb +1 -2
  51. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  52. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  53. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  54. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  55. data/lib/puppet/file_system/file_impl.rb +4 -4
  56. data/lib/puppet/file_system/uniquefile.rb +8 -16
  57. data/lib/puppet/forge.rb +1 -1
  58. data/lib/puppet/forge/cache.rb +1 -1
  59. data/lib/puppet/forge/repository.rb +3 -8
  60. data/lib/puppet/functions/epp.rb +1 -0
  61. data/lib/puppet/functions/inline_epp.rb +1 -0
  62. data/lib/puppet/functions/lstrip.rb +4 -4
  63. data/lib/puppet/functions/new.rb +8 -3
  64. data/lib/puppet/functions/reverse_each.rb +1 -1
  65. data/lib/puppet/functions/rstrip.rb +4 -4
  66. data/lib/puppet/functions/step.rb +1 -1
  67. data/lib/puppet/functions/strip.rb +4 -4
  68. data/lib/puppet/generate/models/type/type.rb +4 -1
  69. data/lib/puppet/gettext/config.rb +5 -5
  70. data/lib/puppet/gettext/module_translations.rb +4 -4
  71. data/lib/puppet/http.rb +23 -13
  72. data/lib/puppet/http/client.rb +170 -115
  73. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  74. data/lib/puppet/http/errors.rb +16 -0
  75. data/lib/puppet/http/external_client.rb +5 -7
  76. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  77. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  78. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  79. data/lib/puppet/http/proxy.rb +137 -0
  80. data/lib/puppet/http/redirector.rb +13 -19
  81. data/lib/puppet/http/resolver.rb +10 -23
  82. data/lib/puppet/http/resolver/server_list.rb +23 -45
  83. data/lib/puppet/http/resolver/settings.rb +7 -10
  84. data/lib/puppet/http/resolver/srv.rb +11 -15
  85. data/lib/puppet/http/response.rb +49 -48
  86. data/lib/puppet/http/response_converter.rb +24 -0
  87. data/lib/puppet/http/response_net_http.rb +42 -0
  88. data/lib/puppet/http/retry_after_handler.rb +4 -13
  89. data/lib/puppet/http/service.rb +15 -27
  90. data/lib/puppet/http/service/ca.rb +11 -22
  91. data/lib/puppet/http/service/compiler.rb +23 -70
  92. data/lib/puppet/http/service/file_server.rb +19 -28
  93. data/lib/puppet/http/service/puppetserver.rb +53 -0
  94. data/lib/puppet/http/service/report.rb +8 -10
  95. data/lib/puppet/http/session.rb +16 -24
  96. data/lib/puppet/{network/http → http}/site.rb +1 -2
  97. data/lib/puppet/indirector.rb +1 -1
  98. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  99. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  100. data/lib/puppet/indirector/exec.rb +1 -1
  101. data/lib/puppet/indirector/fact_search.rb +60 -0
  102. data/lib/puppet/indirector/facts/facter.rb +27 -6
  103. data/lib/puppet/indirector/facts/json.rb +27 -0
  104. data/lib/puppet/indirector/facts/rest.rb +3 -22
  105. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  106. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  107. data/lib/puppet/indirector/file_content/rest.rb +3 -7
  108. data/lib/puppet/indirector/file_metadata/http.rb +25 -5
  109. data/lib/puppet/indirector/file_metadata/rest.rb +5 -11
  110. data/lib/puppet/indirector/file_server.rb +1 -8
  111. data/lib/puppet/indirector/generic_http.rb +0 -11
  112. data/lib/puppet/indirector/hiera.rb +4 -0
  113. data/lib/puppet/indirector/indirection.rb +1 -1
  114. data/lib/puppet/indirector/json.rb +5 -1
  115. data/lib/puppet/indirector/msgpack.rb +1 -1
  116. data/lib/puppet/indirector/node/json.rb +8 -0
  117. data/lib/puppet/indirector/node/rest.rb +2 -4
  118. data/lib/puppet/indirector/report/json.rb +34 -0
  119. data/lib/puppet/indirector/report/processor.rb +2 -2
  120. data/lib/puppet/indirector/report/rest.rb +3 -8
  121. data/lib/puppet/indirector/request.rb +2 -103
  122. data/lib/puppet/indirector/rest.rb +12 -263
  123. data/lib/puppet/indirector/yaml.rb +1 -1
  124. data/lib/puppet/module.rb +1 -2
  125. data/lib/puppet/module_tool/applications.rb +0 -1
  126. data/lib/puppet/network/authconfig.rb +2 -96
  127. data/lib/puppet/network/authorization.rb +13 -35
  128. data/lib/puppet/network/format_support.rb +2 -2
  129. data/lib/puppet/network/formats.rb +2 -1
  130. data/lib/puppet/network/http.rb +3 -3
  131. data/lib/puppet/network/http/api/indirected_routes.rb +3 -21
  132. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  133. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  134. data/lib/puppet/network/http/connection.rb +247 -316
  135. data/lib/puppet/network/http/handler.rb +0 -1
  136. data/lib/puppet/network/http/route.rb +2 -2
  137. data/lib/puppet/network/http_pool.rb +16 -34
  138. data/lib/puppet/node.rb +1 -30
  139. data/lib/puppet/node/environment.rb +12 -5
  140. data/lib/puppet/node/facts.rb +17 -0
  141. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  142. data/lib/puppet/pal/pal_impl.rb +93 -14
  143. data/lib/puppet/parameter.rb +1 -1
  144. data/lib/puppet/parser/ast/leaf.rb +5 -5
  145. data/lib/puppet/parser/ast/pops_bridge.rb +0 -42
  146. data/lib/puppet/parser/compiler.rb +1 -199
  147. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  148. data/lib/puppet/parser/functions.rb +21 -17
  149. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  150. data/lib/puppet/parser/resource.rb +3 -71
  151. data/lib/puppet/parser/resource/param.rb +6 -0
  152. data/lib/puppet/parser/type_loader.rb +2 -2
  153. data/lib/puppet/pops/adaptable.rb +7 -13
  154. data/lib/puppet/pops/adapters.rb +8 -4
  155. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  156. data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -13
  157. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  158. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  159. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  160. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  161. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  162. data/lib/puppet/pops/loaders.rb +18 -11
  163. data/lib/puppet/pops/lookup/context.rb +1 -1
  164. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  165. data/lib/puppet/pops/model/ast.pp +0 -42
  166. data/lib/puppet/pops/model/ast.rb +0 -290
  167. data/lib/puppet/pops/model/factory.rb +0 -45
  168. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  169. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  170. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  171. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  172. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  173. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  174. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  175. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -22
  176. data/lib/puppet/pops/types/iterable.rb +34 -8
  177. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  178. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  179. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  180. data/lib/puppet/pops/types/type_parser.rb +0 -4
  181. data/lib/puppet/pops/types/types.rb +0 -1
  182. data/lib/puppet/pops/validation/checker4_0.rb +28 -42
  183. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  184. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -1
  185. data/lib/puppet/provider.rb +0 -13
  186. data/lib/puppet/provider/file/windows.rb +1 -1
  187. data/lib/puppet/provider/nameservice.rb +0 -18
  188. data/lib/puppet/provider/package/apt.rb +34 -0
  189. data/lib/puppet/provider/package/aptitude.rb +1 -1
  190. data/lib/puppet/provider/package/dpkg.rb +1 -11
  191. data/lib/puppet/provider/package/gem.rb +27 -5
  192. data/lib/puppet/provider/package/pip.rb +0 -1
  193. data/lib/puppet/provider/package/pip2.rb +17 -0
  194. data/lib/puppet/provider/package/pkg.rb +0 -4
  195. data/lib/puppet/provider/package/portage.rb +1 -1
  196. data/lib/puppet/provider/package/puppet_gem.rb +6 -4
  197. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  198. data/lib/puppet/provider/package/yum.rb +2 -1
  199. data/lib/puppet/provider/package/zypper.rb +3 -0
  200. data/lib/puppet/provider/service/smf.rb +191 -73
  201. data/lib/puppet/provider/service/windows.rb +23 -7
  202. data/lib/puppet/provider/user/aix.rb +1 -1
  203. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  204. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  205. data/lib/puppet/provider/user/useradd.rb +11 -4
  206. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  207. data/lib/puppet/reference/configuration.rb +2 -0
  208. data/lib/puppet/reference/indirection.rb +1 -1
  209. data/lib/puppet/reports/http.rb +2 -0
  210. data/lib/puppet/resource.rb +3 -90
  211. data/lib/puppet/resource/catalog.rb +1 -14
  212. data/lib/puppet/resource/type.rb +5 -112
  213. data/lib/puppet/resource/type_collection.rb +3 -48
  214. data/lib/puppet/runtime.rb +1 -2
  215. data/lib/puppet/settings.rb +84 -35
  216. data/lib/puppet/settings/base_setting.rb +26 -2
  217. data/lib/puppet/settings/integer_setting.rb +17 -0
  218. data/lib/puppet/settings/port_setting.rb +15 -0
  219. data/lib/puppet/settings/priority_setting.rb +5 -4
  220. data/lib/puppet/ssl.rb +10 -6
  221. data/lib/puppet/ssl/base.rb +3 -5
  222. data/lib/puppet/ssl/certificate.rb +0 -6
  223. data/lib/puppet/ssl/certificate_request.rb +1 -12
  224. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  225. data/lib/puppet/ssl/oids.rb +3 -1
  226. data/lib/puppet/ssl/ssl_context.rb +2 -2
  227. data/lib/puppet/ssl/ssl_provider.rb +37 -1
  228. data/lib/puppet/ssl/state_machine.rb +3 -1
  229. data/lib/puppet/ssl/verifier.rb +2 -0
  230. data/lib/puppet/test/test_helper.rb +19 -16
  231. data/lib/puppet/transaction.rb +3 -9
  232. data/lib/puppet/transaction/persistence.rb +1 -1
  233. data/lib/puppet/transaction/report.rb +10 -8
  234. data/lib/puppet/trusted_external.rb +29 -1
  235. data/lib/puppet/type.rb +9 -77
  236. data/lib/puppet/type/file.rb +45 -22
  237. data/lib/puppet/type/file/checksum.rb +5 -5
  238. data/lib/puppet/type/file/source.rb +33 -13
  239. data/lib/puppet/type/filebucket.rb +4 -4
  240. data/lib/puppet/type/notify.rb +2 -2
  241. data/lib/puppet/type/package.rb +5 -13
  242. data/lib/puppet/type/service.rb +53 -0
  243. data/lib/puppet/type/user.rb +18 -3
  244. data/lib/puppet/util.rb +41 -3
  245. data/lib/puppet/util/autoload.rb +9 -7
  246. data/lib/puppet/util/character_encoding.rb +9 -5
  247. data/lib/puppet/util/checksums.rb +19 -4
  248. data/lib/puppet/util/execution.rb +2 -13
  249. data/lib/puppet/util/fileparsing.rb +2 -2
  250. data/lib/puppet/util/http_proxy.rb +2 -215
  251. data/lib/puppet/util/monkey_patches.rb +0 -46
  252. data/lib/puppet/util/provider_features.rb +1 -1
  253. data/lib/puppet/util/rdoc.rb +0 -7
  254. data/lib/puppet/util/reference.rb +1 -1
  255. data/lib/puppet/util/retry_action.rb +1 -1
  256. data/lib/puppet/util/rubygems.rb +5 -1
  257. data/lib/puppet/util/run_mode.rb +14 -2
  258. data/lib/puppet/util/windows.rb +3 -7
  259. data/lib/puppet/util/windows/daemon.rb +360 -0
  260. data/lib/puppet/util/windows/error.rb +1 -0
  261. data/lib/puppet/util/windows/eventlog.rb +5 -15
  262. data/lib/puppet/util/windows/file.rb +8 -242
  263. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  264. data/lib/puppet/util/windows/principal.rb +8 -6
  265. data/lib/puppet/util/windows/process.rb +4 -226
  266. data/lib/puppet/util/windows/registry.rb +11 -11
  267. data/lib/puppet/util/windows/security.rb +4 -4
  268. data/lib/puppet/util/windows/service.rb +52 -486
  269. data/lib/puppet/util/windows/string.rb +12 -13
  270. data/lib/puppet/util/windows/user.rb +242 -8
  271. data/lib/puppet/util/yaml.rb +0 -22
  272. data/lib/puppet/vendor/require_vendored.rb +0 -1
  273. data/lib/puppet/version.rb +1 -1
  274. data/lib/puppet/x509.rb +5 -1
  275. data/lib/puppet/x509/cert_provider.rb +29 -1
  276. data/locales/puppet.pot +713 -1380
  277. data/man/man5/puppet.conf.5 +84 -98
  278. data/man/man8/puppet-agent.8 +7 -4
  279. data/man/man8/puppet-apply.8 +1 -1
  280. data/man/man8/puppet-catalog.8 +1 -1
  281. data/man/man8/puppet-config.8 +6 -6
  282. data/man/man8/puppet-describe.8 +1 -1
  283. data/man/man8/puppet-device.8 +1 -1
  284. data/man/man8/puppet-doc.8 +1 -1
  285. data/man/man8/puppet-epp.8 +1 -1
  286. data/man/man8/puppet-facts.8 +55 -9
  287. data/man/man8/puppet-filebucket.8 +6 -6
  288. data/man/man8/puppet-generate.8 +1 -1
  289. data/man/man8/puppet-help.8 +1 -1
  290. data/man/man8/puppet-lookup.8 +2 -2
  291. data/man/man8/puppet-module.8 +1 -58
  292. data/man/man8/puppet-node.8 +7 -4
  293. data/man/man8/puppet-parser.8 +1 -1
  294. data/man/man8/puppet-plugin.8 +1 -1
  295. data/man/man8/puppet-report.8 +4 -1
  296. data/man/man8/puppet-resource.8 +1 -1
  297. data/man/man8/puppet-script.8 +1 -1
  298. data/man/man8/puppet-ssl.8 +1 -1
  299. data/man/man8/puppet.8 +2 -2
  300. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  301. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  302. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  303. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  304. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  305. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  306. data/spec/integration/application/agent_spec.rb +157 -59
  307. data/spec/integration/application/apply_spec.rb +150 -150
  308. data/spec/integration/application/doc_spec.rb +16 -6
  309. data/spec/integration/application/filebucket_spec.rb +78 -29
  310. data/spec/integration/application/help_spec.rb +44 -0
  311. data/spec/integration/application/lookup_spec.rb +13 -0
  312. data/spec/integration/application/module_spec.rb +68 -0
  313. data/spec/integration/application/plugin_spec.rb +76 -4
  314. data/spec/integration/configurer_spec.rb +14 -0
  315. data/spec/integration/data_binding_spec.rb +82 -0
  316. data/spec/integration/defaults_spec.rb +33 -5
  317. data/spec/integration/directory_environments_spec.rb +17 -17
  318. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  319. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  320. data/spec/integration/network/http_pool_spec.rb +29 -30
  321. data/spec/integration/node/environment_spec.rb +1 -1
  322. data/spec/integration/parser/catalog_spec.rb +0 -38
  323. data/spec/integration/parser/compiler_spec.rb +11 -0
  324. data/spec/integration/parser/node_spec.rb +0 -9
  325. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  326. data/spec/integration/type/file_spec.rb +6 -5
  327. data/spec/integration/util/execution_spec.rb +22 -0
  328. data/spec/integration/util/windows/adsi_spec.rb +2 -2
  329. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  330. data/spec/integration/util/windows/process_spec.rb +26 -32
  331. data/spec/integration/util/windows/registry_spec.rb +7 -7
  332. data/spec/integration/util/windows/security_spec.rb +1 -1
  333. data/spec/integration/util/windows/user_spec.rb +47 -5
  334. data/spec/integration/util_spec.rb +7 -33
  335. data/spec/lib/puppet_spec/matchers.rb +0 -80
  336. data/spec/lib/puppet_spec/puppetserver.rb +9 -1
  337. data/spec/lib/puppet_spec/settings.rb +7 -1
  338. data/spec/shared_contexts/types_setup.rb +2 -0
  339. data/spec/spec_helper.rb +2 -0
  340. data/spec/unit/agent_spec.rb +0 -2
  341. data/spec/unit/application/agent_spec.rb +3 -4
  342. data/spec/unit/application/config_spec.rb +224 -4
  343. data/spec/unit/application/doc_spec.rb +2 -2
  344. data/spec/unit/application/face_base_spec.rb +6 -4
  345. data/spec/unit/application/facts_spec.rb +74 -8
  346. data/spec/unit/application/filebucket_spec.rb +41 -39
  347. data/spec/unit/application/resource_spec.rb +3 -1
  348. data/spec/unit/application/ssl_spec.rb +17 -4
  349. data/spec/unit/application_spec.rb +9 -4
  350. data/spec/unit/certificate_factory_spec.rb +1 -1
  351. data/spec/unit/configurer/downloader_spec.rb +14 -0
  352. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  353. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  354. data/spec/unit/configurer_spec.rb +96 -44
  355. data/spec/unit/confine_spec.rb +2 -1
  356. data/spec/unit/context/trusted_information_spec.rb +12 -10
  357. data/spec/unit/defaults_spec.rb +77 -28
  358. data/spec/unit/environments_spec.rb +96 -32
  359. data/spec/unit/face/config_spec.rb +65 -12
  360. data/spec/unit/face/facts_spec.rb +4 -0
  361. data/spec/unit/face/node_spec.rb +2 -2
  362. data/spec/unit/face/plugin_spec.rb +73 -33
  363. data/spec/unit/file_bucket/file_spec.rb +1 -1
  364. data/spec/unit/file_serving/configuration/parser_spec.rb +14 -18
  365. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  366. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  367. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  368. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  369. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  371. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  372. data/spec/unit/file_system_spec.rb +1 -2
  373. data/spec/unit/functions/camelcase_spec.rb +1 -1
  374. data/spec/unit/functions/capitalize_spec.rb +1 -1
  375. data/spec/unit/functions/downcase_spec.rb +1 -1
  376. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  377. data/spec/unit/functions/upcase_spec.rb +1 -1
  378. data/spec/unit/http/client_spec.rb +71 -17
  379. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  380. data/spec/unit/http/external_client_spec.rb +4 -4
  381. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  382. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  383. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  384. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  385. data/spec/unit/http/resolver_spec.rb +34 -15
  386. data/spec/unit/http/response_spec.rb +6 -0
  387. data/spec/unit/http/service/ca_spec.rb +2 -3
  388. data/spec/unit/http/service/compiler_spec.rb +51 -65
  389. data/spec/unit/http/service/file_server_spec.rb +5 -6
  390. data/spec/unit/http/service/puppetserver_spec.rb +112 -0
  391. data/spec/unit/http/service/report_spec.rb +2 -3
  392. data/spec/unit/http/service_spec.rb +1 -3
  393. data/spec/unit/http/session_spec.rb +24 -35
  394. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  395. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  396. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  397. data/spec/unit/indirector/facts/facter_spec.rb +97 -0
  398. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  399. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  400. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  401. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  402. data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
  403. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  404. data/spec/unit/indirector/file_server_spec.rb +1 -15
  405. data/spec/unit/indirector/json_spec.rb +8 -8
  406. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  407. data/spec/unit/indirector/node/json_spec.rb +33 -0
  408. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  409. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  410. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  411. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  412. data/spec/unit/indirector/request_spec.rb +3 -267
  413. data/spec/unit/indirector/rest_spec.rb +98 -752
  414. data/spec/unit/indirector/yaml_spec.rb +7 -7
  415. data/spec/unit/interface_spec.rb +3 -3
  416. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  417. data/spec/unit/network/authconfig_spec.rb +2 -132
  418. data/spec/unit/network/authorization_spec.rb +2 -55
  419. data/spec/unit/network/format_support_spec.rb +3 -2
  420. data/spec/unit/network/formats_spec.rb +4 -4
  421. data/spec/unit/network/http/api/indirected_routes_spec.rb +3 -98
  422. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  423. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  424. data/spec/unit/network/http/api_spec.rb +10 -0
  425. data/spec/unit/network/http/connection_spec.rb +61 -73
  426. data/spec/unit/network/http/handler_spec.rb +0 -6
  427. data/spec/unit/network/http_pool_spec.rb +0 -4
  428. data/spec/unit/node/environment_spec.rb +51 -22
  429. data/spec/unit/node_spec.rb +2 -54
  430. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  431. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  432. data/spec/unit/parser/scope_spec.rb +1 -1
  433. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -8
  434. data/spec/unit/pops/loaders/loaders_spec.rb +77 -22
  435. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  436. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  437. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  438. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  439. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  440. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  441. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  442. data/spec/unit/pops/types/type_calculator_spec.rb +7 -17
  443. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  444. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  445. data/spec/unit/pops/visitor_spec.rb +1 -1
  446. data/spec/unit/provider/exec_spec.rb +4 -3
  447. data/spec/unit/provider/nameservice_spec.rb +0 -57
  448. data/spec/unit/provider/package/apt_spec.rb +77 -0
  449. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  450. data/spec/unit/provider/package/dpkg_spec.rb +22 -55
  451. data/spec/unit/provider/package/gem_spec.rb +32 -0
  452. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  453. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  454. data/spec/unit/provider/package/puppet_gem_spec.rb +6 -2
  455. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  456. data/spec/unit/provider/package/yum_spec.rb +31 -0
  457. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  458. data/spec/unit/provider/service/base_spec.rb +2 -4
  459. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  460. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  461. data/spec/unit/provider/service/debian_spec.rb +3 -5
  462. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  463. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  464. data/spec/unit/provider/service/init_spec.rb +45 -5
  465. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  466. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  467. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  468. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  469. data/spec/unit/provider/service/runit_spec.rb +2 -1
  470. data/spec/unit/provider/service/smf_spec.rb +402 -166
  471. data/spec/unit/provider/service/src_spec.rb +3 -5
  472. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  473. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  474. data/spec/unit/provider/service/windows_spec.rb +50 -15
  475. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  476. data/spec/unit/provider/user/useradd_spec.rb +22 -16
  477. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  478. data/spec/unit/provider_spec.rb +0 -12
  479. data/spec/unit/puppet_pal_2pec.rb +40 -0
  480. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  481. data/spec/unit/reports/store_spec.rb +17 -13
  482. data/spec/unit/resource/type_collection_spec.rb +2 -22
  483. data/spec/unit/resource_spec.rb +3 -59
  484. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  485. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  486. data/spec/unit/settings/port_setting_spec.rb +31 -0
  487. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  488. data/spec/unit/settings_spec.rb +586 -239
  489. data/spec/unit/ssl/base_spec.rb +36 -3
  490. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  491. data/spec/unit/ssl/certificate_spec.rb +2 -11
  492. data/spec/unit/ssl/ssl_provider_spec.rb +78 -49
  493. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  494. data/spec/unit/ssl/verifier_spec.rb +0 -21
  495. data/spec/unit/test/test_helper_spec.rb +17 -0
  496. data/spec/unit/transaction/persistence_spec.rb +15 -0
  497. data/spec/unit/transaction/report_spec.rb +3 -3
  498. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  499. data/spec/unit/transaction_spec.rb +45 -79
  500. data/spec/unit/type/file/checksum_spec.rb +6 -6
  501. data/spec/unit/type/file/content_spec.rb +1 -1
  502. data/spec/unit/type/file/ensure_spec.rb +1 -1
  503. data/spec/unit/type/file/mode_spec.rb +1 -1
  504. data/spec/unit/type/file/source_spec.rb +4 -5
  505. data/spec/unit/type/file_spec.rb +134 -102
  506. data/spec/unit/type/filebucket_spec.rb +1 -1
  507. data/spec/unit/type/package_spec.rb +1 -1
  508. data/spec/unit/type/service_spec.rb +209 -0
  509. data/spec/unit/type/user_spec.rb +31 -2
  510. data/spec/unit/type_spec.rb +70 -0
  511. data/spec/unit/util/backups_spec.rb +0 -2
  512. data/spec/unit/util/character_encoding_spec.rb +4 -4
  513. data/spec/unit/util/checksums_spec.rb +16 -0
  514. data/spec/unit/util/command_line_spec.rb +11 -6
  515. data/spec/unit/util/execution_spec.rb +0 -29
  516. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  517. data/spec/unit/util/rubygems_spec.rb +2 -2
  518. data/spec/unit/util/run_mode_spec.rb +27 -127
  519. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  520. data/spec/unit/util/windows/service_spec.rb +4 -4
  521. data/spec/unit/util/windows/string_spec.rb +1 -3
  522. data/spec/unit/util/yaml_spec.rb +0 -54
  523. data/spec/unit/util_spec.rb +3 -21
  524. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  525. metadata +76 -214
  526. data/conf/auth.conf +0 -150
  527. data/lib/puppet/application/cert.rb +0 -76
  528. data/lib/puppet/application/key.rb +0 -4
  529. data/lib/puppet/application/man.rb +0 -4
  530. data/lib/puppet/application/status.rb +0 -4
  531. data/lib/puppet/face/key.rb +0 -16
  532. data/lib/puppet/face/man.rb +0 -145
  533. data/lib/puppet/face/module/build.rb +0 -14
  534. data/lib/puppet/face/module/generate.rb +0 -14
  535. data/lib/puppet/face/module/search.rb +0 -103
  536. data/lib/puppet/face/status.rb +0 -51
  537. data/lib/puppet/indirector/certificate/file.rb +0 -9
  538. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  539. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  540. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  541. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  542. data/lib/puppet/indirector/file_content/http.rb +0 -22
  543. data/lib/puppet/indirector/key/file.rb +0 -46
  544. data/lib/puppet/indirector/key/memory.rb +0 -7
  545. data/lib/puppet/indirector/ssl_file.rb +0 -162
  546. data/lib/puppet/indirector/status.rb +0 -3
  547. data/lib/puppet/indirector/status/local.rb +0 -12
  548. data/lib/puppet/indirector/status/rest.rb +0 -27
  549. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  550. data/lib/puppet/network/auth_config_parser.rb +0 -90
  551. data/lib/puppet/network/authstore.rb +0 -283
  552. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  553. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -85
  554. data/lib/puppet/network/http/base_pool.rb +0 -36
  555. data/lib/puppet/network/http/compression.rb +0 -127
  556. data/lib/puppet/network/http/connection_adapter.rb +0 -182
  557. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  558. data/lib/puppet/network/rest_controller.rb +0 -2
  559. data/lib/puppet/network/rights.rb +0 -210
  560. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -64
  561. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -20
  562. data/lib/puppet/parser/environment_compiler.rb +0 -199
  563. data/lib/puppet/pops/types/enumeration.rb +0 -16
  564. data/lib/puppet/resource/capability_finder.rb +0 -154
  565. data/lib/puppet/rest/errors.rb +0 -15
  566. data/lib/puppet/rest/response.rb +0 -35
  567. data/lib/puppet/rest/route.rb +0 -85
  568. data/lib/puppet/rest/routes.rb +0 -135
  569. data/lib/puppet/ssl/host.rb +0 -505
  570. data/lib/puppet/ssl/key.rb +0 -61
  571. data/lib/puppet/ssl/validator.rb +0 -61
  572. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  573. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  574. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  575. data/lib/puppet/status.rb +0 -40
  576. data/lib/puppet/util/connection.rb +0 -88
  577. data/lib/puppet/util/ssl.rb +0 -83
  578. data/lib/puppet/util/windows/api_types.rb +0 -282
  579. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  580. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  581. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  582. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  583. data/lib/puppet/vendor/pathspec/README.md +0 -53
  584. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  585. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  586. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  587. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  588. data/man/man8/puppet-key.8 +0 -126
  589. data/man/man8/puppet-man.8 +0 -76
  590. data/man/man8/puppet-status.8 +0 -108
  591. data/spec/integration/faces/config_spec.rb +0 -91
  592. data/spec/integration/faces/documentation_spec.rb +0 -57
  593. data/spec/integration/file_bucket/file_spec.rb +0 -50
  594. data/spec/integration/file_serving/content_spec.rb +0 -7
  595. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  596. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  597. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  598. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  599. data/spec/integration/module_tool/forge_spec.rb +0 -51
  600. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  601. data/spec/integration/network/authconfig_spec.rb +0 -256
  602. data/spec/integration/provider/service/init_spec.rb +0 -48
  603. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  604. data/spec/integration/provider/service/windows_spec.rb +0 -50
  605. data/spec/integration/reference/providers_spec.rb +0 -21
  606. data/spec/integration/reports_spec.rb +0 -13
  607. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  608. data/spec/integration/ssl/host_spec.rb +0 -72
  609. data/spec/integration/ssl/key_spec.rb +0 -99
  610. data/spec/integration/test/test_helper_spec.rb +0 -31
  611. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  612. data/spec/unit/capability_spec.rb +0 -414
  613. data/spec/unit/face/catalog_spec.rb +0 -6
  614. data/spec/unit/face/key_spec.rb +0 -9
  615. data/spec/unit/face/man_spec.rb +0 -25
  616. data/spec/unit/face/module/search_spec.rb +0 -231
  617. data/spec/unit/face/module_spec.rb +0 -3
  618. data/spec/unit/face/status_spec.rb +0 -9
  619. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  620. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  621. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  622. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  623. data/spec/unit/indirector/key/file_spec.rb +0 -79
  624. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  625. data/spec/unit/indirector/status/local_spec.rb +0 -10
  626. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  627. data/spec/unit/man_spec.rb +0 -31
  628. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  629. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  630. data/spec/unit/network/authstore_spec.rb +0 -422
  631. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  632. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  633. data/spec/unit/network/http/compression_spec.rb +0 -240
  634. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  635. data/spec/unit/network/http_spec.rb +0 -9
  636. data/spec/unit/network/rights_spec.rb +0 -439
  637. data/spec/unit/parser/environment_compiler_spec.rb +0 -723
  638. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  639. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  640. data/spec/unit/rest/route_spec.rb +0 -132
  641. data/spec/unit/ssl/host_spec.rb +0 -650
  642. data/spec/unit/ssl/key_spec.rb +0 -173
  643. data/spec/unit/ssl/validator_spec.rb +0 -278
  644. data/spec/unit/status_spec.rb +0 -45
  645. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -41,6 +41,7 @@ module Puppet::Util::Windows::SID
41
41
  # = 8 + max sub identifiers (15) * 4
42
42
  MAXIMUM_SID_BYTE_LENGTH = 68
43
43
 
44
+ ERROR_INVALID_PARAMETER = 87
44
45
  ERROR_INSUFFICIENT_BUFFER = 122
45
46
 
46
47
  def self.lookup_account_name(system_name = nil, account_name)
@@ -48,9 +49,7 @@ module Puppet::Util::Windows::SID
48
49
  begin
49
50
  if system_name
50
51
  system_name_wide = Puppet::Util::Windows::String.wide_string(system_name)
51
- # uchar here is synonymous with byte
52
- system_name_ptr = FFI::MemoryPointer.new(:byte, system_name_wide.bytesize)
53
- system_name_ptr.put_array_of_uchar(0, system_name_wide.bytes.to_a)
52
+ system_name_ptr = FFI::MemoryPointer.from_wide_string(system_name_wide)
54
53
  end
55
54
 
56
55
  FFI::MemoryPointer.from_string_to_wide_string(account_name) do |account_name_ptr|
@@ -101,9 +100,7 @@ module Puppet::Util::Windows::SID
101
100
  begin
102
101
  if system_name
103
102
  system_name_wide = Puppet::Util::Windows::String.wide_string(system_name)
104
- # uchar here is synonymous with byte
105
- system_name_ptr = FFI::MemoryPointer.new(:byte, system_name_wide.bytesize)
106
- system_name_ptr.put_array_of_uchar(0, system_name_wide.bytes.to_a)
103
+ system_name_ptr = FFI::MemoryPointer.from_wide_string(system_name_wide)
107
104
  end
108
105
 
109
106
  FFI::MemoryPointer.new(:byte, sid_bytes.length) do |sid_ptr|
@@ -112,6 +109,11 @@ module Puppet::Util::Windows::SID
112
109
  FFI::MemoryPointer.new(:uint32, 1) do |name_use_enum_ptr|
113
110
 
114
111
  sid_ptr.write_array_of_uchar(sid_bytes)
112
+
113
+ if Puppet::Util::Windows::SID.IsValidSid(sid_ptr) == FFI::WIN32_FALSE
114
+ raise Puppet::Util::Windows::Error.new(_('Byte array for lookup_account_sid is invalid: %{sid_bytes}') % { sid_bytes: sid_bytes }, ERROR_INVALID_PARAMETER)
115
+ end
116
+
115
117
  success = LookupAccountSidW(system_name_ptr, sid_ptr, FFI::Pointer::NULL, name_length_ptr,
116
118
  FFI::Pointer::NULL, domain_length_ptr, name_use_enum_ptr)
117
119
  last_error = FFI.errno
@@ -1,10 +1,10 @@
1
- require 'puppet/util/windows'
2
- require 'win32/process'
3
- require 'ffi'
1
+ require 'puppet/util/windows/monkey_patches/process'
2
+ require 'puppet/ffi/windows'
4
3
 
5
4
  module Puppet::Util::Windows::Process
5
+ extend Puppet::FFI::Windows::Functions
6
+ include Puppet::FFI::Windows::Structs
6
7
  extend Puppet::Util::Windows::String
7
- extend FFI::Library
8
8
 
9
9
  WAIT_TIMEOUT = 0x102
10
10
  WAIT_INTERVAL = 200
@@ -361,226 +361,4 @@ module Puppet::Util::Windows::Process
361
361
  end
362
362
  module_function :supports_elevated_security?
363
363
 
364
- ABOVE_NORMAL_PRIORITY_CLASS = 0x0008000
365
- BELOW_NORMAL_PRIORITY_CLASS = 0x0004000
366
- HIGH_PRIORITY_CLASS = 0x0000080
367
- IDLE_PRIORITY_CLASS = 0x0000040
368
- NORMAL_PRIORITY_CLASS = 0x0000020
369
- REALTIME_PRIORITY_CLASS = 0x0000010
370
-
371
- ffi_convention :stdcall
372
-
373
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx
374
- # DWORD WINAPI WaitForSingleObject(
375
- # _In_ HANDLE hHandle,
376
- # _In_ DWORD dwMilliseconds
377
- # );
378
- ffi_lib :kernel32
379
- attach_function_private :WaitForSingleObject,
380
- [:handle, :dword], :dword
381
-
382
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms683189(v=vs.85).aspx
383
- # BOOL WINAPI GetExitCodeProcess(
384
- # _In_ HANDLE hProcess,
385
- # _Out_ LPDWORD lpExitCode
386
- # );
387
- ffi_lib :kernel32
388
- attach_function_private :GetExitCodeProcess,
389
- [:handle, :lpdword], :win32_bool
390
-
391
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms683179(v=vs.85).aspx
392
- # HANDLE WINAPI GetCurrentProcess(void);
393
- ffi_lib :kernel32
394
- attach_function_private :GetCurrentProcess, [], :handle
395
-
396
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms683187(v=vs.85).aspx
397
- # LPTCH GetEnvironmentStrings(void);
398
- ffi_lib :kernel32
399
- attach_function_private :GetEnvironmentStringsW, [], :pointer
400
-
401
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms683151(v=vs.85).aspx
402
- # BOOL FreeEnvironmentStrings(
403
- # _In_ LPTCH lpszEnvironmentBlock
404
- # );
405
- ffi_lib :kernel32
406
- attach_function_private :FreeEnvironmentStringsW,
407
- [:pointer], :win32_bool
408
-
409
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms686206(v=vs.85).aspx
410
- # BOOL WINAPI SetEnvironmentVariableW(
411
- # _In_ LPCTSTR lpName,
412
- # _In_opt_ LPCTSTR lpValue
413
- # );
414
- ffi_lib :kernel32
415
- attach_function_private :SetEnvironmentVariableW,
416
- [:lpcwstr, :lpcwstr], :win32_bool
417
-
418
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms684320(v=vs.85).aspx
419
- # HANDLE WINAPI OpenProcess(
420
- # _In_ DWORD DesiredAccess,
421
- # _In_ BOOL InheritHandle,
422
- # _In_ DWORD ProcessId
423
- # );
424
- ffi_lib :kernel32
425
- attach_function_private :OpenProcess,
426
- [:dword, :win32_bool, :dword], :handle
427
-
428
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379295(v=vs.85).aspx
429
- # BOOL WINAPI OpenProcessToken(
430
- # _In_ HANDLE ProcessHandle,
431
- # _In_ DWORD DesiredAccess,
432
- # _Out_ PHANDLE TokenHandle
433
- # );
434
- ffi_lib :advapi32
435
- attach_function_private :OpenProcessToken,
436
- [:handle, :dword, :phandle], :win32_bool
437
-
438
- # https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-queryfullprocessimagenamew
439
- # BOOL WINAPI QueryFullProcessImageName(
440
- # _In_ HANDLE hProcess,
441
- # _In_ DWORD dwFlags,
442
- # _Out_ LPWSTR lpExeName,
443
- # _In_ PDWORD lpdwSize,
444
- # );
445
- ffi_lib :kernel32
446
- attach_function_private :QueryFullProcessImageNameW,
447
- [:handle, :dword, :lpwstr, :pdword], :win32_bool
448
-
449
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379261(v=vs.85).aspx
450
- # typedef struct _LUID {
451
- # DWORD LowPart;
452
- # LONG HighPart;
453
- # } LUID, *PLUID;
454
- class LUID < FFI::Struct
455
- layout :LowPart, :dword,
456
- :HighPart, :win32_long
457
- end
458
-
459
- # https://msdn.microsoft.com/en-us/library/Windows/desktop/aa379180(v=vs.85).aspx
460
- # BOOL WINAPI LookupPrivilegeValue(
461
- # _In_opt_ LPCTSTR lpSystemName,
462
- # _In_ LPCTSTR lpName,
463
- # _Out_ PLUID lpLuid
464
- # );
465
- ffi_lib :advapi32
466
- attach_function_private :LookupPrivilegeValueW,
467
- [:lpcwstr, :lpcwstr, :pointer], :win32_bool
468
-
469
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379626(v=vs.85).aspx
470
- TOKEN_INFORMATION_CLASS = enum(
471
- :TokenUser, 1,
472
- :TokenGroups,
473
- :TokenPrivileges,
474
- :TokenOwner,
475
- :TokenPrimaryGroup,
476
- :TokenDefaultDacl,
477
- :TokenSource,
478
- :TokenType,
479
- :TokenImpersonationLevel,
480
- :TokenStatistics,
481
- :TokenRestrictedSids,
482
- :TokenSessionId,
483
- :TokenGroupsAndPrivileges,
484
- :TokenSessionReference,
485
- :TokenSandBoxInert,
486
- :TokenAuditPolicy,
487
- :TokenOrigin,
488
- :TokenElevationType,
489
- :TokenLinkedToken,
490
- :TokenElevation,
491
- :TokenHasRestrictions,
492
- :TokenAccessInformation,
493
- :TokenVirtualizationAllowed,
494
- :TokenVirtualizationEnabled,
495
- :TokenIntegrityLevel,
496
- :TokenUIAccess,
497
- :TokenMandatoryPolicy,
498
- :TokenLogonSid,
499
- :TokenIsAppContainer,
500
- :TokenCapabilities,
501
- :TokenAppContainerSid,
502
- :TokenAppContainerNumber,
503
- :TokenUserClaimAttributes,
504
- :TokenDeviceClaimAttributes,
505
- :TokenRestrictedUserClaimAttributes,
506
- :TokenRestrictedDeviceClaimAttributes,
507
- :TokenDeviceGroups,
508
- :TokenRestrictedDeviceGroups,
509
- :TokenSecurityAttributes,
510
- :TokenIsRestricted,
511
- :MaxTokenInfoClass
512
- )
513
-
514
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379263(v=vs.85).aspx
515
- # typedef struct _LUID_AND_ATTRIBUTES {
516
- # LUID Luid;
517
- # DWORD Attributes;
518
- # } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
519
- class LUID_AND_ATTRIBUTES < FFI::Struct
520
- layout :Luid, LUID,
521
- :Attributes, :dword
522
- end
523
-
524
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379630(v=vs.85).aspx
525
- # typedef struct _TOKEN_PRIVILEGES {
526
- # DWORD PrivilegeCount;
527
- # LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
528
- # } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
529
- class TOKEN_PRIVILEGES < FFI::Struct
530
- layout :PrivilegeCount, :dword,
531
- :Privileges, [LUID_AND_ATTRIBUTES, 1] # placeholder for offset
532
- end
533
-
534
- # https://msdn.microsoft.com/en-us/library/windows/desktop/bb530717(v=vs.85).aspx
535
- # typedef struct _TOKEN_ELEVATION {
536
- # DWORD TokenIsElevated;
537
- # } TOKEN_ELEVATION, *PTOKEN_ELEVATION;
538
- class TOKEN_ELEVATION < FFI::Struct
539
- layout :TokenIsElevated, :dword
540
- end
541
-
542
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa446671(v=vs.85).aspx
543
- # BOOL WINAPI GetTokenInformation(
544
- # _In_ HANDLE TokenHandle,
545
- # _In_ TOKEN_INFORMATION_CLASS TokenInformationClass,
546
- # _Out_opt_ LPVOID TokenInformation,
547
- # _In_ DWORD TokenInformationLength,
548
- # _Out_ PDWORD ReturnLength
549
- # );
550
- ffi_lib :advapi32
551
- attach_function_private :GetTokenInformation,
552
- [:handle, TOKEN_INFORMATION_CLASS, :lpvoid, :dword, :pdword ], :win32_bool
553
-
554
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724834%28v=vs.85%29.aspx
555
- # typedef struct _OSVERSIONINFO {
556
- # DWORD dwOSVersionInfoSize;
557
- # DWORD dwMajorVersion;
558
- # DWORD dwMinorVersion;
559
- # DWORD dwBuildNumber;
560
- # DWORD dwPlatformId;
561
- # TCHAR szCSDVersion[128];
562
- # } OSVERSIONINFO;
563
- class OSVERSIONINFO < FFI::Struct
564
- layout(
565
- :dwOSVersionInfoSize, :dword,
566
- :dwMajorVersion, :dword,
567
- :dwMinorVersion, :dword,
568
- :dwBuildNumber, :dword,
569
- :dwPlatformId, :dword,
570
- :szCSDVersion, [:wchar, 128]
571
- )
572
- end
573
-
574
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724451(v=vs.85).aspx
575
- # BOOL WINAPI GetVersionEx(
576
- # _Inout_ LPOSVERSIONINFO lpVersionInfo
577
- # );
578
- ffi_lib :kernel32
579
- attach_function_private :GetVersionExW,
580
- [:pointer], :win32_bool
581
-
582
- # https://msdn.microsoft.com/en-us/library/windows/desktop/dd318123(v=vs.85).aspx
583
- # LANGID GetSystemDefaultUILanguage(void);
584
- ffi_lib :kernel32
585
- attach_function_private :GetSystemDefaultUILanguage, [], :word
586
364
  end
@@ -110,13 +110,16 @@ module Puppet::Util::Windows
110
110
 
111
111
  private
112
112
 
113
- def reg_enum_key(key, index, max_key_length = Win32::Registry::Constants::MAX_KEY_LENGTH)
113
+ # max number of wide characters including NULL terminator
114
+ MAX_KEY_CHAR_LENGTH = 255 + 1
115
+
116
+ def reg_enum_key(key, index, max_key_char_length = MAX_KEY_CHAR_LENGTH)
114
117
  subkey, filetime = nil, nil
115
118
 
116
119
  FFI::MemoryPointer.new(:dword) do |subkey_length_ptr|
117
120
  FFI::MemoryPointer.new(FFI::WIN32::FILETIME.size) do |filetime_ptr|
118
- FFI::MemoryPointer.new(:wchar, max_key_length) do |subkey_ptr|
119
- subkey_length_ptr.write_dword(max_key_length)
121
+ FFI::MemoryPointer.new(:wchar, max_key_char_length) do |subkey_ptr|
122
+ subkey_length_ptr.write_dword(max_key_char_length)
120
123
 
121
124
  # RegEnumKeyEx cannot be called twice to properly size the buffer
122
125
  result = RegEnumKeyExW(key.hkey, index,
@@ -141,7 +144,10 @@ module Puppet::Util::Windows
141
144
  [subkey, filetime]
142
145
  end
143
146
 
144
- def reg_enum_value(key, index, max_value_length = Win32::Registry::Constants::MAX_VALUE_LENGTH)
147
+ # max number of wide characters including NULL terminator
148
+ MAX_VALUE_CHAR_LENGTH = 16383 + 1
149
+
150
+ def reg_enum_value(key, index, max_value_length = MAX_VALUE_CHAR_LENGTH)
145
151
  subkey, type, data = nil, nil, nil
146
152
 
147
153
  FFI::MemoryPointer.new(:dword) do |subkey_length_ptr|
@@ -234,7 +240,7 @@ module Puppet::Util::Windows
234
240
  begin
235
241
  case type
236
242
  when Win32::Registry::REG_SZ, Win32::Registry::REG_EXPAND_SZ
237
- result = [ type, sanitize(data_ptr.read_wide_string(string_length)) ]
243
+ result = [ type, data_ptr.read_wide_string(string_length, Encoding::UTF_8, true) ]
238
244
  when Win32::Registry::REG_MULTI_SZ
239
245
  result = [ type, data_ptr.read_wide_string(string_length).split(/\0/) ]
240
246
  when Win32::Registry::REG_BINARY
@@ -314,12 +320,6 @@ module Puppet::Util::Windows
314
320
  result
315
321
  end
316
322
 
317
- def sanitize(value)
318
- # Replace null bytes with a space
319
- value.tr!("\x00", ' ')
320
- value
321
- end
322
-
323
323
  ffi_convention :stdcall
324
324
 
325
325
  # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724862(v=vs.85).aspx
@@ -340,10 +340,10 @@ module Puppet::Util::Windows::Security
340
340
  Puppet.warning _("Setting control rights for %{path} owner SYSTEM to less than Full Control rights. Setting SYSTEM rights to less than Full Control may have unintented consequences for operations on this file") % { path: path }
341
341
  elsif managing_owner && isownergroup
342
342
  #TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
343
- Puppet.debug _("%{path} owner and group both set to user SYSTEM, but group is not managed directly: SYSTEM user rights will be set to FullControl by group") % { path: path }
343
+ Puppet.debug { _("%{path} owner and group both set to user SYSTEM, but group is not managed directly: SYSTEM user rights will be set to FullControl by group") % { path: path } }
344
344
  else
345
345
  #TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
346
- Puppet.debug _("An attempt to set mode %{mode} on item %{path} would result in the owner, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path }
346
+ Puppet.debug { _("An attempt to set mode %{mode} on item %{path} would result in the owner, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path } }
347
347
  owner_allow = FILE::FILE_ALL_ACCESS
348
348
  end
349
349
  end
@@ -356,10 +356,10 @@ module Puppet::Util::Windows::Security
356
356
  Puppet.warning _("Setting control rights for %{path} group SYSTEM to less than Full Control rights. Setting SYSTEM rights to less than Full Control may have unintented consequences for operations on this file") % { path: path }
357
357
  elsif managing_group && isownergroup
358
358
  #TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
359
- Puppet.debug _("%{path} owner and group both set to user SYSTEM, but owner is not managed directly: SYSTEM user rights will be set to FullControl by owner") % { path: path }
359
+ Puppet.debug { _("%{path} owner and group both set to user SYSTEM, but owner is not managed directly: SYSTEM user rights will be set to FullControl by owner") % { path: path } }
360
360
  else
361
361
  #TRANSLATORS 'SYSTEM' is a Windows name and should not be translated
362
- Puppet.debug _("An attempt to set mode %{mode} on item %{path} would result in the group, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path }
362
+ Puppet.debug { _("An attempt to set mode %{mode} on item %{path} would result in the group, SYSTEM, to have less than Full Control rights. This attempt has been corrected to Full Control") % { mode: mode.to_s(8), path: path } }
363
363
  group_allow = FILE::FILE_ALL_ACCESS
364
364
  end
365
365
  end
@@ -1,6 +1,5 @@
1
1
  # coding: utf-8
2
- require 'puppet/util/windows'
3
- require 'ffi'
2
+ require 'puppet/ffi/windows'
4
3
 
5
4
  module Puppet::Util::Windows
6
5
  # This module is designed to provide an API between the windows system and puppet for
@@ -8,315 +7,22 @@ module Puppet::Util::Windows
8
7
  #
9
8
  # for an overview of the service state transitions see: https://docs.microsoft.com/en-us/windows/desktop/Services/service-status-transitions
10
9
  module Service
11
- extend FFI::Library
12
10
  extend Puppet::Util::Windows::String
13
11
 
14
- FILE = Puppet::Util::Windows::File
12
+ include Puppet::FFI::Windows::Constants
13
+ extend Puppet::FFI::Windows::Constants
14
+
15
+ include Puppet::FFI::Windows::Structs
16
+ extend Puppet::FFI::Windows::Structs
17
+
18
+ include Puppet::FFI::Windows::Functions
19
+ extend Puppet::FFI::Windows::Functions
15
20
 
16
21
  # integer value of the floor for timeouts when waiting for service pending states.
17
22
  # puppet will wait the length of dwWaitHint if it is longer than this value, but
18
23
  # no shorter
19
24
  DEFAULT_TIMEOUT = 30
20
25
 
21
- # Service error codes
22
- # https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--1000-1299-
23
- ERROR_SERVICE_DOES_NOT_EXIST = 0x00000424
24
-
25
- # Service control codes
26
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-controlserviceexw
27
- SERVICE_CONTROL_STOP = 0x00000001
28
- SERVICE_CONTROL_PAUSE = 0x00000002
29
- SERVICE_CONTROL_CONTINUE = 0x00000003
30
- SERVICE_CONTROL_INTERROGATE = 0x00000004
31
- SERVICE_CONTROL_SHUTDOWN = 0x00000005
32
- SERVICE_CONTROL_PARAMCHANGE = 0x00000006
33
- SERVICE_CONTROL_NETBINDADD = 0x00000007
34
- SERVICE_CONTROL_NETBINDREMOVE = 0x00000008
35
- SERVICE_CONTROL_NETBINDENABLE = 0x00000009
36
- SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A
37
- SERVICE_CONTROL_DEVICEEVENT = 0x0000000B
38
- SERVICE_CONTROL_HARDWAREPROFILECHANGE = 0x0000000C
39
- SERVICE_CONTROL_POWEREVENT = 0x0000000D
40
- SERVICE_CONTROL_SESSIONCHANGE = 0x0000000E
41
- SERVICE_CONTROL_PRESHUTDOWN = 0x0000000F
42
- SERVICE_CONTROL_TIMECHANGE = 0x00000010
43
- SERVICE_CONTROL_TRIGGEREVENT = 0x00000020
44
- SERVICE_CONTROL_SIGNALS = {
45
- SERVICE_CONTROL_STOP => :SERVICE_CONTROL_STOP,
46
- SERVICE_CONTROL_PAUSE => :SERVICE_CONTROL_PAUSE,
47
- SERVICE_CONTROL_CONTINUE => :SERVICE_CONTROL_CONTINUE,
48
- SERVICE_CONTROL_INTERROGATE => :SERVICE_CONTROL_INTERROGATE,
49
- SERVICE_CONTROL_SHUTDOWN => :SERVICE_CONTROL_SHUTDOWN,
50
- SERVICE_CONTROL_PARAMCHANGE => :SERVICE_CONTROL_PARAMCHANGE,
51
- SERVICE_CONTROL_NETBINDADD => :SERVICE_CONTROL_NETBINDADD,
52
- SERVICE_CONTROL_NETBINDREMOVE => :SERVICE_CONTROL_NETBINDREMOVE,
53
- SERVICE_CONTROL_NETBINDENABLE => :SERVICE_CONTROL_NETBINDENABLE,
54
- SERVICE_CONTROL_NETBINDDISABLE => :SERVICE_CONTROL_NETBINDDISABLE,
55
- SERVICE_CONTROL_DEVICEEVENT => :SERVICE_CONTROL_DEVICEEVENT,
56
- SERVICE_CONTROL_HARDWAREPROFILECHANGE => :SERVICE_CONTROL_HARDWAREPROFILECHANGE,
57
- SERVICE_CONTROL_POWEREVENT => :SERVICE_CONTROL_POWEREVENT,
58
- SERVICE_CONTROL_SESSIONCHANGE => :SERVICE_CONTROL_SESSIONCHANGE,
59
- SERVICE_CONTROL_PRESHUTDOWN => :SERVICE_CONTROL_PRESHUTDOWN,
60
- SERVICE_CONTROL_TIMECHANGE => :SERVICE_CONTROL_TIMECHANGE,
61
- SERVICE_CONTROL_TRIGGEREVENT => :SERVICE_CONTROL_TRIGGEREVENT
62
- }
63
-
64
-
65
- # Service start type codes
66
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-changeserviceconfigw
67
- SERVICE_AUTO_START = 0x00000002
68
- SERVICE_BOOT_START = 0x00000000
69
- SERVICE_DEMAND_START = 0x00000003
70
- SERVICE_DISABLED = 0x00000004
71
- SERVICE_SYSTEM_START = 0x00000001
72
- SERVICE_START_TYPES = {
73
- SERVICE_AUTO_START => :SERVICE_AUTO_START,
74
- SERVICE_BOOT_START => :SERVICE_BOOT_START,
75
- SERVICE_DEMAND_START => :SERVICE_DEMAND_START,
76
- SERVICE_DISABLED => :SERVICE_DISABLED,
77
- SERVICE_SYSTEM_START => :SERVICE_SYSTEM_START,
78
- }
79
-
80
- # Service type codes
81
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-changeserviceconfigw
82
- SERVICE_FILE_SYSTEM_DRIVER = 0x00000002
83
- SERVICE_KERNEL_DRIVER = 0x00000001
84
- SERVICE_WIN32_OWN_PROCESS = 0x00000010
85
- SERVICE_WIN32_SHARE_PROCESS = 0x00000020
86
- SERVICE_USER_OWN_PROCESS = 0x00000050
87
- SERVICE_USER_SHARE_PROCESS = 0x00000060
88
- # Available only if service is also SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS
89
- SERVICE_INTERACTIVE_PROCESS = 0x00000100
90
- ALL_SERVICE_TYPES =
91
- SERVICE_FILE_SYSTEM_DRIVER |
92
- SERVICE_KERNEL_DRIVER |
93
- SERVICE_WIN32_OWN_PROCESS |
94
- SERVICE_WIN32_SHARE_PROCESS
95
-
96
- # Current state codes
97
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
98
- SERVICE_CONTINUE_PENDING = 0x00000005
99
- SERVICE_PAUSE_PENDING = 0x00000006
100
- SERVICE_PAUSED = 0x00000007
101
- SERVICE_RUNNING = 0x00000004
102
- SERVICE_START_PENDING = 0x00000002
103
- SERVICE_STOP_PENDING = 0x00000003
104
- SERVICE_STOPPED = 0x00000001
105
- UNSAFE_PENDING_STATES = [SERVICE_START_PENDING, SERVICE_STOP_PENDING]
106
- FINAL_STATES = {
107
- SERVICE_CONTINUE_PENDING => SERVICE_RUNNING,
108
- SERVICE_PAUSE_PENDING => SERVICE_PAUSED,
109
- SERVICE_START_PENDING => SERVICE_RUNNING,
110
- SERVICE_STOP_PENDING => SERVICE_STOPPED
111
- }
112
- SERVICE_STATES = {
113
- SERVICE_CONTINUE_PENDING => :SERVICE_CONTINUE_PENDING,
114
- SERVICE_PAUSE_PENDING => :SERVICE_PAUSE_PENDING,
115
- SERVICE_PAUSED => :SERVICE_PAUSED,
116
- SERVICE_RUNNING => :SERVICE_RUNNING,
117
- SERVICE_START_PENDING => :SERVICE_START_PENDING,
118
- SERVICE_STOP_PENDING => :SERVICE_STOP_PENDING,
119
- SERVICE_STOPPED => :SERVICE_STOPPED,
120
- }
121
-
122
- # Service accepts control codes
123
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
124
- SERVICE_ACCEPT_STOP = 0x00000001
125
- SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002
126
- SERVICE_ACCEPT_SHUTDOWN = 0x00000004
127
- SERVICE_ACCEPT_PARAMCHANGE = 0x00000008
128
- SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010
129
- SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020
130
- SERVICE_ACCEPT_POWEREVENT = 0x00000040
131
- SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080
132
- SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100
133
- SERVICE_ACCEPT_TIMECHANGE = 0x00000200
134
- SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400
135
- SERVICE_ACCEPT_USER_LOGOFF = 0x00000800
136
-
137
- # Service manager access codes
138
- # https://docs.microsoft.com/en-us/windows/desktop/Services/service-security-and-access-rights
139
- SC_MANAGER_CREATE_SERVICE = 0x00000002
140
- SC_MANAGER_CONNECT = 0x00000001
141
- SC_MANAGER_ENUMERATE_SERVICE = 0x00000004
142
- SC_MANAGER_LOCK = 0x00000008
143
- SC_MANAGER_MODIFY_BOOT_CONFIG = 0x00000020
144
- SC_MANAGER_QUERY_LOCK_STATUS = 0x00000010
145
- SC_MANAGER_ALL_ACCESS =
146
- FILE::STANDARD_RIGHTS_REQUIRED |
147
- SC_MANAGER_CREATE_SERVICE |
148
- SC_MANAGER_CONNECT |
149
- SC_MANAGER_ENUMERATE_SERVICE |
150
- SC_MANAGER_LOCK |
151
- SC_MANAGER_MODIFY_BOOT_CONFIG |
152
- SC_MANAGER_QUERY_LOCK_STATUS
153
-
154
-
155
- # Service access codes
156
- # https://docs.microsoft.com/en-us/windows/desktop/Services/service-security-and-access-rights
157
- SERVICE_CHANGE_CONFIG = 0x0002
158
- SERVICE_ENUMERATE_DEPENDENTS = 0x0008
159
- SERVICE_INTERROGATE = 0x0080
160
- SERVICE_PAUSE_CONTINUE = 0x0040
161
- SERVICE_QUERY_STATUS = 0x0004
162
- SERVICE_QUERY_CONFIG = 0x0001
163
- SERVICE_START = 0x0010
164
- SERVICE_STOP = 0x0020
165
- SERVICE_USER_DEFINED_CONTROL = 0x0100
166
- SERVICE_ALL_ACCESS =
167
- FILE::STANDARD_RIGHTS_REQUIRED |
168
- SERVICE_CHANGE_CONFIG |
169
- SERVICE_ENUMERATE_DEPENDENTS |
170
- SERVICE_INTERROGATE |
171
- SERVICE_PAUSE_CONTINUE |
172
- SERVICE_QUERY_STATUS |
173
- SERVICE_QUERY_CONFIG |
174
- SERVICE_START |
175
- SERVICE_STOP |
176
- SERVICE_USER_DEFINED_CONTROL
177
-
178
- # Service config codes
179
- # From the windows 10 SDK:
180
- # //
181
- # // Value to indicate no change to an optional parameter
182
- # //
183
- # #define SERVICE_NO_CHANGE 0xffffffff
184
- # https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfig2w
185
- SERVICE_CONFIG_DESCRIPTION = 0x00000001
186
- SERVICE_CONFIG_FAILURE_ACTIONS = 0x00000002
187
- SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 0x00000003
188
- SERVICE_CONFIG_FAILURE_ACTIONS_FLAG = 0x00000004
189
- SERVICE_CONFIG_SERVICE_SID_INFO = 0x00000005
190
- SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 0x00000006
191
- SERVICE_CONFIG_PRESHUTDOWN_INFO = 0x00000007
192
- SERVICE_CONFIG_TRIGGER_INFO = 0x00000008
193
- SERVICE_CONFIG_PREFERRED_NODE = 0x00000009
194
- SERVICE_CONFIG_LAUNCH_PROTECTED = 0x00000012
195
- SERVICE_NO_CHANGE = 0xffffffff
196
- SERVICE_CONFIG_TYPES = {
197
- SERVICE_CONFIG_DESCRIPTION => :SERVICE_CONFIG_DESCRIPTION,
198
- SERVICE_CONFIG_FAILURE_ACTIONS => :SERVICE_CONFIG_FAILURE_ACTIONS,
199
- SERVICE_CONFIG_DELAYED_AUTO_START_INFO => :SERVICE_CONFIG_DELAYED_AUTO_START_INFO,
200
- SERVICE_CONFIG_FAILURE_ACTIONS_FLAG => :SERVICE_CONFIG_FAILURE_ACTIONS_FLAG,
201
- SERVICE_CONFIG_SERVICE_SID_INFO => :SERVICE_CONFIG_SERVICE_SID_INFO,
202
- SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO => :SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO,
203
- SERVICE_CONFIG_PRESHUTDOWN_INFO => :SERVICE_CONFIG_PRESHUTDOWN_INFO,
204
- SERVICE_CONFIG_TRIGGER_INFO => :SERVICE_CONFIG_TRIGGER_INFO,
205
- SERVICE_CONFIG_PREFERRED_NODE => :SERVICE_CONFIG_PREFERRED_NODE,
206
- SERVICE_CONFIG_LAUNCH_PROTECTED => :SERVICE_CONFIG_LAUNCH_PROTECTED,
207
- }
208
-
209
- # Service enum codes
210
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-enumservicesstatusexa
211
- SERVICE_ACTIVE = 0x00000001
212
- SERVICE_INACTIVE = 0x00000002
213
- SERVICE_STATE_ALL =
214
- SERVICE_ACTIVE |
215
- SERVICE_INACTIVE
216
-
217
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_enum_service_status_processw
218
- SERVICENAME_MAX = 256
219
-
220
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
221
- # typedef struct _SERVICE_STATUS_PROCESS {
222
- # DWORD dwServiceType;
223
- # DWORD dwCurrentState;
224
- # DWORD dwControlsAccepted;
225
- # DWORD dwWin32ExitCode;
226
- # DWORD dwServiceSpecificExitCode;
227
- # DWORD dwCheckPoint;
228
- # DWORD dwWaitHint;
229
- # DWORD dwProcessId;
230
- # DWORD dwServiceFlags;
231
- # } SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
232
- class SERVICE_STATUS_PROCESS < FFI::Struct
233
- layout(
234
- :dwServiceType, :dword,
235
- :dwCurrentState, :dword,
236
- :dwControlsAccepted, :dword,
237
- :dwWin32ExitCode, :dword,
238
- :dwServiceSpecificExitCode, :dword,
239
- :dwCheckPoint, :dword,
240
- :dwWaitHint, :dword,
241
- :dwProcessId, :dword,
242
- :dwServiceFlags, :dword
243
- )
244
- end
245
-
246
- # https://docs.microsoft.com/en-us/windows/win32/api/winsvc/ns-winsvc-service_delayed_auto_start_info
247
- # typedef struct _SERVICE_DELAYED_AUTO_START_INFO {
248
- # BOOL fDelayedAutostart;
249
- # } SERVICE_DELAYED_AUTO_START_INFO, *LPSERVICE_DELAYED_AUTO_START_INFO;
250
- class SERVICE_DELAYED_AUTO_START_INFO < FFI::Struct
251
- layout(:fDelayedAutostart, :int)
252
- alias aset []=
253
- # Intercept the accessor so that we can handle either true/false or 1/0.
254
- # Since there is only one member, there’s no need to check the key name.
255
- def []=(key, value)
256
- [0, false].include?(value) ? aset(key, 0) : aset(key, 1)
257
- end
258
- end
259
-
260
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_enum_service_status_processw
261
- # typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
262
- # LPWSTR lpServiceName;
263
- # LPWSTR lpDisplayName;
264
- # SERVICE_STATUS_PROCESS ServiceStatusProcess;
265
- # } ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;
266
- class ENUM_SERVICE_STATUS_PROCESSW < FFI::Struct
267
- layout(
268
- :lpServiceName, :pointer,
269
- :lpDisplayName, :pointer,
270
- :ServiceStatusProcess, SERVICE_STATUS_PROCESS
271
- )
272
- end
273
-
274
- # typedef struct _SERVICE_STATUS {
275
- # DWORD dwServiceType;
276
- # DWORD dwCurrentState;
277
- # DWORD dwControlsAccepted;
278
- # DWORD dwWin32ExitCode;
279
- # DWORD dwServiceSpecificExitCode;
280
- # DWORD dwCheckPoint;
281
- # DWORD dwWaitHint;
282
- # } SERVICE_STATUS, *LPSERVICE_STATUS;
283
- class SERVICE_STATUS < FFI::Struct
284
- layout(
285
- :dwServiceType, :dword,
286
- :dwCurrentState, :dword,
287
- :dwControlsAccepted, :dword,
288
- :dwWin32ExitCode, :dword,
289
- :dwServiceSpecificExitCode, :dword,
290
- :dwCheckPoint, :dword,
291
- :dwWaitHint, :dword,
292
- )
293
- end
294
-
295
- # typedef struct _QUERY_SERVICE_CONFIGW {
296
- # DWORD dwServiceType;
297
- # DWORD dwStartType;
298
- # DWORD dwErrorControl;
299
- # LPWSTR lpBinaryPathName;
300
- # LPWSTR lpLoadOrderGroup;
301
- # DWORD dwTagId;
302
- # LPWSTR lpDependencies;
303
- # LPWSTR lpServiceStartName;
304
- # LPWSTR lpDisplayName;
305
- # } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
306
- class QUERY_SERVICE_CONFIGW < FFI::Struct
307
- layout(
308
- :dwServiceType, :dword,
309
- :dwStartType, :dword,
310
- :dwErrorControl, :dword,
311
- :lpBinaryPathName, :pointer,
312
- :lpLoadOrderGroup, :pointer,
313
- :dwTagId, :dword,
314
- :lpDependencies, :pointer,
315
- :lpServiceStartName, :pointer,
316
- :lpDisplayName, :pointer,
317
- )
318
- end
319
-
320
26
  # Returns true if the service exists, false otherwise.
321
27
  #
322
28
  # @param [String] service_name name of the service
@@ -440,43 +146,60 @@ module Puppet::Util::Windows
440
146
  end
441
147
  module_function :service_start_type
442
148
 
443
- # Change the startup mode of a windows service
149
+ # Query the configuration of a service using QueryServiceConfigW
150
+ # to find its current logon account
444
151
  #
445
- # @param [String] service_name the name of the service to modify
446
- # @param [Integer] startup_type a code corresponding to a start type for
447
- # windows service, see the "Service start type codes" section in the
448
- # Puppet::Util::Windows::Service file for the list of available codes
449
- # @param [Bool] delayed whether the service should be started with a delay
450
- def set_startup_mode(service_name, startup_type, delayed=false)
451
- startup_code = SERVICE_START_TYPES.key(startup_type)
452
- if startup_code.nil?
453
- raise Puppet::Error.new(_("Unknown start type %{start_type}") % {startup_type: startup_type.to_s})
152
+ # @return [String] logon_account account currently set for the service's logon
153
+ # in the format "DOMAIN\Account" or ".\Account" if it's a local account
154
+ def logon_account(service_name)
155
+ open_service(service_name, SC_MANAGER_CONNECT, SERVICE_QUERY_CONFIG) do |service|
156
+ query_config(service) do |config|
157
+ return config[:lpServiceStartName].read_arbitrary_wide_string_up_to(Puppet::Util::Windows::ADSI::User::MAX_USERNAME_LENGTH)
158
+ end
454
159
  end
160
+ end
161
+ module_function :logon_account
162
+
163
+ # Set the startup configuration of a windows service
164
+ #
165
+ # @param [String] service_name the name of the service to modify
166
+ # @param [Hash] options the configuration to be applied. Expected option keys:
167
+ # - [Integer] startup_type a code corresponding to a start type for
168
+ # windows service, see the "Service start type codes" section in the
169
+ # Puppet::Util::Windows::Service file for the list of available codes
170
+ # - [String] logon_account the account to be used by the service for logon
171
+ # - [String] logon_password the provided logon_account's password to be used by the service for logon
172
+ # - [Bool] delayed whether the service should be started with a delay
173
+ def set_startup_configuration(service_name, options: {})
174
+ options[:startup_type] = SERVICE_START_TYPES.key(options[:startup_type]) || SERVICE_NO_CHANGE
175
+ options[:logon_account] = wide_string(options[:logon_account]) || FFI::Pointer::NULL
176
+ options[:logon_password] = wide_string(options[:logon_password]) || FFI::Pointer::NULL
177
+
455
178
  open_service(service_name, SC_MANAGER_CONNECT, SERVICE_CHANGE_CONFIG) do |service|
456
- # Currently the only thing puppet's API can really manage
457
- # in this list is dwStartType (the third param). Thus no
458
- # generic function was written to make use of all the params
459
- # since the API as-is couldn't use them anyway
460
179
  success = ChangeServiceConfigW(
461
180
  service,
462
- SERVICE_NO_CHANGE, # dwServiceType
463
- startup_code, # dwStartType
464
- SERVICE_NO_CHANGE, # dwErrorControl
465
- FFI::Pointer::NULL, # lpBinaryPathName
466
- FFI::Pointer::NULL, # lpLoadOrderGroup
467
- FFI::Pointer::NULL, # lpdwTagId
468
- FFI::Pointer::NULL, # lpDependencies
469
- FFI::Pointer::NULL, # lpServiceStartName
470
- FFI::Pointer::NULL, # lpPassword
471
- FFI::Pointer::NULL # lpDisplayName
181
+ SERVICE_NO_CHANGE, # dwServiceType
182
+ options[:startup_type], # dwStartType
183
+ SERVICE_NO_CHANGE, # dwErrorControl
184
+ FFI::Pointer::NULL, # lpBinaryPathName
185
+ FFI::Pointer::NULL, # lpLoadOrderGroup
186
+ FFI::Pointer::NULL, # lpdwTagId
187
+ FFI::Pointer::NULL, # lpDependencies
188
+ options[:logon_account], # lpServiceStartName
189
+ options[:logon_password], # lpPassword
190
+ FFI::Pointer::NULL # lpDisplayName
472
191
  )
473
192
  if success == FFI::WIN32_FALSE
474
193
  raise Puppet::Util::Windows::Error.new(_("Failed to update service configuration"))
475
194
  end
476
195
  end
477
- set_startup_mode_delayed(service_name, delayed)
196
+
197
+ if options[:startup_type]
198
+ options[:delayed] ||= false
199
+ set_startup_mode_delayed(service_name, options[:delayed])
200
+ end
478
201
  end
479
- module_function :set_startup_mode
202
+ module_function :set_startup_configuration
480
203
 
481
204
  # enumerate over all services in all states and return them as a hash
482
205
  #
@@ -974,162 +697,5 @@ module Puppet::Util::Windows
974
697
  end
975
698
  private :milliseconds_to_seconds
976
699
  end
977
-
978
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-openscmanagerw
979
- # SC_HANDLE OpenSCManagerW(
980
- # LPCWSTR lpMachineName,
981
- # LPCWSTR lpDatabaseName,
982
- # DWORD dwDesiredAccess
983
- # );
984
- ffi_lib :advapi32
985
- attach_function_private :OpenSCManagerW,
986
- [:lpcwstr, :lpcwstr, :dword], :handle
987
-
988
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-openservicew
989
- # SC_HANDLE OpenServiceW(
990
- # SC_HANDLE hSCManager,
991
- # LPCWSTR lpServiceName,
992
- # DWORD dwDesiredAccess
993
- # );
994
- ffi_lib :advapi32
995
- attach_function_private :OpenServiceW,
996
- [:handle, :lpcwstr, :dword], :handle
997
-
998
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-closeservicehandle
999
- # BOOL CloseServiceHandle(
1000
- # SC_HANDLE hSCObject
1001
- # );
1002
- ffi_lib :advapi32
1003
- attach_function_private :CloseServiceHandle,
1004
- [:handle], :win32_bool
1005
-
1006
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-queryservicestatusex
1007
- # BOOL QueryServiceStatusEx(
1008
- # SC_HANDLE hService,
1009
- # SC_STATUS_TYPE InfoLevel,
1010
- # LPBYTE lpBuffer,
1011
- # DWORD cbBufSize,
1012
- # LPDWORD pcbBytesNeeded
1013
- # );
1014
- SC_STATUS_TYPE = enum(
1015
- :SC_STATUS_PROCESS_INFO, 0,
1016
- )
1017
- ffi_lib :advapi32
1018
- attach_function_private :QueryServiceStatusEx,
1019
- [:handle, SC_STATUS_TYPE, :lpbyte, :dword, :lpdword], :win32_bool
1020
-
1021
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-queryserviceconfigw
1022
- # BOOL QueryServiceConfigW(
1023
- # SC_HANDLE hService,
1024
- # LPQUERY_SERVICE_CONFIGW lpServiceConfig,
1025
- # DWORD cbBufSize,
1026
- # LPDWORD pcbBytesNeeded
1027
- # );
1028
- ffi_lib :advapi32
1029
- attach_function_private :QueryServiceConfigW,
1030
- [:handle, :lpbyte, :dword, :lpdword], :win32_bool
1031
-
1032
- # https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-queryserviceconfig2w
1033
- # BOOL QueryServiceConfig2W(
1034
- # SC_HANDLE hService,
1035
- # DWORD dwInfoLevel,
1036
- # LPBYTE lpBuffer,
1037
- # DWORD cbBufSize,
1038
- # LPDWORD pcbBytesNeeded
1039
- # );
1040
- ffi_lib :advapi32
1041
- attach_function_private :QueryServiceConfig2W,
1042
- [:handle, :dword, :lpbyte, :dword, :lpdword], :win32_bool
1043
-
1044
- # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-startservicew
1045
- # BOOL StartServiceW(
1046
- # SC_HANDLE hService,
1047
- # DWORD dwNumServiceArgs,
1048
- # LPCWSTR *lpServiceArgVectors
1049
- # );
1050
- ffi_lib :advapi32
1051
- attach_function_private :StartServiceW,
1052
- [:handle, :dword, :pointer], :win32_bool
1053
-
1054
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-controlservice
1055
- # BOOL ControlService(
1056
- # SC_HANDLE hService,
1057
- # DWORD dwControl,
1058
- # LPSERVICE_STATUS lpServiceStatus
1059
- # );
1060
- ffi_lib :advapi32
1061
- attach_function_private :ControlService,
1062
- [:handle, :dword, :pointer], :win32_bool
1063
-
1064
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-changeserviceconfigw
1065
- # BOOL ChangeServiceConfigW(
1066
- # SC_HANDLE hService,
1067
- # DWORD dwServiceType,
1068
- # DWORD dwStartType,
1069
- # DWORD dwErrorControl,
1070
- # LPCWSTR lpBinaryPathName,
1071
- # LPCWSTR lpLoadOrderGroup,
1072
- # LPDWORD lpdwTagId,
1073
- # LPCWSTR lpDependencies,
1074
- # LPCWSTR lpServiceStartName,
1075
- # LPCWSTR lpPassword,
1076
- # LPCWSTR lpDisplayName
1077
- # );
1078
- ffi_lib :advapi32
1079
- attach_function_private :ChangeServiceConfigW,
1080
- [
1081
- :handle,
1082
- :dword,
1083
- :dword,
1084
- :dword,
1085
- :lpcwstr,
1086
- :lpcwstr,
1087
- :lpdword,
1088
- :lpcwstr,
1089
- :lpcwstr,
1090
- :lpcwstr,
1091
- :lpcwstr
1092
- ], :win32_bool
1093
-
1094
- # https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfig2w
1095
- # BOOL ChangeServiceConfig2W(
1096
- # SC_HANDLE hService,
1097
- # DWORD dwInfoLevel,
1098
- # LPVOID lpInfo
1099
- # );
1100
- ffi_lib :advapi32
1101
- attach_function_private :ChangeServiceConfig2W,
1102
- [:handle, :dword, :lpvoid], :win32_bool
1103
-
1104
- # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-enumservicesstatusexw
1105
- # BOOL EnumServicesStatusExW(
1106
- # SC_HANDLE hSCManager,
1107
- # SC_ENUM_TYPE InfoLevel,
1108
- # DWORD dwServiceType,
1109
- # DWORD dwServiceState,
1110
- # LPBYTE lpServices,
1111
- # DWORD cbBufSize,
1112
- # LPDWORD pcbBytesNeeded,
1113
- # LPDWORD lpServicesReturned,
1114
- # LPDWORD lpResumeHandle,
1115
- # LPCWSTR pszGroupName
1116
- # );
1117
- SC_ENUM_TYPE = enum(
1118
- :SC_ENUM_PROCESS_INFO, 0,
1119
- )
1120
- ffi_lib :advapi32
1121
- attach_function_private :EnumServicesStatusExW,
1122
- [
1123
- :handle,
1124
- SC_ENUM_TYPE,
1125
- :dword,
1126
- :dword,
1127
- :lpbyte,
1128
- :dword,
1129
- :lpdword,
1130
- :lpdword,
1131
- :lpdword,
1132
- :lpcwstr
1133
- ], :win32_bool
1134
700
  end
1135
701
  end