puppet 6.16.0-x64-mingw32 → 7.0.0-x64-mingw32

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

Potentially problematic release.


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

Files changed (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 -270
  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
@@ -63,7 +63,7 @@ Puppet.features.add(:manages_symlinks) do
63
63
 
64
64
  true
65
65
  rescue LoadError
66
- Puppet.debug("CreateSymbolicLink is not available")
66
+ Puppet.debug { "CreateSymbolicLink is not available" }
67
67
  false
68
68
  end
69
69
  end
@@ -0,0 +1,12 @@
1
+ require 'ffi'
2
+
3
+ module Puppet
4
+ module FFI
5
+ module Windows
6
+ require 'puppet/ffi/windows/api_types'
7
+ require 'puppet/ffi/windows/constants'
8
+ require 'puppet/ffi/windows/structs'
9
+ require 'puppet/ffi/windows/functions'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,311 @@
1
+ require 'puppet/ffi/windows'
2
+ require 'puppet/util/windows/string'
3
+
4
+ module Puppet::FFI::Windows
5
+ module APITypes
6
+ module ::FFI
7
+ WIN32_FALSE = 0
8
+
9
+ # standard Win32 error codes
10
+ ERROR_SUCCESS = 0
11
+ end
12
+
13
+ module ::FFI::Library
14
+ # Wrapper method for attach_function + private
15
+ def attach_function_private(*args)
16
+ attach_function(*args)
17
+ private args[0]
18
+ end
19
+ end
20
+
21
+ class ::FFI::Pointer
22
+ NULL_HANDLE = 0
23
+ WCHAR_NULL = "\0\0".encode('UTF-16LE').freeze
24
+
25
+ def self.from_string_to_wide_string(str, &block)
26
+ str = Puppet::Util::Windows::String.wide_string(str)
27
+ FFI::MemoryPointer.from_wide_string(str, &block)
28
+
29
+ # ptr has already had free called, so nothing to return
30
+ nil
31
+ end
32
+
33
+ def read_win32_bool
34
+ # BOOL is always a 32-bit integer in Win32
35
+ # some Win32 APIs return 1 for true, while others are non-0
36
+ read_int32 != FFI::WIN32_FALSE
37
+ end
38
+
39
+ alias_method :read_dword, :read_uint32
40
+ alias_method :read_win32_ulong, :read_uint32
41
+ alias_method :read_qword, :read_uint64
42
+
43
+ alias_method :read_hresult, :read_int32
44
+
45
+ def read_handle
46
+ type_size == 4 ? read_uint32 : read_uint64
47
+ end
48
+
49
+ alias_method :read_wchar, :read_uint16
50
+ alias_method :read_word, :read_uint16
51
+ alias_method :read_array_of_wchar, :read_array_of_uint16
52
+
53
+ def read_wide_string(char_length, dst_encoding = Encoding::UTF_8, strip = false, encode_options = {})
54
+ # char_length is number of wide chars (typically excluding NULLs), *not* bytes
55
+ str = get_bytes(0, char_length * 2).force_encoding('UTF-16LE')
56
+
57
+ if strip
58
+ i = str.index(WCHAR_NULL)
59
+ str = str[0, i] if i
60
+ end
61
+
62
+ str.encode(dst_encoding, str.encoding, **encode_options)
63
+ rescue EncodingError => e
64
+ Puppet.debug { "Unable to convert value #{str.nil? ? 'nil' : str.dump} to encoding #{dst_encoding} due to #{e.inspect}" }
65
+ raise
66
+ end
67
+
68
+ # @param max_char_length [Integer] Maximum number of wide chars to return (typically excluding NULLs), *not* bytes
69
+ # @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
70
+ # null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
71
+ # null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
72
+ # @param encode_options [Hash] Accepts the same option hash that may be passed to String#encode in Ruby
73
+ def read_arbitrary_wide_string_up_to(max_char_length = 512, null_terminator = :single_null, encode_options = {})
74
+ idx = case null_terminator
75
+ when :single_null
76
+ # find index of wide null between 0 and max (exclusive)
77
+ (0...max_char_length).find do |i|
78
+ get_uint16(i * 2) == 0
79
+ end
80
+ when :double_null
81
+ # find index of double-wide null between 0 and max - 1 (exclusive)
82
+ (0...max_char_length - 1).find do |i|
83
+ get_uint32(i * 2) == 0
84
+ end
85
+ else
86
+ raise _("Unable to read wide strings with %{null_terminator} terminal nulls") % { null_terminator: null_terminator }
87
+ end
88
+
89
+ read_wide_string(idx || max_char_length, Encoding::UTF_8, false, encode_options)
90
+ end
91
+
92
+ def read_win32_local_pointer(&block)
93
+ ptr = read_pointer
94
+ begin
95
+ yield ptr
96
+ ensure
97
+ if !ptr.null? && FFI::WIN32::LocalFree(ptr.address) != FFI::Pointer::NULL_HANDLE
98
+ Puppet.debug "LocalFree memory leak"
99
+ end
100
+ end
101
+
102
+ # ptr has already had LocalFree called, so nothing to return
103
+ nil
104
+ end
105
+
106
+ def read_com_memory_pointer(&block)
107
+ ptr = read_pointer
108
+ begin
109
+ yield ptr
110
+ ensure
111
+ FFI::WIN32::CoTaskMemFree(ptr) unless ptr.null?
112
+ end
113
+
114
+ # ptr has already had CoTaskMemFree called, so nothing to return
115
+ nil
116
+ end
117
+
118
+ alias_method :write_dword, :write_uint32
119
+ alias_method :write_word, :write_uint16
120
+ end
121
+
122
+ class FFI::MemoryPointer
123
+ # Return a MemoryPointer that points to wide string. This is analogous to the
124
+ # FFI::MemoryPointer.from_string method.
125
+ def self.from_wide_string(wstr)
126
+ ptr = FFI::MemoryPointer.new(:uchar, wstr.bytesize + 2)
127
+ ptr.put_array_of_uchar(0, wstr.bytes.to_a)
128
+ ptr.put_uint16(wstr.bytesize, 0)
129
+
130
+ yield ptr if block_given?
131
+
132
+ ptr
133
+ end
134
+ end
135
+
136
+ # FFI Types
137
+ # https://github.com/ffi/ffi/wiki/Types
138
+
139
+ # Windows - Common Data Types
140
+ # https://msdn.microsoft.com/en-us/library/cc230309.aspx
141
+
142
+ # Windows Data Types
143
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
144
+
145
+ FFI.typedef :uint16, :word
146
+ FFI.typedef :uint32, :dword
147
+ # uintptr_t is defined in an FFI conf as platform specific, either
148
+ # ulong_long on x64 or just ulong on x86
149
+ FFI.typedef :uintptr_t, :handle
150
+ FFI.typedef :uintptr_t, :hwnd
151
+
152
+ # buffer_inout is similar to pointer (platform specific), but optimized for buffers
153
+ FFI.typedef :buffer_inout, :lpwstr
154
+ # buffer_in is similar to pointer (platform specific), but optimized for CONST read only buffers
155
+ FFI.typedef :buffer_in, :lpcwstr
156
+ FFI.typedef :buffer_in, :lpcolestr
157
+
158
+ # string is also similar to pointer, but should be used for const char *
159
+ # NOTE that this is not wide, useful only for A suffixed functions
160
+ FFI.typedef :string, :lpcstr
161
+
162
+ # pointer in FFI is platform specific
163
+ # NOTE: for API calls with reserved lpvoid parameters, pass a FFI::Pointer::NULL
164
+ FFI.typedef :pointer, :lpcvoid
165
+ FFI.typedef :pointer, :lpvoid
166
+ FFI.typedef :pointer, :lpword
167
+ FFI.typedef :pointer, :lpbyte
168
+ FFI.typedef :pointer, :lpdword
169
+ FFI.typedef :pointer, :pdword
170
+ FFI.typedef :pointer, :phandle
171
+ FFI.typedef :pointer, :ulong_ptr
172
+ FFI.typedef :pointer, :pbool
173
+ FFI.typedef :pointer, :lpunknown
174
+
175
+ # any time LONG / ULONG is in a win32 API definition DO NOT USE platform specific width
176
+ # which is what FFI uses by default
177
+ # instead create new aliases for these very special cases
178
+ # NOTE: not a good idea to redefine FFI :ulong since other typedefs may rely on it
179
+ FFI.typedef :uint32, :win32_ulong
180
+ FFI.typedef :int32, :win32_long
181
+ # FFI bool can be only 1 byte at times,
182
+ # Win32 BOOL is a signed int, and is always 4 bytes, even on x64
183
+ # https://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
184
+ FFI.typedef :int32, :win32_bool
185
+
186
+ # BOOLEAN (unlike BOOL) is a BYTE - typedef unsigned char BYTE;
187
+ FFI.typedef :uchar, :boolean
188
+
189
+ # Same as a LONG, a 32-bit signed integer
190
+ FFI.typedef :int32, :hresult
191
+
192
+ # NOTE: FFI already defines (u)short as a 16-bit (un)signed like this:
193
+ # FFI.typedef :uint16, :ushort
194
+ # FFI.typedef :int16, :short
195
+
196
+ # 8 bits per byte
197
+ FFI.typedef :uchar, :byte
198
+ FFI.typedef :uint16, :wchar
199
+
200
+ # Definitions for data types used in LSA structures and functions
201
+ # https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/
202
+ # https://docs.microsoft.com/sr-latn-rs/windows/win32/secmgmt/management-data-types
203
+ FFI.typedef :pointer, :pwstr
204
+ FFI.typedef :pointer, :pulong
205
+ FFI.typedef :pointer, :lsa_handle
206
+ FFI.typedef :pointer, :plsa_handle
207
+ FFI.typedef :pointer, :psid
208
+ FFI.typedef :pointer, :pvoid
209
+ FFI.typedef :pointer, :plsa_unicode_string
210
+ FFI.typedef :pointer, :plsa_object_attributes
211
+ FFI.typedef :uint32, :ntstatus
212
+ FFI.typedef :dword, :access_mask
213
+
214
+ module ::FFI::WIN32
215
+ extend ::FFI::Library
216
+
217
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
218
+ # typedef struct _GUID {
219
+ # DWORD Data1;
220
+ # WORD Data2;
221
+ # WORD Data3;
222
+ # BYTE Data4[8];
223
+ # } GUID;
224
+ class GUID < FFI::Struct
225
+ layout :Data1, :dword,
226
+ :Data2, :word,
227
+ :Data3, :word,
228
+ :Data4, [:byte, 8]
229
+
230
+ def self.[](s)
231
+ raise _('Bad GUID format.') unless s =~ /^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
232
+
233
+ new.tap do |guid|
234
+ guid[:Data1] = s[0, 8].to_i(16)
235
+ guid[:Data2] = s[9, 4].to_i(16)
236
+ guid[:Data3] = s[14, 4].to_i(16)
237
+ guid[:Data4][0] = s[19, 2].to_i(16)
238
+ guid[:Data4][1] = s[21, 2].to_i(16)
239
+ s[24, 12].split('').each_slice(2).with_index do |a, i|
240
+ guid[:Data4][i + 2] = a.join('').to_i(16)
241
+ end
242
+ end
243
+ end
244
+
245
+ def ==(other) Windows.memcmp(other, self, size) == 0 end
246
+ end
247
+
248
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
249
+ # typedef struct _SYSTEMTIME {
250
+ # WORD wYear;
251
+ # WORD wMonth;
252
+ # WORD wDayOfWeek;
253
+ # WORD wDay;
254
+ # WORD wHour;
255
+ # WORD wMinute;
256
+ # WORD wSecond;
257
+ # WORD wMilliseconds;
258
+ # } SYSTEMTIME, *PSYSTEMTIME;
259
+ class SYSTEMTIME < FFI::Struct
260
+ layout :wYear, :word,
261
+ :wMonth, :word,
262
+ :wDayOfWeek, :word,
263
+ :wDay, :word,
264
+ :wHour, :word,
265
+ :wMinute, :word,
266
+ :wSecond, :word,
267
+ :wMilliseconds, :word
268
+
269
+ def to_local_time
270
+ Time.local(self[:wYear], self[:wMonth], self[:wDay],
271
+ self[:wHour], self[:wMinute], self[:wSecond], self[:wMilliseconds] * 1000)
272
+ end
273
+ end
274
+
275
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
276
+ # Contains a 64-bit value representing the number of 100-nanosecond
277
+ # intervals since January 1, 1601 (UTC).
278
+ # typedef struct _FILETIME {
279
+ # DWORD dwLowDateTime;
280
+ # DWORD dwHighDateTime;
281
+ # } FILETIME, *PFILETIME;
282
+ class FILETIME < FFI::Struct
283
+ layout :dwLowDateTime, :dword,
284
+ :dwHighDateTime, :dword
285
+ end
286
+
287
+ ffi_convention :stdcall
288
+
289
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
290
+ # HLOCAL WINAPI LocalFree(
291
+ # _In_ HLOCAL hMem
292
+ # );
293
+ ffi_lib :kernel32
294
+ attach_function :LocalFree, [:handle], :handle
295
+
296
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
297
+ # BOOL WINAPI CloseHandle(
298
+ # _In_ HANDLE hObject
299
+ # );
300
+ ffi_lib :kernel32
301
+ attach_function_private :CloseHandle, [:handle], :win32_bool
302
+
303
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
304
+ # void CoTaskMemFree(
305
+ # _In_opt_ LPVOID pv
306
+ # );
307
+ ffi_lib :ole32
308
+ attach_function :CoTaskMemFree, [:lpvoid], :void
309
+ end
310
+ end
311
+ end
@@ -0,0 +1,404 @@
1
+ require 'puppet/ffi/windows'
2
+
3
+ module Puppet::FFI::Windows
4
+ module Constants
5
+ extend FFI::Library
6
+
7
+ FILE_ATTRIBUTE_READONLY = 0x00000001
8
+ FILE_ATTRIBUTE_DIRECTORY = 0x00000010
9
+
10
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379607(v=vs.85).aspx
11
+ # The right to use the object for synchronization. This enables a thread to
12
+ # wait until the object is in the signaled state. Some object types do not
13
+ # support this access right.
14
+ SYNCHRONIZE = 0x100000
15
+ # The right to delete the object.
16
+ DELETE = 0x00010000
17
+ # The right to read the information in the object's security descriptor, not including the information in the system access control list (SACL).
18
+ # READ_CONTROL = 0x00020000
19
+ # The right to modify the discretionary access control list (DACL) in the object's security descriptor.
20
+ WRITE_DAC = 0x00040000
21
+ # The right to change the owner in the object's security descriptor.
22
+ WRITE_OWNER = 0x00080000
23
+
24
+ # Combines DELETE, READ_CONTROL, WRITE_DAC, and WRITE_OWNER access.
25
+ STANDARD_RIGHTS_REQUIRED = 0xf0000
26
+ # Currently defined to equal READ_CONTROL.
27
+ STANDARD_RIGHTS_READ = 0x20000
28
+ # Currently defined to equal READ_CONTROL.
29
+ STANDARD_RIGHTS_WRITE = 0x20000
30
+ # Currently defined to equal READ_CONTROL.
31
+ STANDARD_RIGHTS_EXECUTE = 0x20000
32
+ # Combines DELETE, READ_CONTROL, WRITE_DAC, WRITE_OWNER, and SYNCHRONIZE access.
33
+ STANDARD_RIGHTS_ALL = 0x1F0000
34
+ SPECIFIC_RIGHTS_ALL = 0xFFFF
35
+
36
+ FILE_READ_DATA = 1
37
+ FILE_WRITE_DATA = 2
38
+ FILE_APPEND_DATA = 4
39
+ FILE_READ_EA = 8
40
+ FILE_WRITE_EA = 16
41
+ FILE_EXECUTE = 32
42
+ FILE_DELETE_CHILD = 64
43
+ FILE_READ_ATTRIBUTES = 128
44
+ FILE_WRITE_ATTRIBUTES = 256
45
+
46
+ FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF
47
+
48
+ FILE_GENERIC_READ =
49
+ STANDARD_RIGHTS_READ |
50
+ FILE_READ_DATA |
51
+ FILE_READ_ATTRIBUTES |
52
+ FILE_READ_EA |
53
+ SYNCHRONIZE
54
+
55
+ FILE_GENERIC_WRITE =
56
+ STANDARD_RIGHTS_WRITE |
57
+ FILE_WRITE_DATA |
58
+ FILE_WRITE_ATTRIBUTES |
59
+ FILE_WRITE_EA |
60
+ FILE_APPEND_DATA |
61
+ SYNCHRONIZE
62
+
63
+ FILE_GENERIC_EXECUTE =
64
+ STANDARD_RIGHTS_EXECUTE |
65
+ FILE_READ_ATTRIBUTES |
66
+ FILE_EXECUTE |
67
+ SYNCHRONIZE
68
+
69
+ REPLACEFILE_WRITE_THROUGH = 0x1
70
+ REPLACEFILE_IGNORE_MERGE_ERRORS = 0x2
71
+ REPLACEFILE_IGNORE_ACL_ERRORS = 0x3
72
+
73
+ INVALID_FILE_ATTRIBUTES = 0xFFFFFFFF #define INVALID_FILE_ATTRIBUTES (DWORD (-1))
74
+
75
+ IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003
76
+ IO_REPARSE_TAG_HSM = 0xC0000004
77
+ IO_REPARSE_TAG_HSM2 = 0x80000006
78
+ IO_REPARSE_TAG_SIS = 0x80000007
79
+ IO_REPARSE_TAG_WIM = 0x80000008
80
+ IO_REPARSE_TAG_CSV = 0x80000009
81
+ IO_REPARSE_TAG_DFS = 0x8000000A
82
+ IO_REPARSE_TAG_SYMLINK = 0xA000000C
83
+ IO_REPARSE_TAG_DFSR = 0x80000012
84
+ IO_REPARSE_TAG_DEDUP = 0x80000013
85
+ IO_REPARSE_TAG_NFS = 0x80000014
86
+
87
+ FILE_ATTRIBUTE_REPARSE_POINT = 0x400
88
+
89
+ GENERIC_READ = 0x80000000
90
+ GENERIC_WRITE = 0x40000000
91
+ GENERIC_EXECUTE = 0x20000000
92
+ GENERIC_ALL = 0x10000000
93
+ METHOD_BUFFERED = 0
94
+ FILE_SHARE_READ = 1
95
+ FILE_SHARE_WRITE = 2
96
+ OPEN_EXISTING = 3
97
+ FILE_DEVICE_FILE_SYSTEM = 0x00000009
98
+ FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
99
+ FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
100
+ SHGFI_DISPLAYNAME = 0x000000200
101
+ SHGFI_PIDL = 0x000000008
102
+
103
+ ERROR_FILE_NOT_FOUND = 2
104
+ ERROR_PATH_NOT_FOUND = 3
105
+ ERROR_ALREADY_EXISTS = 183
106
+
107
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa364571(v=vs.85).aspx
108
+ FSCTL_GET_REPARSE_POINT = 0x900a8
109
+
110
+ MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16384
111
+
112
+ # Priority constants
113
+ # https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-setpriorityclass
114
+ ABOVE_NORMAL_PRIORITY_CLASS = 0x0008000
115
+ BELOW_NORMAL_PRIORITY_CLASS = 0x0004000
116
+ HIGH_PRIORITY_CLASS = 0x0000080
117
+ IDLE_PRIORITY_CLASS = 0x0000040
118
+ NORMAL_PRIORITY_CLASS = 0x0000020
119
+ REALTIME_PRIORITY_CLASS = 0x0000010
120
+
121
+ # Process Access Rights
122
+ # https://docs.microsoft.com/en-us/windows/win32/procthread/process-security-and-access-rights
123
+ PROCESS_TERMINATE = 0x00000001
124
+ PROCESS_SET_INFORMATION = 0x00000200
125
+ PROCESS_QUERY_INFORMATION = 0x00000400
126
+ PROCESS_ALL_ACCESS = 0x001F0FFF
127
+ PROCESS_VM_READ = 0x00000010
128
+
129
+ # Process creation flags
130
+ # https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags
131
+ CREATE_BREAKAWAY_FROM_JOB = 0x01000000
132
+ CREATE_DEFAULT_ERROR_MODE = 0x04000000
133
+ CREATE_NEW_CONSOLE = 0x00000010
134
+ CREATE_NEW_PROCESS_GROUP = 0x00000200
135
+ CREATE_NO_WINDOW = 0x08000000
136
+ CREATE_PROTECTED_PROCESS = 0x00040000
137
+ CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000
138
+ CREATE_SEPARATE_WOW_VDM = 0x00000800
139
+ CREATE_SHARED_WOW_VDM = 0x00001000
140
+ CREATE_SUSPENDED = 0x00000004
141
+ CREATE_UNICODE_ENVIRONMENT = 0x00000400
142
+ DEBUG_ONLY_THIS_PROCESS = 0x00000002
143
+ DEBUG_PROCESS = 0x00000001
144
+ DETACHED_PROCESS = 0x00000008
145
+ INHERIT_PARENT_AFFINITY = 0x00010000
146
+
147
+ # Logon options
148
+ LOGON_WITH_PROFILE = 0x00000001
149
+
150
+ # STARTUPINFOA constants
151
+ # https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa
152
+ STARTF_USESTDHANDLES = 0x00000100
153
+
154
+ # Miscellaneous
155
+ HANDLE_FLAG_INHERIT = 0x00000001
156
+ SEM_FAILCRITICALERRORS = 0x00000001
157
+ SEM_NOGPFAULTERRORBOX = 0x00000002
158
+
159
+ # Error constants
160
+ INVALID_HANDLE_VALUE = FFI::Pointer.new(-1).address
161
+
162
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/aa379626(v=vs.85).aspx
163
+ TOKEN_INFORMATION_CLASS = enum(
164
+ :TokenUser, 1,
165
+ :TokenGroups,
166
+ :TokenPrivileges,
167
+ :TokenOwner,
168
+ :TokenPrimaryGroup,
169
+ :TokenDefaultDacl,
170
+ :TokenSource,
171
+ :TokenType,
172
+ :TokenImpersonationLevel,
173
+ :TokenStatistics,
174
+ :TokenRestrictedSids,
175
+ :TokenSessionId,
176
+ :TokenGroupsAndPrivileges,
177
+ :TokenSessionReference,
178
+ :TokenSandBoxInert,
179
+ :TokenAuditPolicy,
180
+ :TokenOrigin,
181
+ :TokenElevationType,
182
+ :TokenLinkedToken,
183
+ :TokenElevation,
184
+ :TokenHasRestrictions,
185
+ :TokenAccessInformation,
186
+ :TokenVirtualizationAllowed,
187
+ :TokenVirtualizationEnabled,
188
+ :TokenIntegrityLevel,
189
+ :TokenUIAccess,
190
+ :TokenMandatoryPolicy,
191
+ :TokenLogonSid,
192
+ :TokenIsAppContainer,
193
+ :TokenCapabilities,
194
+ :TokenAppContainerSid,
195
+ :TokenAppContainerNumber,
196
+ :TokenUserClaimAttributes,
197
+ :TokenDeviceClaimAttributes,
198
+ :TokenRestrictedUserClaimAttributes,
199
+ :TokenRestrictedDeviceClaimAttributes,
200
+ :TokenDeviceGroups,
201
+ :TokenRestrictedDeviceGroups,
202
+ :TokenSecurityAttributes,
203
+ :TokenIsRestricted,
204
+ :MaxTokenInfoClass
205
+ )
206
+
207
+ # Service error codes
208
+ # https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--1000-1299-
209
+ ERROR_SERVICE_DOES_NOT_EXIST = 0x00000424
210
+
211
+ # Service control codes
212
+ # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-controlserviceexw
213
+ SERVICE_CONTROL_STOP = 0x00000001
214
+ SERVICE_CONTROL_PAUSE = 0x00000002
215
+ SERVICE_CONTROL_CONTINUE = 0x00000003
216
+ SERVICE_CONTROL_INTERROGATE = 0x00000004
217
+ SERVICE_CONTROL_SHUTDOWN = 0x00000005
218
+ SERVICE_CONTROL_PARAMCHANGE = 0x00000006
219
+ SERVICE_CONTROL_NETBINDADD = 0x00000007
220
+ SERVICE_CONTROL_NETBINDREMOVE = 0x00000008
221
+ SERVICE_CONTROL_NETBINDENABLE = 0x00000009
222
+ SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A
223
+ SERVICE_CONTROL_DEVICEEVENT = 0x0000000B
224
+ SERVICE_CONTROL_HARDWAREPROFILECHANGE = 0x0000000C
225
+ SERVICE_CONTROL_POWEREVENT = 0x0000000D
226
+ SERVICE_CONTROL_SESSIONCHANGE = 0x0000000E
227
+ SERVICE_CONTROL_PRESHUTDOWN = 0x0000000F
228
+ SERVICE_CONTROL_TIMECHANGE = 0x00000010
229
+ SERVICE_CONTROL_TRIGGEREVENT = 0x00000020
230
+ SERVICE_CONTROL_SIGNALS = {
231
+ SERVICE_CONTROL_STOP => :SERVICE_CONTROL_STOP,
232
+ SERVICE_CONTROL_PAUSE => :SERVICE_CONTROL_PAUSE,
233
+ SERVICE_CONTROL_CONTINUE => :SERVICE_CONTROL_CONTINUE,
234
+ SERVICE_CONTROL_INTERROGATE => :SERVICE_CONTROL_INTERROGATE,
235
+ SERVICE_CONTROL_SHUTDOWN => :SERVICE_CONTROL_SHUTDOWN,
236
+ SERVICE_CONTROL_PARAMCHANGE => :SERVICE_CONTROL_PARAMCHANGE,
237
+ SERVICE_CONTROL_NETBINDADD => :SERVICE_CONTROL_NETBINDADD,
238
+ SERVICE_CONTROL_NETBINDREMOVE => :SERVICE_CONTROL_NETBINDREMOVE,
239
+ SERVICE_CONTROL_NETBINDENABLE => :SERVICE_CONTROL_NETBINDENABLE,
240
+ SERVICE_CONTROL_NETBINDDISABLE => :SERVICE_CONTROL_NETBINDDISABLE,
241
+ SERVICE_CONTROL_DEVICEEVENT => :SERVICE_CONTROL_DEVICEEVENT,
242
+ SERVICE_CONTROL_HARDWAREPROFILECHANGE => :SERVICE_CONTROL_HARDWAREPROFILECHANGE,
243
+ SERVICE_CONTROL_POWEREVENT => :SERVICE_CONTROL_POWEREVENT,
244
+ SERVICE_CONTROL_SESSIONCHANGE => :SERVICE_CONTROL_SESSIONCHANGE,
245
+ SERVICE_CONTROL_PRESHUTDOWN => :SERVICE_CONTROL_PRESHUTDOWN,
246
+ SERVICE_CONTROL_TIMECHANGE => :SERVICE_CONTROL_TIMECHANGE,
247
+ SERVICE_CONTROL_TRIGGEREVENT => :SERVICE_CONTROL_TRIGGEREVENT
248
+ }
249
+
250
+ # Service start type codes
251
+ # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-changeserviceconfigw
252
+ SERVICE_AUTO_START = 0x00000002
253
+ SERVICE_BOOT_START = 0x00000000
254
+ SERVICE_DEMAND_START = 0x00000003
255
+ SERVICE_DISABLED = 0x00000004
256
+ SERVICE_SYSTEM_START = 0x00000001
257
+ SERVICE_START_TYPES = {
258
+ SERVICE_AUTO_START => :SERVICE_AUTO_START,
259
+ SERVICE_BOOT_START => :SERVICE_BOOT_START,
260
+ SERVICE_DEMAND_START => :SERVICE_DEMAND_START,
261
+ SERVICE_DISABLED => :SERVICE_DISABLED,
262
+ SERVICE_SYSTEM_START => :SERVICE_SYSTEM_START,
263
+ }
264
+
265
+ # Service type codes
266
+ # https://docs.microsoft.com/en-us/windows/desktop/api/Winsvc/nf-winsvc-changeserviceconfigw
267
+ SERVICE_FILE_SYSTEM_DRIVER = 0x00000002
268
+ SERVICE_KERNEL_DRIVER = 0x00000001
269
+ SERVICE_WIN32_OWN_PROCESS = 0x00000010
270
+ SERVICE_WIN32_SHARE_PROCESS = 0x00000020
271
+ SERVICE_USER_OWN_PROCESS = 0x00000050
272
+ SERVICE_USER_SHARE_PROCESS = 0x00000060
273
+ # Available only if service is also SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS
274
+ SERVICE_INTERACTIVE_PROCESS = 0x00000100
275
+ ALL_SERVICE_TYPES =
276
+ SERVICE_FILE_SYSTEM_DRIVER |
277
+ SERVICE_KERNEL_DRIVER |
278
+ SERVICE_WIN32_OWN_PROCESS |
279
+ SERVICE_WIN32_SHARE_PROCESS
280
+
281
+ # Current state codes
282
+ # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
283
+ SERVICE_CONTINUE_PENDING = 0x00000005
284
+ SERVICE_PAUSE_PENDING = 0x00000006
285
+ SERVICE_PAUSED = 0x00000007
286
+ SERVICE_RUNNING = 0x00000004
287
+ SERVICE_START_PENDING = 0x00000002
288
+ SERVICE_STOP_PENDING = 0x00000003
289
+ SERVICE_STOPPED = 0x00000001
290
+ UNSAFE_PENDING_STATES = [SERVICE_START_PENDING, SERVICE_STOP_PENDING]
291
+ FINAL_STATES = {
292
+ SERVICE_CONTINUE_PENDING => SERVICE_RUNNING,
293
+ SERVICE_PAUSE_PENDING => SERVICE_PAUSED,
294
+ SERVICE_START_PENDING => SERVICE_RUNNING,
295
+ SERVICE_STOP_PENDING => SERVICE_STOPPED
296
+ }
297
+ SERVICE_STATES = {
298
+ SERVICE_CONTINUE_PENDING => :SERVICE_CONTINUE_PENDING,
299
+ SERVICE_PAUSE_PENDING => :SERVICE_PAUSE_PENDING,
300
+ SERVICE_PAUSED => :SERVICE_PAUSED,
301
+ SERVICE_RUNNING => :SERVICE_RUNNING,
302
+ SERVICE_START_PENDING => :SERVICE_START_PENDING,
303
+ SERVICE_STOP_PENDING => :SERVICE_STOP_PENDING,
304
+ SERVICE_STOPPED => :SERVICE_STOPPED,
305
+ }
306
+
307
+ # Service accepts control codes
308
+ # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_service_status_process
309
+ SERVICE_ACCEPT_STOP = 0x00000001
310
+ SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002
311
+ SERVICE_ACCEPT_SHUTDOWN = 0x00000004
312
+ SERVICE_ACCEPT_PARAMCHANGE = 0x00000008
313
+ SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010
314
+ SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020
315
+ SERVICE_ACCEPT_POWEREVENT = 0x00000040
316
+ SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080
317
+ SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100
318
+ SERVICE_ACCEPT_TIMECHANGE = 0x00000200
319
+ SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400
320
+ SERVICE_ACCEPT_USER_LOGOFF = 0x00000800
321
+
322
+ # Service manager access codes
323
+ # https://docs.microsoft.com/en-us/windows/desktop/Services/service-security-and-access-rights
324
+ SC_MANAGER_CREATE_SERVICE = 0x00000002
325
+ SC_MANAGER_CONNECT = 0x00000001
326
+ SC_MANAGER_ENUMERATE_SERVICE = 0x00000004
327
+ SC_MANAGER_LOCK = 0x00000008
328
+ SC_MANAGER_MODIFY_BOOT_CONFIG = 0x00000020
329
+ SC_MANAGER_QUERY_LOCK_STATUS = 0x00000010
330
+ SC_MANAGER_ALL_ACCESS =
331
+ STANDARD_RIGHTS_REQUIRED |
332
+ SC_MANAGER_CREATE_SERVICE |
333
+ SC_MANAGER_CONNECT |
334
+ SC_MANAGER_ENUMERATE_SERVICE |
335
+ SC_MANAGER_LOCK |
336
+ SC_MANAGER_MODIFY_BOOT_CONFIG |
337
+ SC_MANAGER_QUERY_LOCK_STATUS
338
+
339
+ # Service access codes
340
+ # https://docs.microsoft.com/en-us/windows/desktop/Services/service-security-and-access-rights
341
+ SERVICE_CHANGE_CONFIG = 0x0002
342
+ SERVICE_ENUMERATE_DEPENDENTS = 0x0008
343
+ SERVICE_INTERROGATE = 0x0080
344
+ SERVICE_PAUSE_CONTINUE = 0x0040
345
+ SERVICE_QUERY_STATUS = 0x0004
346
+ SERVICE_QUERY_CONFIG = 0x0001
347
+ SERVICE_START = 0x0010
348
+ SERVICE_STOP = 0x0020
349
+ SERVICE_USER_DEFINED_CONTROL = 0x0100
350
+ SERVICE_ALL_ACCESS =
351
+ STANDARD_RIGHTS_REQUIRED |
352
+ SERVICE_CHANGE_CONFIG |
353
+ SERVICE_ENUMERATE_DEPENDENTS |
354
+ SERVICE_INTERROGATE |
355
+ SERVICE_PAUSE_CONTINUE |
356
+ SERVICE_QUERY_STATUS |
357
+ SERVICE_QUERY_CONFIG |
358
+ SERVICE_START |
359
+ SERVICE_STOP |
360
+ SERVICE_USER_DEFINED_CONTROL
361
+
362
+ # Service config codes
363
+ # From the windows 10 SDK:
364
+ # //
365
+ # // Value to indicate no change to an optional parameter
366
+ # //
367
+ # #define SERVICE_NO_CHANGE 0xffffffff
368
+ # https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfig2w
369
+ SERVICE_CONFIG_DESCRIPTION = 0x00000001
370
+ SERVICE_CONFIG_FAILURE_ACTIONS = 0x00000002
371
+ SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 0x00000003
372
+ SERVICE_CONFIG_FAILURE_ACTIONS_FLAG = 0x00000004
373
+ SERVICE_CONFIG_SERVICE_SID_INFO = 0x00000005
374
+ SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 0x00000006
375
+ SERVICE_CONFIG_PRESHUTDOWN_INFO = 0x00000007
376
+ SERVICE_CONFIG_TRIGGER_INFO = 0x00000008
377
+ SERVICE_CONFIG_PREFERRED_NODE = 0x00000009
378
+ SERVICE_CONFIG_LAUNCH_PROTECTED = 0x00000012
379
+ SERVICE_NO_CHANGE = 0xffffffff
380
+ SERVICE_CONFIG_TYPES = {
381
+ SERVICE_CONFIG_DESCRIPTION => :SERVICE_CONFIG_DESCRIPTION,
382
+ SERVICE_CONFIG_FAILURE_ACTIONS => :SERVICE_CONFIG_FAILURE_ACTIONS,
383
+ SERVICE_CONFIG_DELAYED_AUTO_START_INFO => :SERVICE_CONFIG_DELAYED_AUTO_START_INFO,
384
+ SERVICE_CONFIG_FAILURE_ACTIONS_FLAG => :SERVICE_CONFIG_FAILURE_ACTIONS_FLAG,
385
+ SERVICE_CONFIG_SERVICE_SID_INFO => :SERVICE_CONFIG_SERVICE_SID_INFO,
386
+ SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO => :SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO,
387
+ SERVICE_CONFIG_PRESHUTDOWN_INFO => :SERVICE_CONFIG_PRESHUTDOWN_INFO,
388
+ SERVICE_CONFIG_TRIGGER_INFO => :SERVICE_CONFIG_TRIGGER_INFO,
389
+ SERVICE_CONFIG_PREFERRED_NODE => :SERVICE_CONFIG_PREFERRED_NODE,
390
+ SERVICE_CONFIG_LAUNCH_PROTECTED => :SERVICE_CONFIG_LAUNCH_PROTECTED,
391
+ }
392
+
393
+ # Service enum codes
394
+ # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/nf-winsvc-enumservicesstatusexa
395
+ SERVICE_ACTIVE = 0x00000001
396
+ SERVICE_INACTIVE = 0x00000002
397
+ SERVICE_STATE_ALL =
398
+ SERVICE_ACTIVE |
399
+ SERVICE_INACTIVE
400
+
401
+ # https://docs.microsoft.com/en-us/windows/desktop/api/winsvc/ns-winsvc-_enum_service_status_processw
402
+ SERVICENAME_MAX = 256
403
+ end
404
+ end