puppet 6.19.0-x86-mingw32 → 7.3.0-x86-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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +3 -4
  4. data/Gemfile.lock +33 -28
  5. data/README.md +1 -1
  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 +2 -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/application.rb +182 -104
  15. data/lib/puppet/application/agent.rb +1 -0
  16. data/lib/puppet/application/apply.rb +3 -2
  17. data/lib/puppet/application/device.rb +101 -104
  18. data/lib/puppet/application/filebucket.rb +15 -11
  19. data/lib/puppet/application/script.rb +1 -0
  20. data/lib/puppet/application/ssl.rb +1 -1
  21. data/lib/puppet/application_support.rb +7 -0
  22. data/lib/puppet/configurer.rb +44 -36
  23. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  24. data/lib/puppet/defaults.rb +71 -170
  25. data/lib/puppet/environments.rb +44 -75
  26. data/lib/puppet/face/config.rb +10 -0
  27. data/lib/puppet/face/epp.rb +12 -2
  28. data/lib/puppet/face/facts.rb +80 -6
  29. data/lib/puppet/face/help.rb +1 -1
  30. data/lib/puppet/face/node/clean.rb +8 -0
  31. data/lib/puppet/face/plugin.rb +5 -8
  32. data/lib/puppet/ffi/posix.rb +10 -0
  33. data/lib/puppet/ffi/posix/constants.rb +14 -0
  34. data/lib/puppet/ffi/posix/functions.rb +24 -0
  35. data/lib/puppet/ffi/windows.rb +12 -0
  36. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  37. data/lib/puppet/ffi/windows/constants.rb +404 -0
  38. data/lib/puppet/ffi/windows/functions.rb +628 -0
  39. data/lib/puppet/ffi/windows/structs.rb +338 -0
  40. data/lib/puppet/file_serving/configuration.rb +0 -5
  41. data/lib/puppet/file_serving/configuration/parser.rb +6 -32
  42. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  43. data/lib/puppet/file_serving/mount.rb +1 -2
  44. data/lib/puppet/forge/repository.rb +0 -1
  45. data/lib/puppet/functions/epp.rb +1 -0
  46. data/lib/puppet/functions/inline_epp.rb +1 -0
  47. data/lib/puppet/generate/models/type/type.rb +4 -1
  48. data/lib/puppet/http.rb +22 -13
  49. data/lib/puppet/http/client.rb +164 -114
  50. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  51. data/lib/puppet/http/errors.rb +16 -0
  52. data/lib/puppet/http/external_client.rb +5 -7
  53. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  54. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  55. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  56. data/lib/puppet/http/proxy.rb +137 -0
  57. data/lib/puppet/http/redirector.rb +4 -12
  58. data/lib/puppet/http/resolver.rb +5 -15
  59. data/lib/puppet/http/resolver/server_list.rb +6 -10
  60. data/lib/puppet/http/resolver/settings.rb +4 -7
  61. data/lib/puppet/http/resolver/srv.rb +7 -11
  62. data/lib/puppet/http/response.rb +36 -54
  63. data/lib/puppet/http/response_converter.rb +24 -0
  64. data/lib/puppet/http/response_net_http.rb +42 -0
  65. data/lib/puppet/http/retry_after_handler.rb +4 -13
  66. data/lib/puppet/http/service.rb +12 -26
  67. data/lib/puppet/http/service/ca.rb +11 -22
  68. data/lib/puppet/http/service/compiler.rb +22 -69
  69. data/lib/puppet/http/service/file_server.rb +18 -27
  70. data/lib/puppet/http/service/puppetserver.rb +26 -12
  71. data/lib/puppet/http/service/report.rb +8 -10
  72. data/lib/puppet/http/session.rb +11 -20
  73. data/lib/puppet/{network/http → http}/site.rb +1 -2
  74. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  75. data/lib/puppet/indirector/fact_search.rb +60 -0
  76. data/lib/puppet/indirector/facts/facter.rb +24 -3
  77. data/lib/puppet/indirector/facts/json.rb +27 -0
  78. data/lib/puppet/indirector/facts/rest.rb +3 -22
  79. data/lib/puppet/indirector/facts/yaml.rb +3 -58
  80. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  81. data/lib/puppet/indirector/file_content/rest.rb +2 -6
  82. data/lib/puppet/indirector/file_metadata/rest.rb +3 -9
  83. data/lib/puppet/indirector/file_server.rb +1 -8
  84. data/lib/puppet/indirector/generic_http.rb +0 -11
  85. data/lib/puppet/indirector/json.rb +5 -1
  86. data/lib/puppet/indirector/node/json.rb +8 -0
  87. data/lib/puppet/indirector/node/rest.rb +2 -4
  88. data/lib/puppet/indirector/report/json.rb +34 -0
  89. data/lib/puppet/indirector/report/rest.rb +3 -8
  90. data/lib/puppet/indirector/request.rb +0 -101
  91. data/lib/puppet/indirector/rest.rb +12 -263
  92. data/lib/puppet/module_tool/applications.rb +0 -1
  93. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  94. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  95. data/lib/puppet/network/authconfig.rb +2 -96
  96. data/lib/puppet/network/authorization.rb +13 -35
  97. data/lib/puppet/network/formats.rb +69 -1
  98. data/lib/puppet/network/http.rb +3 -3
  99. data/lib/puppet/network/http/api/indirected_routes.rb +2 -20
  100. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  101. data/lib/puppet/network/http/connection.rb +247 -316
  102. data/lib/puppet/network/http/handler.rb +0 -1
  103. data/lib/puppet/network/http_pool.rb +16 -34
  104. data/lib/puppet/node.rb +1 -30
  105. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  106. data/lib/puppet/pal/pal_impl.rb +73 -18
  107. data/lib/puppet/parser/ast/leaf.rb +3 -2
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -38
  109. data/lib/puppet/parser/compiler.rb +0 -198
  110. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  111. data/lib/puppet/parser/resource.rb +0 -69
  112. data/lib/puppet/parser/templatewrapper.rb +1 -1
  113. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  114. data/lib/puppet/pops/evaluator/evaluator_impl.rb +22 -8
  115. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  116. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  117. data/lib/puppet/pops/issues.rb +0 -5
  118. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  119. data/lib/puppet/pops/model/ast.pp +0 -42
  120. data/lib/puppet/pops/model/ast.rb +0 -290
  121. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  122. data/lib/puppet/pops/model/factory.rb +0 -45
  123. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  124. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  125. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  126. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  127. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  128. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  129. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  130. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -24
  131. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  132. data/lib/puppet/pops/types/type_parser.rb +0 -4
  133. data/lib/puppet/pops/types/types.rb +0 -1
  134. data/lib/puppet/pops/validation/checker4_0.rb +9 -37
  135. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -2
  137. data/lib/puppet/provider.rb +0 -13
  138. data/lib/puppet/provider/nameservice.rb +0 -18
  139. data/lib/puppet/provider/package/apt.rb +4 -0
  140. data/lib/puppet/provider/package/dpkg.rb +0 -10
  141. data/lib/puppet/provider/package/gem.rb +23 -3
  142. data/lib/puppet/provider/package/pip.rb +0 -1
  143. data/lib/puppet/provider/package/pkg.rb +0 -4
  144. data/lib/puppet/provider/package/portage.rb +1 -1
  145. data/lib/puppet/provider/package/puppet_gem.rb +1 -4
  146. data/lib/puppet/provider/service/smf.rb +191 -73
  147. data/lib/puppet/provider/user/aix.rb +2 -2
  148. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  149. data/lib/puppet/reference/configuration.rb +8 -5
  150. data/lib/puppet/reference/indirection.rb +1 -1
  151. data/lib/puppet/resource.rb +1 -89
  152. data/lib/puppet/resource/catalog.rb +1 -14
  153. data/lib/puppet/resource/type.rb +3 -119
  154. data/lib/puppet/resource/type_collection.rb +3 -48
  155. data/lib/puppet/runtime.rb +1 -2
  156. data/lib/puppet/settings.rb +88 -48
  157. data/lib/puppet/settings/alias_setting.rb +37 -0
  158. data/lib/puppet/settings/base_setting.rb +26 -2
  159. data/lib/puppet/settings/integer_setting.rb +17 -0
  160. data/lib/puppet/settings/port_setting.rb +15 -0
  161. data/lib/puppet/settings/priority_setting.rb +5 -4
  162. data/lib/puppet/ssl.rb +10 -6
  163. data/lib/puppet/ssl/base.rb +3 -5
  164. data/lib/puppet/ssl/certificate.rb +0 -6
  165. data/lib/puppet/ssl/certificate_request.rb +1 -12
  166. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  167. data/lib/puppet/ssl/oids.rb +3 -1
  168. data/lib/puppet/ssl/ssl_provider.rb +17 -0
  169. data/lib/puppet/ssl/state_machine.rb +3 -1
  170. data/lib/puppet/ssl/verifier.rb +2 -0
  171. data/lib/puppet/test/test_helper.rb +1 -3
  172. data/lib/puppet/transaction.rb +1 -7
  173. data/lib/puppet/transaction/report.rb +2 -4
  174. data/lib/puppet/type.rb +0 -76
  175. data/lib/puppet/type/file.rb +5 -7
  176. data/lib/puppet/type/file/checksum.rb +1 -1
  177. data/lib/puppet/type/file/source.rb +1 -1
  178. data/lib/puppet/type/filebucket.rb +3 -3
  179. data/lib/puppet/type/package.rb +5 -13
  180. data/lib/puppet/type/user.rb +1 -1
  181. data/lib/puppet/util/autoload.rb +1 -8
  182. data/lib/puppet/util/execution.rb +0 -11
  183. data/lib/puppet/util/http_proxy.rb +2 -215
  184. data/lib/puppet/util/monkey_patches.rb +0 -46
  185. data/lib/puppet/util/posix.rb +54 -5
  186. data/lib/puppet/util/rdoc.rb +0 -7
  187. data/lib/puppet/util/retry_action.rb +1 -1
  188. data/lib/puppet/util/rubygems.rb +5 -1
  189. data/lib/puppet/util/run_mode.rb +9 -1
  190. data/lib/puppet/util/windows.rb +3 -8
  191. data/lib/puppet/util/windows/daemon.rb +360 -0
  192. data/lib/puppet/util/windows/error.rb +1 -0
  193. data/lib/puppet/util/windows/eventlog.rb +4 -9
  194. data/lib/puppet/util/windows/file.rb +8 -242
  195. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  196. data/lib/puppet/util/windows/process.rb +4 -226
  197. data/lib/puppet/util/windows/service.rb +9 -460
  198. data/lib/puppet/util/windows/string.rb +12 -13
  199. data/lib/puppet/util/yaml.rb +0 -22
  200. data/lib/puppet/vendor/require_vendored.rb +0 -1
  201. data/lib/puppet/version.rb +1 -1
  202. data/lib/puppet/x509.rb +5 -1
  203. data/lib/puppet/x509/cert_provider.rb +29 -1
  204. data/locales/puppet.pot +629 -1314
  205. data/man/man5/puppet.conf.5 +39 -99
  206. data/man/man8/puppet-agent.8 +2 -2
  207. data/man/man8/puppet-apply.8 +2 -2
  208. data/man/man8/puppet-catalog.8 +1 -1
  209. data/man/man8/puppet-config.8 +1 -1
  210. data/man/man8/puppet-describe.8 +1 -1
  211. data/man/man8/puppet-device.8 +2 -2
  212. data/man/man8/puppet-doc.8 +1 -1
  213. data/man/man8/puppet-epp.8 +1 -1
  214. data/man/man8/puppet-facts.8 +58 -9
  215. data/man/man8/puppet-filebucket.8 +6 -6
  216. data/man/man8/puppet-generate.8 +1 -1
  217. data/man/man8/puppet-help.8 +1 -1
  218. data/man/man8/puppet-lookup.8 +1 -1
  219. data/man/man8/puppet-module.8 +1 -58
  220. data/man/man8/puppet-node.8 +4 -1
  221. data/man/man8/puppet-parser.8 +1 -1
  222. data/man/man8/puppet-plugin.8 +1 -1
  223. data/man/man8/puppet-report.8 +4 -1
  224. data/man/man8/puppet-resource.8 +1 -1
  225. data/man/man8/puppet-script.8 +2 -2
  226. data/man/man8/puppet-ssl.8 +1 -1
  227. data/man/man8/puppet.8 +2 -2
  228. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  229. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  230. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  231. data/spec/integration/application/agent_spec.rb +151 -14
  232. data/spec/integration/application/apply_spec.rb +20 -1
  233. data/spec/integration/application/filebucket_spec.rb +16 -16
  234. data/spec/integration/application/help_spec.rb +2 -0
  235. data/spec/integration/application/plugin_spec.rb +23 -1
  236. data/spec/integration/defaults_spec.rb +7 -10
  237. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  238. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  239. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  240. data/spec/integration/network/http_pool_spec.rb +3 -21
  241. data/spec/integration/parser/catalog_spec.rb +0 -38
  242. data/spec/integration/parser/node_spec.rb +0 -9
  243. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  244. data/spec/integration/resource/type_collection_spec.rb +2 -6
  245. data/spec/integration/transaction_spec.rb +4 -9
  246. data/spec/integration/type/file_spec.rb +5 -4
  247. data/spec/integration/util/windows/adsi_spec.rb +3 -1
  248. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  249. data/spec/integration/util/windows/registry_spec.rb +0 -10
  250. data/spec/integration/util/windows/security_spec.rb +1 -1
  251. data/spec/lib/puppet_spec/puppetserver.rb +1 -1
  252. data/spec/lib/puppet_spec/settings.rb +7 -1
  253. data/spec/spec_helper.rb +3 -4
  254. data/spec/unit/agent_spec.rb +8 -8
  255. data/spec/unit/application/agent_spec.rb +0 -1
  256. data/spec/unit/application/config_spec.rb +224 -4
  257. data/spec/unit/application/facts_spec.rb +35 -0
  258. data/spec/unit/application/filebucket_spec.rb +41 -41
  259. data/spec/unit/application/ssl_spec.rb +2 -2
  260. data/spec/unit/application_spec.rb +51 -9
  261. data/spec/unit/certificate_factory_spec.rb +1 -1
  262. data/spec/unit/configurer/downloader_spec.rb +6 -2
  263. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  264. data/spec/unit/configurer_spec.rb +12 -9
  265. data/spec/unit/confine/feature_spec.rb +1 -1
  266. data/spec/unit/confine_spec.rb +8 -2
  267. data/spec/unit/context/trusted_information_spec.rb +2 -6
  268. data/spec/unit/defaults_spec.rb +26 -32
  269. data/spec/unit/environments_spec.rb +96 -22
  270. data/spec/unit/face/config_spec.rb +27 -32
  271. data/spec/unit/face/facts_spec.rb +4 -0
  272. data/spec/unit/face/node_spec.rb +14 -13
  273. data/spec/unit/face/plugin_spec.rb +73 -33
  274. data/spec/unit/file_bucket/file_spec.rb +1 -1
  275. data/spec/unit/file_serving/configuration/parser_spec.rb +22 -19
  276. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  277. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  278. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  279. data/spec/unit/forge/module_release_spec.rb +2 -7
  280. data/spec/unit/functions/camelcase_spec.rb +1 -1
  281. data/spec/unit/functions/capitalize_spec.rb +1 -1
  282. data/spec/unit/functions/downcase_spec.rb +1 -1
  283. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  284. data/spec/unit/functions/upcase_spec.rb +1 -1
  285. data/spec/unit/http/client_spec.rb +7 -8
  286. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  287. data/spec/unit/http/external_client_spec.rb +4 -4
  288. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  289. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  290. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  291. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  292. data/spec/unit/http/resolver_spec.rb +13 -13
  293. data/spec/unit/http/service/compiler_spec.rb +49 -62
  294. data/spec/unit/http/service/file_server_spec.rb +3 -3
  295. data/spec/unit/http/service/puppetserver_spec.rb +34 -4
  296. data/spec/unit/http/service_spec.rb +1 -2
  297. data/spec/unit/http/session_spec.rb +16 -14
  298. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  299. data/spec/unit/indirector/face_spec.rb +0 -1
  300. data/spec/unit/indirector/facts/facter_spec.rb +104 -1
  301. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  302. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  303. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  304. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  305. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  306. data/spec/unit/indirector/file_server_spec.rb +1 -15
  307. data/spec/unit/indirector/indirection_spec.rb +8 -12
  308. data/spec/unit/indirector/node/json_spec.rb +33 -0
  309. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  310. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  311. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  312. data/spec/unit/indirector/request_spec.rb +0 -264
  313. data/spec/unit/indirector/rest_spec.rb +98 -752
  314. data/spec/unit/indirector_spec.rb +2 -2
  315. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  316. data/spec/unit/network/authconfig_spec.rb +2 -132
  317. data/spec/unit/network/authorization_spec.rb +2 -55
  318. data/spec/unit/network/formats_spec.rb +45 -4
  319. data/spec/unit/network/http/api/indirected_routes_spec.rb +1 -101
  320. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  321. data/spec/unit/network/http/api_spec.rb +10 -0
  322. data/spec/unit/network/http/connection_spec.rb +19 -41
  323. data/spec/unit/network/http/handler_spec.rb +0 -6
  324. data/spec/unit/network/http_pool_spec.rb +0 -4
  325. data/spec/unit/node/environment_spec.rb +33 -21
  326. data/spec/unit/node_spec.rb +2 -54
  327. data/spec/unit/parser/compiler_spec.rb +3 -19
  328. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  329. data/spec/unit/parser/resource_spec.rb +14 -8
  330. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  331. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  332. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +4 -7
  333. data/spec/unit/pops/loaders/loaders_spec.rb +6 -21
  334. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  335. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  336. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  337. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  338. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  339. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  340. data/spec/unit/pops/types/type_calculator_spec.rb +6 -6
  341. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  342. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  343. data/spec/unit/pops/visitor_spec.rb +1 -1
  344. data/spec/unit/property_spec.rb +1 -0
  345. data/spec/unit/provider/nameservice_spec.rb +66 -122
  346. data/spec/unit/provider/package/apt_spec.rb +4 -8
  347. data/spec/unit/provider/package/base_spec.rb +6 -5
  348. data/spec/unit/provider/package/dpkg_spec.rb +0 -48
  349. data/spec/unit/provider/package/gem_spec.rb +32 -0
  350. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  351. data/spec/unit/provider/package/pip_spec.rb +6 -11
  352. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  353. data/spec/unit/provider/package/puppet_gem_spec.rb +3 -2
  354. data/spec/unit/provider/service/smf_spec.rb +401 -165
  355. data/spec/unit/provider/service/windows_spec.rb +0 -1
  356. data/spec/unit/provider/user/aix_spec.rb +5 -0
  357. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  358. data/spec/unit/provider/user/pw_spec.rb +2 -0
  359. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  360. data/spec/unit/provider_spec.rb +6 -20
  361. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  362. data/spec/unit/resource/type_collection_spec.rb +2 -22
  363. data/spec/unit/resource/type_spec.rb +1 -1
  364. data/spec/unit/resource_spec.rb +11 -66
  365. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  366. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  367. data/spec/unit/settings/port_setting_spec.rb +31 -0
  368. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  369. data/spec/unit/settings_spec.rb +560 -228
  370. data/spec/unit/ssl/base_spec.rb +36 -4
  371. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  372. data/spec/unit/ssl/certificate_spec.rb +2 -11
  373. data/spec/unit/ssl/ssl_provider_spec.rb +14 -8
  374. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  375. data/spec/unit/ssl/verifier_spec.rb +0 -21
  376. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  377. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  378. data/spec/unit/transaction/report_spec.rb +0 -2
  379. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  380. data/spec/unit/transaction_spec.rb +57 -82
  381. data/spec/unit/type/file/checksum_spec.rb +6 -6
  382. data/spec/unit/type/file/content_spec.rb +1 -2
  383. data/spec/unit/type/file/ensure_spec.rb +1 -1
  384. data/spec/unit/type/file/mode_spec.rb +1 -1
  385. data/spec/unit/type/file/selinux_spec.rb +0 -2
  386. data/spec/unit/type/file/source_spec.rb +0 -1
  387. data/spec/unit/type/file_spec.rb +12 -12
  388. data/spec/unit/type/group_spec.rb +13 -6
  389. data/spec/unit/type/package_spec.rb +1 -1
  390. data/spec/unit/type/resources_spec.rb +7 -7
  391. data/spec/unit/type/service_spec.rb +1 -1
  392. data/spec/unit/type/tidy_spec.rb +0 -1
  393. data/spec/unit/type_spec.rb +22 -2
  394. data/spec/unit/util/at_fork_spec.rb +2 -2
  395. data/spec/unit/util/autoload_spec.rb +5 -1
  396. data/spec/unit/util/backups_spec.rb +1 -4
  397. data/spec/unit/util/execution_spec.rb +15 -40
  398. data/spec/unit/util/inifile_spec.rb +6 -14
  399. data/spec/unit/util/log_spec.rb +8 -7
  400. data/spec/unit/util/logging_spec.rb +3 -3
  401. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  402. data/spec/unit/util/posix_spec.rb +363 -15
  403. data/spec/unit/util/rubygems_spec.rb +2 -2
  404. data/spec/unit/util/run_mode_spec.rb +21 -121
  405. data/spec/unit/util/selinux_spec.rb +76 -52
  406. data/spec/unit/util/storage_spec.rb +3 -1
  407. data/spec/unit/util/suidmanager_spec.rb +44 -41
  408. data/spec/unit/util/windows/string_spec.rb +1 -3
  409. data/spec/unit/util/yaml_spec.rb +0 -54
  410. data/spec/unit/util_spec.rb +13 -24
  411. metadata +66 -226
  412. data/conf/auth.conf +0 -150
  413. data/lib/puppet/application/cert.rb +0 -76
  414. data/lib/puppet/application/key.rb +0 -4
  415. data/lib/puppet/application/man.rb +0 -4
  416. data/lib/puppet/application/status.rb +0 -4
  417. data/lib/puppet/face/key.rb +0 -16
  418. data/lib/puppet/face/man.rb +0 -145
  419. data/lib/puppet/face/module/build.rb +0 -14
  420. data/lib/puppet/face/module/generate.rb +0 -14
  421. data/lib/puppet/face/module/search.rb +0 -103
  422. data/lib/puppet/face/status.rb +0 -51
  423. data/lib/puppet/indirector/certificate/file.rb +0 -9
  424. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  425. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  426. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  427. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  428. data/lib/puppet/indirector/file_content/http.rb +0 -22
  429. data/lib/puppet/indirector/key/file.rb +0 -46
  430. data/lib/puppet/indirector/key/memory.rb +0 -7
  431. data/lib/puppet/indirector/ssl_file.rb +0 -162
  432. data/lib/puppet/indirector/status.rb +0 -3
  433. data/lib/puppet/indirector/status/local.rb +0 -12
  434. data/lib/puppet/indirector/status/rest.rb +0 -27
  435. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  436. data/lib/puppet/network/auth_config_parser.rb +0 -90
  437. data/lib/puppet/network/authstore.rb +0 -283
  438. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  439. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -88
  440. data/lib/puppet/network/http/base_pool.rb +0 -36
  441. data/lib/puppet/network/http/compression.rb +0 -127
  442. data/lib/puppet/network/http/connection_adapter.rb +0 -184
  443. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  444. data/lib/puppet/network/rest_controller.rb +0 -2
  445. data/lib/puppet/network/rights.rb +0 -210
  446. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -66
  447. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -22
  448. data/lib/puppet/parser/environment_compiler.rb +0 -202
  449. data/lib/puppet/pops/types/enumeration.rb +0 -16
  450. data/lib/puppet/resource/capability_finder.rb +0 -154
  451. data/lib/puppet/rest/errors.rb +0 -15
  452. data/lib/puppet/rest/response.rb +0 -35
  453. data/lib/puppet/rest/route.rb +0 -85
  454. data/lib/puppet/rest/routes.rb +0 -135
  455. data/lib/puppet/ssl/host.rb +0 -505
  456. data/lib/puppet/ssl/key.rb +0 -61
  457. data/lib/puppet/ssl/validator.rb +0 -61
  458. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  459. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  460. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  461. data/lib/puppet/status.rb +0 -40
  462. data/lib/puppet/util/connection.rb +0 -88
  463. data/lib/puppet/util/ssl.rb +0 -83
  464. data/lib/puppet/util/windows/api_types.rb +0 -309
  465. data/lib/puppet/util/windows/monkey_patches/dir.rb +0 -40
  466. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  467. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  468. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  469. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  470. data/lib/puppet/vendor/pathspec/README.md +0 -53
  471. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  472. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  473. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  474. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  475. data/man/man8/puppet-key.8 +0 -126
  476. data/man/man8/puppet-man.8 +0 -76
  477. data/man/man8/puppet-status.8 +0 -108
  478. data/spec/integration/application/config_spec.rb +0 -74
  479. data/spec/integration/network/authconfig_spec.rb +0 -256
  480. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +0 -11
  481. data/spec/unit/application/man_spec.rb +0 -52
  482. data/spec/unit/capability_spec.rb +0 -414
  483. data/spec/unit/face/catalog_spec.rb +0 -6
  484. data/spec/unit/face/key_spec.rb +0 -9
  485. data/spec/unit/face/module/search_spec.rb +0 -231
  486. data/spec/unit/face/module_spec.rb +0 -3
  487. data/spec/unit/face/status_spec.rb +0 -9
  488. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  489. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  490. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  491. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  492. data/spec/unit/indirector/key/file_spec.rb +0 -79
  493. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  494. data/spec/unit/indirector/status/local_spec.rb +0 -10
  495. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  496. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  497. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  498. data/spec/unit/network/authstore_spec.rb +0 -422
  499. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  500. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  501. data/spec/unit/network/http/compression_spec.rb +0 -240
  502. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  503. data/spec/unit/network/http_spec.rb +0 -9
  504. data/spec/unit/network/rights_spec.rb +0 -439
  505. data/spec/unit/parser/environment_compiler_spec.rb +0 -730
  506. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  507. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  508. data/spec/unit/rest/route_spec.rb +0 -132
  509. data/spec/unit/ssl/host_spec.rb +0 -650
  510. data/spec/unit/ssl/key_spec.rb +0 -173
  511. data/spec/unit/ssl/validator_spec.rb +0 -278
  512. data/spec/unit/status_spec.rb +0 -45
  513. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -1,88 +0,0 @@
1
- require 'puppet'
2
- require 'puppet/util/warnings'
3
-
4
- module Puppet::Util
5
- module Connection
6
- extend Puppet::Util::Warnings
7
-
8
- # The logic for server and port is kind of gross. In summary:
9
- # IF an endpoint-specific setting is requested AND that setting has been set by the user
10
- # Use that setting.
11
- # The defaults for these settings are the "normal" server/serverport settings, so
12
- # when they are unset we instead want to "fall back" to the failover-selected
13
- # host/port pair.
14
- # ELSE IF we have a failover-selected host/port
15
- # Use what the failover logic came up with
16
- # ELSE IF the server_list setting is in use
17
- # Use the first entry - failover hasn't happened yet, but that
18
- # setting is still authoritative
19
- # ELSE
20
- # Go for the legacy server/serverport settings, and hope for the best
21
-
22
- # Determines which server to use based on the specified setting, taking into
23
- # account HA fallback from server_list.
24
- # @param [Symbol] setting The preferred server setting to use
25
- # @return [String] the name of the server for use in the request
26
- def self.determine_server(setting)
27
- if setting && setting != :server && Puppet.settings.set_by_config?(setting)
28
- debug_once _("Selected server from the %{setting} setting: %{server}") % {setting: setting, server: Puppet.settings[setting]}
29
- Puppet[setting]
30
- else
31
- server = Puppet.lookup(:server) do
32
- primary_server = Puppet.settings[:server_list][0]
33
- if primary_server
34
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
35
- debug_once _("Dynamically-bound server lookup failed; using first entry from the `server_list` setting: %{server}") % {server: primary_server[0]}
36
- primary_server[0]
37
- else
38
- setting ||= :server
39
- debug_once _("Dynamically-bound server lookup failed, falling back to %{setting} setting: %{server}") % {setting: setting, server: Puppet.settings[setting]}
40
- Puppet.settings[setting]
41
- end
42
- end
43
- server
44
- end
45
- end
46
-
47
- # Determines which port to use based on the specified setting, taking into
48
- # account HA fallback from server_list.
49
- # For port there's a little bit of an extra snag: setting a specific
50
- # server setting and relying on the default port for that server is
51
- # common, so we also want to check if the assocaited SERVER setting
52
- # has been set by the user. If either of those are set we ignore the
53
- # failover-selected port.
54
- # @param [Symbol] port_setting The preferred port setting to use
55
- # @param [Symbol] server_setting The server setting assoicated with this route.
56
- # @return [Integer] the port to use for use in the request
57
- def self.determine_port(port_setting, server_setting)
58
- if (port_setting && port_setting != :serverport && Puppet.settings.set_by_config?(port_setting)) ||
59
- (server_setting && server_setting != :server && Puppet.settings.set_by_config?(server_setting))
60
- debug_once _("Selected port from the %{setting} setting: %{port}") % {setting: port_setting, port: Puppet.settings[port_setting].to_i}
61
- Puppet.settings[port_setting].to_i
62
- else
63
- port = Puppet.lookup(:serverport) do
64
- primary_server = Puppet.settings[:server_list][0]
65
- if primary_server
66
- # Port might not be set, so we want to fallback in that
67
- # case. We know we don't need to use `setting` here, since
68
- # the default value of every port setting is `serverport`
69
- if primary_server[1]
70
- #TRANSLATORS 'server_list' is the name of a setting and should not be translated
71
- debug_once _("Dynamically-bound port lookup failed; using first entry from the `server_list` setting: %{port}") % {port: primary_server[1]}
72
- primary_server[1]
73
- else
74
- #TRANSLATORS 'serverport' is the name of a setting and should not be translated
75
- debug_once _("Dynamically-bound port lookup failed; falling back to `serverport` setting: %{port}") % {port: Puppet.settings[:serverport]}
76
- Puppet.settings[:serverport]
77
- end
78
- else
79
- port_setting ||= :serverport
80
- debug_once _("Dynamically-bound port lookup failed; falling back to %{setting} setting: %{port}") % {setting: port_setting, port: Puppet.settings[port_setting]}
81
- Puppet.settings[port_setting]
82
- end
83
- end
84
- port.to_i
85
- end
86
- end
87
- end
88
- end
@@ -1,83 +0,0 @@
1
- require 'puppet/ssl/openssl_loader'
2
-
3
- ##
4
- # SSL is a private module with class methods that help work with x.509
5
- # subjects and errors.
6
- #
7
- # @api private
8
- module Puppet::Util::SSL
9
-
10
- @@dn_parsers = nil
11
- @@no_name = nil
12
-
13
- # Given a DN string, parse it into an OpenSSL certificate subject. This
14
- # method will flexibly handle both OpenSSL and RFC2253 formats, as given by
15
- # nginx and Apache, respectively.
16
- #
17
- # @param [String] dn the x.509 Distinguished Name (DN) string.
18
- #
19
- # @return [OpenSSL::X509::Name] the certificate subject
20
- def self.subject_from_dn(dn)
21
- if is_possibly_valid_dn?(dn)
22
- parsers = @@dn_parsers ||= [
23
- OpenSSL::X509::Name.method(:parse_rfc2253),
24
- OpenSSL::X509::Name.method(:parse_openssl)
25
- ]
26
- parsers.each do |parser|
27
- begin
28
- return parser.call(dn)
29
- rescue OpenSSL::X509::NameError
30
- end
31
- end
32
- end
33
-
34
- @@no_name ||= OpenSSL::X509::Name.new
35
- end
36
-
37
- ##
38
- # cn_from_subject extracts the CN from the given OpenSSL certificate
39
- # subject.
40
- #
41
- # @api private
42
- #
43
- # @param [OpenSSL::X509::Name] subject the subject to extract the CN field from
44
- #
45
- # @return [String, nil] the CN, or nil if not found
46
- def self.cn_from_subject(subject)
47
- if subject.respond_to? :to_a
48
- (subject.to_a.assoc('CN') || [])[1]
49
- end
50
- end
51
-
52
- def self.is_possibly_valid_dn?(dn)
53
- dn =~ /=/
54
- end
55
-
56
- ##
57
- # Extract and format meaningful error messages from OpenSSL::OpenSSLErrors
58
- # and a Validator. Re-raises the error if unknown.
59
- #
60
- # @api private
61
- #
62
- # @param [OpenSSL::OpenSSLError] error An error thrown during creating a
63
- # connection
64
- # @param [Puppet::SSL::DefaultValidator] verifier A Validator who may have
65
- # invalidated the connection
66
- # @param [String] host The DNS name of the other end of the SSL connection
67
- #
68
- # @raises [Puppet::Error, OpenSSL::OpenSSLError]
69
- def self.handle_connection_error(error, verifier, host)
70
- # can be nil
71
- peer_cert = verifier.peer_certs.last
72
-
73
- if error.message.include? "certificate verify failed"
74
- msg = error.message
75
- msg << ": [" + verifier.verify_errors.join('; ') + "]"
76
- raise Puppet::Error, msg, error.backtrace
77
- elsif peer_cert && !OpenSSL::SSL.verify_certificate_identity(peer_cert, host)
78
- raise Puppet::SSL::CertMismatchError.new(peer_cert, host)
79
- else
80
- raise error
81
- end
82
- end
83
- end
@@ -1,309 +0,0 @@
1
- require 'ffi'
2
- require 'puppet/util/windows/string'
3
-
4
- module Puppet::Util::Windows::APITypes
5
- module ::FFI
6
- WIN32_FALSE = 0
7
-
8
- # standard Win32 error codes
9
- ERROR_SUCCESS = 0
10
- end
11
-
12
- module ::FFI::Library
13
- # Wrapper method for attach_function + private
14
- def attach_function_private(*args)
15
- attach_function(*args)
16
- private args[0]
17
- end
18
- end
19
-
20
- class ::FFI::Pointer
21
- NULL_HANDLE = 0
22
- WCHAR_NULL = "\0\0".encode('UTF-16LE').freeze
23
-
24
- def self.from_string_to_wide_string(str, &block)
25
- str = Puppet::Util::Windows::String.wide_string(str)
26
- FFI::MemoryPointer.from_wide_string(str, &block)
27
-
28
- # ptr has already had free called, so nothing to return
29
- nil
30
- end
31
-
32
- def read_win32_bool
33
- # BOOL is always a 32-bit integer in Win32
34
- # some Win32 APIs return 1 for true, while others are non-0
35
- read_int32 != FFI::WIN32_FALSE
36
- end
37
-
38
- alias_method :read_dword, :read_uint32
39
- alias_method :read_win32_ulong, :read_uint32
40
- alias_method :read_qword, :read_uint64
41
-
42
- alias_method :read_hresult, :read_int32
43
-
44
- def read_handle
45
- type_size == 4 ? read_uint32 : read_uint64
46
- end
47
-
48
- alias_method :read_wchar, :read_uint16
49
- alias_method :read_word, :read_uint16
50
- alias_method :read_array_of_wchar, :read_array_of_uint16
51
-
52
- def read_wide_string(char_length, dst_encoding = Encoding::UTF_8, strip = false, encode_options = {})
53
- # char_length is number of wide chars (typically excluding NULLs), *not* bytes
54
- str = get_bytes(0, char_length * 2).force_encoding('UTF-16LE')
55
-
56
- if strip
57
- i = str.index(WCHAR_NULL)
58
- str = str[0, i] if i
59
- end
60
-
61
- str.encode(dst_encoding, str.encoding, encode_options)
62
- rescue EncodingError => e
63
- Puppet.debug { "Unable to convert value #{str.nil? ? 'nil' : str.dump} to encoding #{dst_encoding} due to #{e.inspect}" }
64
- raise
65
- end
66
-
67
- # @param max_char_length [Integer] Maximum number of wide chars to return (typically excluding NULLs), *not* bytes
68
- # @param null_terminator [Symbol] Number of number of null wchar characters, *not* bytes, that determine the end of the string
69
- # null_terminator = :single_null, then the terminating sequence is two bytes of zero. This is UNIT16 = 0
70
- # null_terminator = :double_null, then the terminating sequence is four bytes of zero. This is UNIT32 = 0
71
- # @param encode_options [Hash] Accepts the same option hash that may be passed to String#encode in Ruby
72
- def read_arbitrary_wide_string_up_to(max_char_length = 512, null_terminator = :single_null, encode_options = {})
73
- idx = case null_terminator
74
- when :single_null
75
- # find index of wide null between 0 and max (exclusive)
76
- (0...max_char_length).find do |i|
77
- get_uint16(i * 2) == 0
78
- end
79
- when :double_null
80
- # find index of double-wide null between 0 and max - 1 (exclusive)
81
- (0...max_char_length - 1).find do |i|
82
- get_uint32(i * 2) == 0
83
- end
84
- else
85
- raise _("Unable to read wide strings with %{null_terminator} terminal nulls") % { null_terminator: null_terminator }
86
- end
87
-
88
- read_wide_string(idx || max_char_length, Encoding::UTF_8, false, encode_options)
89
- end
90
-
91
- def read_win32_local_pointer(&block)
92
- ptr = read_pointer
93
- begin
94
- yield ptr
95
- ensure
96
- if !ptr.null? && FFI::WIN32::LocalFree(ptr.address) != FFI::Pointer::NULL_HANDLE
97
- Puppet.debug "LocalFree memory leak"
98
- end
99
- end
100
-
101
- # ptr has already had LocalFree called, so nothing to return
102
- nil
103
- end
104
-
105
- def read_com_memory_pointer(&block)
106
- ptr = read_pointer
107
- begin
108
- yield ptr
109
- ensure
110
- FFI::WIN32::CoTaskMemFree(ptr) unless ptr.null?
111
- end
112
-
113
- # ptr has already had CoTaskMemFree called, so nothing to return
114
- nil
115
- end
116
-
117
- alias_method :write_dword, :write_uint32
118
- alias_method :write_word, :write_uint16
119
- end
120
-
121
- class FFI::MemoryPointer
122
- # Return a MemoryPointer that points to wide string. This is analogous to the
123
- # FFI::MemoryPointer.from_string method.
124
- def self.from_wide_string(wstr)
125
- ptr = FFI::MemoryPointer.new(:uchar, wstr.bytesize + 2)
126
- ptr.put_array_of_uchar(0, wstr.bytes.to_a)
127
- ptr.put_uint16(wstr.bytesize, 0)
128
-
129
- yield ptr if block_given?
130
-
131
- ptr
132
- end
133
- end
134
-
135
- # FFI Types
136
- # https://github.com/ffi/ffi/wiki/Types
137
-
138
- # Windows - Common Data Types
139
- # https://msdn.microsoft.com/en-us/library/cc230309.aspx
140
-
141
- # Windows Data Types
142
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx
143
-
144
- FFI.typedef :uint16, :word
145
- FFI.typedef :uint32, :dword
146
- # uintptr_t is defined in an FFI conf as platform specific, either
147
- # ulong_long on x64 or just ulong on x86
148
- FFI.typedef :uintptr_t, :handle
149
- FFI.typedef :uintptr_t, :hwnd
150
-
151
- # buffer_inout is similar to pointer (platform specific), but optimized for buffers
152
- FFI.typedef :buffer_inout, :lpwstr
153
- # buffer_in is similar to pointer (platform specific), but optimized for CONST read only buffers
154
- FFI.typedef :buffer_in, :lpcwstr
155
- FFI.typedef :buffer_in, :lpcolestr
156
-
157
- # string is also similar to pointer, but should be used for const char *
158
- # NOTE that this is not wide, useful only for A suffixed functions
159
- FFI.typedef :string, :lpcstr
160
-
161
- # pointer in FFI is platform specific
162
- # NOTE: for API calls with reserved lpvoid parameters, pass a FFI::Pointer::NULL
163
- FFI.typedef :pointer, :lpcvoid
164
- FFI.typedef :pointer, :lpvoid
165
- FFI.typedef :pointer, :lpword
166
- FFI.typedef :pointer, :lpbyte
167
- FFI.typedef :pointer, :lpdword
168
- FFI.typedef :pointer, :pdword
169
- FFI.typedef :pointer, :phandle
170
- FFI.typedef :pointer, :ulong_ptr
171
- FFI.typedef :pointer, :pbool
172
- FFI.typedef :pointer, :lpunknown
173
-
174
- # any time LONG / ULONG is in a win32 API definition DO NOT USE platform specific width
175
- # which is what FFI uses by default
176
- # instead create new aliases for these very special cases
177
- # NOTE: not a good idea to redefine FFI :ulong since other typedefs may rely on it
178
- FFI.typedef :uint32, :win32_ulong
179
- FFI.typedef :int32, :win32_long
180
- # FFI bool can be only 1 byte at times,
181
- # Win32 BOOL is a signed int, and is always 4 bytes, even on x64
182
- # https://blogs.msdn.com/b/oldnewthing/archive/2011/03/28/10146459.aspx
183
- FFI.typedef :int32, :win32_bool
184
-
185
- # BOOLEAN (unlike BOOL) is a BYTE - typedef unsigned char BYTE;
186
- FFI.typedef :uchar, :boolean
187
-
188
- # Same as a LONG, a 32-bit signed integer
189
- FFI.typedef :int32, :hresult
190
-
191
- # NOTE: FFI already defines (u)short as a 16-bit (un)signed like this:
192
- # FFI.typedef :uint16, :ushort
193
- # FFI.typedef :int16, :short
194
-
195
- # 8 bits per byte
196
- FFI.typedef :uchar, :byte
197
- FFI.typedef :uint16, :wchar
198
-
199
- # Definitions for data types used in LSA structures and functions
200
- # https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/
201
- # https://docs.microsoft.com/sr-latn-rs/windows/win32/secmgmt/management-data-types
202
- FFI.typedef :pointer, :pwstr
203
- FFI.typedef :pointer, :pulong
204
- FFI.typedef :pointer, :lsa_handle
205
- FFI.typedef :pointer, :plsa_handle
206
- FFI.typedef :pointer, :psid
207
- FFI.typedef :pointer, :pvoid
208
- FFI.typedef :pointer, :plsa_unicode_string
209
- FFI.typedef :pointer, :plsa_object_attributes
210
- FFI.typedef :uint32, :ntstatus
211
- FFI.typedef :dword, :access_mask
212
-
213
- module ::FFI::WIN32
214
- extend ::FFI::Library
215
-
216
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa373931(v=vs.85).aspx
217
- # typedef struct _GUID {
218
- # DWORD Data1;
219
- # WORD Data2;
220
- # WORD Data3;
221
- # BYTE Data4[8];
222
- # } GUID;
223
- class GUID < FFI::Struct
224
- layout :Data1, :dword,
225
- :Data2, :word,
226
- :Data3, :word,
227
- :Data4, [:byte, 8]
228
-
229
- def self.[](s)
230
- raise _('Bad GUID format.') unless s =~ /^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/i
231
-
232
- new.tap do |guid|
233
- guid[:Data1] = s[0, 8].to_i(16)
234
- guid[:Data2] = s[9, 4].to_i(16)
235
- guid[:Data3] = s[14, 4].to_i(16)
236
- guid[:Data4][0] = s[19, 2].to_i(16)
237
- guid[:Data4][1] = s[21, 2].to_i(16)
238
- s[24, 12].split('').each_slice(2).with_index do |a, i|
239
- guid[:Data4][i + 2] = a.join('').to_i(16)
240
- end
241
- end
242
- end
243
-
244
- def ==(other) Windows.memcmp(other, self, size) == 0 end
245
- end
246
-
247
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724950(v=vs.85).aspx
248
- # typedef struct _SYSTEMTIME {
249
- # WORD wYear;
250
- # WORD wMonth;
251
- # WORD wDayOfWeek;
252
- # WORD wDay;
253
- # WORD wHour;
254
- # WORD wMinute;
255
- # WORD wSecond;
256
- # WORD wMilliseconds;
257
- # } SYSTEMTIME, *PSYSTEMTIME;
258
- class SYSTEMTIME < FFI::Struct
259
- layout :wYear, :word,
260
- :wMonth, :word,
261
- :wDayOfWeek, :word,
262
- :wDay, :word,
263
- :wHour, :word,
264
- :wMinute, :word,
265
- :wSecond, :word,
266
- :wMilliseconds, :word
267
-
268
- def to_local_time
269
- Time.local(self[:wYear], self[:wMonth], self[:wDay],
270
- self[:wHour], self[:wMinute], self[:wSecond], self[:wMilliseconds] * 1000)
271
- end
272
- end
273
-
274
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
275
- # Contains a 64-bit value representing the number of 100-nanosecond
276
- # intervals since January 1, 1601 (UTC).
277
- # typedef struct _FILETIME {
278
- # DWORD dwLowDateTime;
279
- # DWORD dwHighDateTime;
280
- # } FILETIME, *PFILETIME;
281
- class FILETIME < FFI::Struct
282
- layout :dwLowDateTime, :dword,
283
- :dwHighDateTime, :dword
284
- end
285
-
286
- ffi_convention :stdcall
287
-
288
- # https://msdn.microsoft.com/en-us/library/windows/desktop/aa366730(v=vs.85).aspx
289
- # HLOCAL WINAPI LocalFree(
290
- # _In_ HLOCAL hMem
291
- # );
292
- ffi_lib :kernel32
293
- attach_function :LocalFree, [:handle], :handle
294
-
295
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms724211(v=vs.85).aspx
296
- # BOOL WINAPI CloseHandle(
297
- # _In_ HANDLE hObject
298
- # );
299
- ffi_lib :kernel32
300
- attach_function_private :CloseHandle, [:handle], :win32_bool
301
-
302
- # https://msdn.microsoft.com/en-us/library/windows/desktop/ms680722(v=vs.85).aspx
303
- # void CoTaskMemFree(
304
- # _In_opt_ LPVOID pv
305
- # );
306
- ffi_lib :ole32
307
- attach_function :CoTaskMemFree, [:lpvoid], :void
308
- end
309
- end