puppet 3.3.2 → 3.4.0.rc1

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 (589) hide show
  1. data/CONTRIBUTING.md +22 -0
  2. data/Gemfile +11 -2
  3. data/README.md +13 -17
  4. data/README_DEVELOPER.md +1 -1
  5. data/Rakefile +1 -1
  6. data/examples/hiera/README.md +4 -4
  7. data/ext/debian/puppetmaster.init +1 -0
  8. data/ext/debian/rules +2 -5
  9. data/ext/nagios/check_puppet.rb +7 -7
  10. data/ext/osx/file_mapping.yaml +1 -1
  11. data/ext/osx/preflight.erb +34 -19
  12. data/ext/rack/{files/config.ru → config.ru} +0 -0
  13. data/ext/rack/{files/apache2.conf → example-passenger-vhost.conf} +6 -0
  14. data/ext/redhat/puppet.spec.erb +20 -2
  15. data/ext/systemd/{puppetagent.service → puppet.service} +0 -0
  16. data/lib/hiera_puppet.rb +2 -2
  17. data/lib/puppet/agent.rb +1 -6
  18. data/lib/puppet/application.rb +15 -2
  19. data/lib/puppet/application/agent.rb +2 -7
  20. data/lib/puppet/application/apply.rb +8 -13
  21. data/lib/puppet/application/cert.rb +47 -7
  22. data/lib/puppet/application/device.rb +1 -6
  23. data/lib/puppet/application/face_base.rb +1 -1
  24. data/lib/puppet/application/filebucket.rb +1 -1
  25. data/lib/puppet/application/inspect.rb +3 -12
  26. data/lib/puppet/application/master.rb +1 -6
  27. data/lib/puppet/application/queue.rb +1 -6
  28. data/lib/puppet/application/resource.rb +2 -6
  29. data/lib/puppet/coercion.rb +11 -0
  30. data/lib/puppet/configurer.rb +5 -3
  31. data/lib/puppet/configurer/downloader.rb +3 -1
  32. data/lib/puppet/configurer/plugin_handler.rb +10 -0
  33. data/lib/puppet/confine.rb +80 -0
  34. data/lib/puppet/{provider/confine → confine}/exists.rb +3 -3
  35. data/lib/puppet/{provider/confine → confine}/false.rb +2 -2
  36. data/lib/puppet/{provider/confine → confine}/feature.rb +2 -2
  37. data/lib/puppet/{provider/confine → confine}/true.rb +2 -2
  38. data/lib/puppet/{provider/confine → confine}/variable.rb +2 -2
  39. data/lib/puppet/{provider/confine_collection.rb → confine_collection.rb} +4 -4
  40. data/lib/puppet/{provider/confiner.rb → confiner.rb} +4 -4
  41. data/lib/puppet/daemon.rb +2 -6
  42. data/lib/puppet/data_binding.rb +2 -30
  43. data/lib/puppet/defaults.rb +283 -174
  44. data/lib/puppet/error.rb +1 -0
  45. data/lib/puppet/external/nagios.rb +0 -2
  46. data/lib/puppet/external/nagios/base.rb +4 -3
  47. data/lib/puppet/external/nagios/grammar.ry +173 -112
  48. data/lib/puppet/external/nagios/parser.rb +233 -184
  49. data/lib/puppet/face/file/store.rb +1 -1
  50. data/lib/puppet/face/module/generate.rb +5 -7
  51. data/lib/puppet/face/parser.rb +12 -2
  52. data/lib/puppet/face/plugin.rb +6 -0
  53. data/lib/puppet/feature/base.rb +16 -0
  54. data/lib/puppet/feature/external_facts.rb +5 -0
  55. data/lib/puppet/feature/libuser.rb +1 -1
  56. data/lib/puppet/feature/msgpack.rb +1 -0
  57. data/lib/puppet/feature/rails.rb +2 -2
  58. data/lib/puppet/file_bucket/dipper.rb +8 -6
  59. data/lib/puppet/file_bucket/file.rb +17 -1
  60. data/lib/puppet/file_serving/base.rb +21 -10
  61. data/lib/puppet/file_serving/configuration.rb +5 -7
  62. data/lib/puppet/file_serving/configuration/parser.rb +1 -1
  63. data/lib/puppet/file_serving/content.rb +1 -1
  64. data/lib/puppet/file_serving/fileset.rb +3 -3
  65. data/lib/puppet/file_serving/metadata.rb +22 -18
  66. data/lib/puppet/file_serving/mount/file.rb +1 -1
  67. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  68. data/lib/puppet/file_system.rb +3 -0
  69. data/lib/puppet/file_system/file.rb +261 -0
  70. data/lib/puppet/file_system/file18.rb +5 -0
  71. data/lib/puppet/file_system/file19.rb +5 -0
  72. data/lib/puppet/file_system/file19windows.rb +113 -0
  73. data/lib/puppet/file_system/memory_file.rb +31 -0
  74. data/lib/puppet/file_system/tempfile.rb +20 -0
  75. data/lib/puppet/indirector/active_record.rb +1 -0
  76. data/lib/puppet/indirector/catalog/compiler.rb +28 -0
  77. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  78. data/lib/puppet/indirector/data_binding/hiera.rb +46 -2
  79. data/lib/puppet/indirector/direct_file_server.rb +2 -2
  80. data/lib/puppet/indirector/facts/facter.rb +25 -0
  81. data/lib/puppet/indirector/file_bucket_file/file.rb +60 -74
  82. data/lib/puppet/indirector/indirection.rb +5 -1
  83. data/lib/puppet/indirector/json.rb +1 -1
  84. data/lib/puppet/indirector/key/ca.rb +4 -0
  85. data/lib/puppet/indirector/key/file.rb +7 -3
  86. data/lib/puppet/indirector/key/memory.rb +6 -0
  87. data/lib/puppet/indirector/node/write_only_yaml.rb +2 -2
  88. data/lib/puppet/indirector/request.rb +17 -11
  89. data/lib/puppet/indirector/resource/ral.rb +5 -0
  90. data/lib/puppet/indirector/resource/rest.rb +1 -0
  91. data/lib/puppet/indirector/resource/store_configs.rb +4 -0
  92. data/lib/puppet/indirector/rest.rb +2 -1
  93. data/lib/puppet/indirector/ssl_file.rb +7 -7
  94. data/lib/puppet/indirector/terminus.rb +4 -0
  95. data/lib/puppet/indirector/yaml.rb +3 -3
  96. data/lib/puppet/interface/documentation.rb +4 -11
  97. data/lib/puppet/module.rb +19 -6
  98. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  99. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  100. data/lib/puppet/module_tool/checksums.rb +1 -1
  101. data/lib/puppet/module_tool/dependency.rb +7 -3
  102. data/lib/puppet/module_tool/metadata.rb +6 -2
  103. data/lib/puppet/module_tool/tar.rb +2 -1
  104. data/lib/puppet/module_tool/tar/gnu.rb +6 -2
  105. data/lib/puppet/module_tool/tar/mini.rb +2 -0
  106. data/lib/puppet/module_tool/tar/solaris.rb +2 -5
  107. data/lib/puppet/network/authconfig.rb +0 -2
  108. data/lib/puppet/network/authentication.rb +1 -1
  109. data/lib/puppet/network/authstore.rb +6 -7
  110. data/lib/puppet/network/format.rb +2 -3
  111. data/lib/puppet/network/format_handler.rb +16 -11
  112. data/lib/puppet/network/format_support.rb +14 -0
  113. data/lib/puppet/network/formats.rb +26 -0
  114. data/lib/puppet/network/http/connection.rb +8 -41
  115. data/lib/puppet/network/http/handler.rb +28 -32
  116. data/lib/puppet/network/http/webrick.rb +15 -22
  117. data/lib/puppet/network/http_pool.rb +43 -9
  118. data/lib/puppet/network/rights.rb +0 -0
  119. data/lib/puppet/node.rb +24 -8
  120. data/lib/puppet/node/environment.rb +18 -20
  121. data/lib/puppet/node/facts.rb +23 -6
  122. data/lib/puppet/parameter.rb +15 -2
  123. data/lib/puppet/parameter/boolean.rb +5 -0
  124. data/lib/puppet/parameter/value_collection.rb +6 -4
  125. data/lib/puppet/parser/ast/resourceparam.rb +2 -1
  126. data/lib/puppet/parser/compiler.rb +25 -9
  127. data/lib/puppet/parser/files.rb +1 -1
  128. data/lib/puppet/parser/functions.rb +12 -21
  129. data/lib/puppet/parser/functions/collect.rb +6 -35
  130. data/lib/puppet/parser/functions/contain.rb +26 -0
  131. data/lib/puppet/parser/functions/create_resources.rb +5 -0
  132. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  133. data/lib/puppet/parser/functions/file.rb +1 -1
  134. data/lib/puppet/parser/functions/{reject.rb → filter.rb} +13 -12
  135. data/lib/puppet/parser/functions/fqdn_rand.rb +13 -5
  136. data/lib/puppet/parser/functions/include.rb +18 -1
  137. data/lib/puppet/parser/functions/map.rb +44 -0
  138. data/lib/puppet/parser/functions/select.rb +6 -38
  139. data/lib/puppet/parser/lexer.rb +1 -1
  140. data/lib/puppet/parser/parser_support.rb +1 -1
  141. data/lib/puppet/parser/resource.rb +6 -45
  142. data/lib/puppet/parser/scope.rb +33 -2
  143. data/lib/puppet/parser/type_loader.rb +4 -60
  144. data/lib/puppet/pops/binder/bindings_loader.rb +1 -1
  145. data/lib/puppet/pops/binder/config/binder_config.rb +3 -3
  146. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +1 -1
  148. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +2 -2
  149. data/lib/puppet/pops/issues.rb +4 -0
  150. data/lib/puppet/pops/model/ast_transformer.rb +4 -1
  151. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  152. data/lib/puppet/pops/parser/egrammar.ra +5 -24
  153. data/lib/puppet/pops/parser/eparser.rb +859 -902
  154. data/lib/puppet/pops/parser/lexer.rb +48 -30
  155. data/lib/puppet/pops/parser/parser_support.rb +1 -1
  156. data/lib/puppet/pops/patterns.rb +4 -4
  157. data/lib/puppet/pops/utils.rb +1 -1
  158. data/lib/puppet/pops/validation/checker3_1.rb +25 -20
  159. data/lib/puppet/provider.rb +23 -6
  160. data/lib/puppet/provider/aixobject.rb +0 -0
  161. data/lib/puppet/provider/augeas/augeas.rb +21 -5
  162. data/lib/puppet/provider/confine.rb +5 -79
  163. data/lib/puppet/provider/cron/crontab.rb +0 -0
  164. data/lib/puppet/provider/exec.rb +9 -7
  165. data/lib/puppet/provider/exec/posix.rb +10 -1
  166. data/lib/puppet/provider/exec/windows.rb +1 -1
  167. data/lib/puppet/provider/file/posix.rb +1 -0
  168. data/lib/puppet/provider/file/windows.rb +16 -5
  169. data/lib/puppet/provider/group/aix.rb +0 -0
  170. data/lib/puppet/provider/group/windows_adsi.rb +33 -1
  171. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  172. data/lib/puppet/provider/mailalias/aliases.rb +0 -0
  173. data/lib/puppet/provider/maillist/mailman.rb +0 -0
  174. data/lib/puppet/provider/mount/parsed.rb +0 -0
  175. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  176. data/lib/puppet/provider/package/appdmg.rb +1 -1
  177. data/lib/puppet/provider/package/apple.rb +1 -1
  178. data/lib/puppet/provider/package/apt.rb +1 -1
  179. data/lib/puppet/provider/package/aptitude.rb +0 -0
  180. data/lib/puppet/provider/package/blastwave.rb +1 -1
  181. data/lib/puppet/provider/package/dpkg.rb +1 -1
  182. data/lib/puppet/provider/package/fink.rb +1 -1
  183. data/lib/puppet/provider/package/freebsd.rb +0 -0
  184. data/lib/puppet/provider/package/gem.rb +0 -0
  185. data/lib/puppet/provider/package/macports.rb +0 -0
  186. data/lib/puppet/provider/package/msi.rb +4 -10
  187. data/lib/puppet/provider/package/nim.rb +8 -8
  188. data/lib/puppet/provider/package/openbsd.rb +1 -1
  189. data/lib/puppet/provider/package/opkg.rb +0 -0
  190. data/lib/puppet/provider/package/pacman.rb +2 -2
  191. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  192. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  193. data/lib/puppet/provider/package/ports.rb +0 -0
  194. data/lib/puppet/provider/package/rpm.rb +39 -3
  195. data/lib/puppet/provider/package/sun.rb +3 -3
  196. data/lib/puppet/provider/package/sunfreeware.rb +0 -0
  197. data/lib/puppet/provider/package/windows.rb +12 -19
  198. data/lib/puppet/provider/package/windows/package.rb +1 -1
  199. data/lib/puppet/provider/package/yum.rb +2 -2
  200. data/lib/puppet/provider/parsedfile.rb +0 -0
  201. data/lib/puppet/provider/port/parsed.rb +0 -0
  202. data/lib/puppet/provider/service/base.rb +0 -0
  203. data/lib/puppet/provider/service/bsd.rb +3 -3
  204. data/lib/puppet/provider/service/daemontools.rb +8 -8
  205. data/lib/puppet/provider/service/debian.rb +0 -0
  206. data/lib/puppet/provider/service/freebsd.rb +3 -3
  207. data/lib/puppet/provider/service/init.rb +5 -4
  208. data/lib/puppet/provider/service/launchd.rb +35 -24
  209. data/lib/puppet/provider/service/openbsd.rb +23 -0
  210. data/lib/puppet/provider/service/redhat.rb +0 -0
  211. data/lib/puppet/provider/service/runit.rb +3 -3
  212. data/lib/puppet/provider/service/smf.rb +0 -0
  213. data/lib/puppet/provider/service/src.rb +0 -0
  214. data/lib/puppet/provider/service/systemd.rb +0 -0
  215. data/lib/puppet/provider/service/upstart.rb +3 -3
  216. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  217. data/lib/puppet/provider/sshkey/parsed.rb +0 -0
  218. data/lib/puppet/provider/user/aix.rb +0 -0
  219. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  220. data/lib/puppet/provider/user/useradd.rb +1 -1
  221. data/lib/puppet/provider/zone/solaris.rb +1 -1
  222. data/lib/puppet/rails/benchmark.rb +1 -1
  223. data/lib/puppet/reference/configuration.rb +1 -2
  224. data/lib/puppet/reference/indirection.rb +12 -14
  225. data/lib/puppet/relationship.rb +7 -4
  226. data/lib/puppet/reports.rb +2 -2
  227. data/lib/puppet/reports/rrdgraph.rb +1 -1
  228. data/lib/puppet/reports/store.rb +3 -3
  229. data/lib/puppet/reports/tagmail.rb +2 -2
  230. data/lib/puppet/resource.rb +66 -8
  231. data/lib/puppet/resource/catalog.rb +18 -25
  232. data/lib/puppet/resource/status.rb +10 -4
  233. data/lib/puppet/run.rb +6 -2
  234. data/lib/puppet/settings.rb +39 -119
  235. data/lib/puppet/settings/base_setting.rb +8 -9
  236. data/lib/puppet/settings/directory_setting.rb +8 -0
  237. data/lib/puppet/settings/file_setting.rb +35 -1
  238. data/lib/puppet/settings/priority_setting.rb +42 -0
  239. data/lib/puppet/ssl.rb +4 -0
  240. data/lib/puppet/ssl/certificate.rb +18 -0
  241. data/lib/puppet/ssl/certificate_authority.rb +101 -72
  242. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  243. data/lib/puppet/ssl/certificate_authority/interface.rb +21 -17
  244. data/lib/puppet/ssl/certificate_factory.rb +38 -12
  245. data/lib/puppet/ssl/certificate_request.rb +201 -47
  246. data/lib/puppet/ssl/certificate_request_attributes.rb +34 -0
  247. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -2
  248. data/lib/puppet/ssl/host.rb +21 -10
  249. data/lib/puppet/ssl/inventory.rb +6 -10
  250. data/lib/puppet/ssl/key.rb +1 -1
  251. data/lib/puppet/ssl/oids.rb +78 -0
  252. data/lib/puppet/ssl/validator.rb +41 -97
  253. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  254. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  255. data/lib/puppet/status.rb +4 -0
  256. data/lib/puppet/test/test_helper.rb +5 -0
  257. data/lib/puppet/transaction.rb +13 -0
  258. data/lib/puppet/transaction/event.rb +8 -3
  259. data/lib/puppet/transaction/report.rb +6 -2
  260. data/lib/puppet/transaction/resource_harness.rb +173 -115
  261. data/lib/puppet/type.rb +30 -13
  262. data/lib/puppet/type/augeas.rb +12 -46
  263. data/lib/puppet/type/component.rb +1 -7
  264. data/lib/puppet/type/cron.rb +0 -0
  265. data/lib/puppet/type/exec.rb +13 -1
  266. data/lib/puppet/type/file.rb +19 -10
  267. data/lib/puppet/type/file/checksum.rb +0 -0
  268. data/lib/puppet/type/file/content.rb +3 -0
  269. data/lib/puppet/type/file/ensure.rb +33 -15
  270. data/lib/puppet/type/file/group.rb +0 -0
  271. data/lib/puppet/type/file/mode.rb +6 -2
  272. data/lib/puppet/type/file/owner.rb +0 -0
  273. data/lib/puppet/type/file/source.rb +65 -14
  274. data/lib/puppet/type/file/target.rb +6 -6
  275. data/lib/puppet/type/file/type.rb +0 -0
  276. data/lib/puppet/type/filebucket.rb +0 -0
  277. data/lib/puppet/type/group.rb +18 -0
  278. data/lib/puppet/type/host.rb +0 -0
  279. data/lib/puppet/type/k5login.rb +4 -4
  280. data/lib/puppet/type/mailalias.rb +0 -0
  281. data/lib/puppet/type/maillist.rb +0 -0
  282. data/lib/puppet/type/mount.rb +15 -1
  283. data/lib/puppet/type/package.rb +7 -1
  284. data/lib/puppet/type/port.rb +0 -0
  285. data/lib/puppet/type/schedule.rb +9 -4
  286. data/lib/puppet/type/service.rb +1 -1
  287. data/lib/puppet/type/sshkey.rb +0 -0
  288. data/lib/puppet/type/tidy.rb +1 -1
  289. data/lib/puppet/type/user.rb +3 -0
  290. data/lib/puppet/type/yumrepo.rb +8 -6
  291. data/lib/puppet/type/zpool.rb +0 -0
  292. data/lib/puppet/util.rb +4 -31
  293. data/lib/puppet/util/adsi.rb +73 -17
  294. data/lib/puppet/util/autoload.rb +3 -3
  295. data/lib/puppet/util/backups.rb +4 -4
  296. data/lib/puppet/util/cacher.rb +7 -13
  297. data/lib/puppet/util/checksums.rb +2 -2
  298. data/lib/puppet/util/classgen.rb +3 -1
  299. data/lib/puppet/util/colors.rb +1 -0
  300. data/lib/puppet/util/command_line.rb +5 -0
  301. data/lib/puppet/util/docs.rb +33 -27
  302. data/lib/puppet/util/execution.rb +42 -18
  303. data/lib/puppet/util/filetype.rb +3 -3
  304. data/lib/puppet/util/instance_loader.rb +2 -2
  305. data/lib/puppet/util/instrumentation.rb +23 -42
  306. data/lib/puppet/util/instrumentation/data.rb +11 -4
  307. data/lib/puppet/util/instrumentation/indirection_probe.rb +11 -4
  308. data/lib/puppet/util/instrumentation/instrumentable.rb +7 -14
  309. data/lib/puppet/util/instrumentation/listener.rb +15 -8
  310. data/lib/puppet/util/instrumentation/listeners/log.rb +4 -10
  311. data/lib/puppet/util/instrumentation/listeners/performance.rb +8 -14
  312. data/lib/puppet/util/limits.rb +12 -0
  313. data/lib/puppet/util/lockfile.rb +2 -2
  314. data/lib/puppet/util/log.rb +14 -6
  315. data/lib/puppet/util/log/destinations.rb +23 -1
  316. data/lib/puppet/util/metric.rb +9 -3
  317. data/lib/puppet/util/monkey_patches.rb +7 -2
  318. data/lib/puppet/util/network_device/config.rb +1 -1
  319. data/lib/puppet/util/plugins.rb +1 -1
  320. data/lib/puppet/util/posix.rb +0 -0
  321. data/lib/puppet/util/profiler.rb +7 -2
  322. data/lib/puppet/util/provider_features.rb +2 -2
  323. data/lib/puppet/util/rdoc.rb +28 -30
  324. data/lib/puppet/util/rdoc/code_objects.rb +75 -25
  325. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  326. data/lib/puppet/util/rdoc/parser.rb +12 -487
  327. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  328. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  329. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  330. data/lib/puppet/util/reference.rb +1 -1
  331. data/lib/puppet/util/resource_template.rb +1 -1
  332. data/lib/puppet/util/selinux.rb +1 -1
  333. data/lib/puppet/util/storage.rb +2 -2
  334. data/lib/puppet/util/suidmanager.rb +1 -1
  335. data/lib/puppet/util/tag_set.rb +29 -0
  336. data/lib/puppet/util/tagging.rb +8 -24
  337. data/lib/puppet/util/watched_file.rb +1 -1
  338. data/lib/puppet/util/watcher.rb +1 -1
  339. data/lib/puppet/util/windows.rb +3 -0
  340. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  341. data/lib/puppet/util/windows/access_control_list.rb +106 -0
  342. data/lib/puppet/util/windows/file.rb +213 -0
  343. data/lib/puppet/util/windows/process.rb +199 -0
  344. data/lib/puppet/util/windows/root_certs.rb +52 -37
  345. data/lib/puppet/util/windows/security.rb +270 -245
  346. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  347. data/lib/puppet/util/windows/sid.rb +26 -4
  348. data/lib/puppet/version.rb +2 -2
  349. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +1 -1
  350. data/spec/fixtures/unit/indirector/{hiera → data_binding/hiera}/global.yaml +0 -0
  351. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  352. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  353. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  354. data/spec/integration/application/apply_spec.rb +1 -1
  355. data/spec/integration/application/doc_spec.rb +1 -1
  356. data/spec/integration/configurer_spec.rb +4 -2
  357. data/spec/integration/data_binding.rb +100 -0
  358. data/spec/integration/indirector/catalog/compiler_spec.rb +16 -13
  359. data/spec/integration/indirector/direct_file_server_spec.rb +3 -5
  360. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  361. data/spec/integration/node/facts_spec.rb +1 -1
  362. data/spec/integration/node_spec.rb +1 -1
  363. data/spec/integration/parser/compiler_spec.rb +90 -0
  364. data/spec/integration/parser/parser_spec.rb +2 -2
  365. data/spec/integration/provider/cron/crontab_spec.rb +3 -5
  366. data/spec/integration/resource/catalog_spec.rb +1 -1
  367. data/spec/integration/ssl/autosign_spec.rb +90 -0
  368. data/spec/integration/ssl/certificate_authority_spec.rb +62 -69
  369. data/spec/integration/ssl/certificate_revocation_list_spec.rb +1 -1
  370. data/spec/integration/ssl/host_spec.rb +1 -1
  371. data/spec/integration/transaction_spec.rb +13 -13
  372. data/spec/integration/type/exec_spec.rb +2 -2
  373. data/spec/integration/type/file_spec.rb +287 -45
  374. data/spec/integration/type/tidy_spec.rb +3 -3
  375. data/spec/integration/util/rdoc/parser_spec.rb +236 -35
  376. data/spec/integration/util/settings_spec.rb +1 -1
  377. data/spec/integration/util/windows/process_spec.rb +22 -0
  378. data/spec/integration/util/windows/security_spec.rb +316 -106
  379. data/spec/lib/matchers/containment_matchers.rb +52 -0
  380. data/spec/lib/puppet_spec/compiler.rb +6 -0
  381. data/spec/lib/puppet_spec/files.rb +20 -21
  382. data/spec/shared_behaviours/documentation_on_faces.rb +3 -3
  383. data/spec/shared_behaviours/file_server_terminus.rb +2 -2
  384. data/spec/shared_contexts/platform.rb +1 -0
  385. data/spec/spec_helper.rb +13 -1
  386. data/spec/unit/agent_spec.rb +0 -12
  387. data/spec/unit/application/agent_spec.rb +4 -4
  388. data/spec/unit/application/apply_spec.rb +18 -2
  389. data/spec/unit/application/cert_spec.rb +8 -6
  390. data/spec/unit/application/device_spec.rb +1 -1
  391. data/spec/unit/application/filebucket_spec.rb +1 -1
  392. data/spec/unit/application/inspect_spec.rb +1 -1
  393. data/spec/unit/application_spec.rb +24 -0
  394. data/spec/unit/configurer/downloader_spec.rb +8 -7
  395. data/spec/unit/configurer/fact_handler_spec.rb +23 -0
  396. data/spec/unit/configurer/plugin_handler_spec.rb +7 -2
  397. data/spec/unit/configurer_spec.rb +15 -5
  398. data/spec/unit/{provider/confine → confine}/exists_spec.rb +12 -12
  399. data/spec/unit/{provider/confine → confine}/false_spec.rb +9 -9
  400. data/spec/unit/{provider/confine → confine}/feature_spec.rb +10 -10
  401. data/spec/unit/{provider/confine → confine}/true_spec.rb +7 -7
  402. data/spec/unit/{provider/confine → confine}/variable_spec.rb +16 -16
  403. data/spec/unit/{provider/confine_collection_spec.rb → confine_collection_spec.rb} +30 -30
  404. data/spec/unit/{provider/confine_spec.rb → confine_spec.rb} +11 -11
  405. data/spec/unit/{provider/confiner_spec.rb → confiner_spec.rb} +4 -4
  406. data/spec/unit/face/parser_spec.rb +54 -0
  407. data/spec/unit/file_bucket/dipper_spec.rb +2 -2
  408. data/spec/unit/file_serving/base_spec.rb +32 -9
  409. data/spec/unit/file_serving/configuration_spec.rb +7 -7
  410. data/spec/unit/file_serving/content_spec.rb +12 -7
  411. data/spec/unit/file_serving/fileset_spec.rb +57 -27
  412. data/spec/unit/file_serving/metadata_spec.rb +74 -12
  413. data/spec/unit/file_serving/mount/file_spec.rb +10 -10
  414. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  415. data/spec/unit/file_system/file_spec.rb +486 -0
  416. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  417. data/spec/unit/graph/relationship_graph_spec.rb +0 -6
  418. data/spec/unit/hiera_puppet_spec.rb +2 -2
  419. data/spec/unit/indirector/catalog/compiler_spec.rb +15 -19
  420. data/spec/unit/indirector/certificate_status/file_spec.rb +30 -40
  421. data/spec/unit/indirector/data_binding/hiera_spec.rb +95 -2
  422. data/spec/unit/indirector/direct_file_server_spec.rb +6 -6
  423. data/spec/unit/indirector/facts/facter_spec.rb +33 -0
  424. data/spec/unit/indirector/file_bucket_file/file_spec.rb +61 -52
  425. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  426. data/spec/unit/indirector/file_server_spec.rb +4 -4
  427. data/spec/unit/indirector/json_spec.rb +4 -4
  428. data/spec/unit/indirector/key/file_spec.rb +13 -14
  429. data/spec/unit/indirector/resource/ral_spec.rb +7 -0
  430. data/spec/unit/indirector/resource/store_configs_spec.rb +11 -0
  431. data/spec/unit/indirector/rest_spec.rb +7 -3
  432. data/spec/unit/indirector/ssl_file_spec.rb +14 -17
  433. data/spec/unit/indirector/yaml_spec.rb +4 -4
  434. data/spec/unit/module_spec.rb +43 -15
  435. data/spec/unit/module_tool/tar/gnu_spec.rb +2 -2
  436. data/spec/unit/module_tool/tar/solaris_spec.rb +2 -2
  437. data/spec/unit/module_tool/tar_spec.rb +45 -0
  438. data/spec/unit/network/authconfig_spec.rb +2 -1
  439. data/spec/unit/network/authentication_spec.rb +2 -2
  440. data/spec/unit/network/format_handler_spec.rb +2 -2
  441. data/spec/unit/network/formats_spec.rb +24 -0
  442. data/spec/unit/network/http/connection_spec.rb +76 -199
  443. data/spec/unit/network/http/handler_spec.rb +33 -34
  444. data/spec/unit/network/http_pool_spec.rb +8 -5
  445. data/spec/unit/node/environment_spec.rb +76 -90
  446. data/spec/unit/node/facts_spec.rb +20 -3
  447. data/spec/unit/node_spec.rb +43 -0
  448. data/spec/unit/parameter/boolean_spec.rb +22 -12
  449. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  450. data/spec/unit/parser/compiler_spec.rb +103 -35
  451. data/spec/unit/parser/eparser_adapter_spec.rb +12 -12
  452. data/spec/unit/parser/files_spec.rb +11 -11
  453. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  454. data/spec/unit/parser/functions/create_resources_spec.rb +13 -5
  455. data/spec/unit/parser/functions/generate_spec.rb +1 -1
  456. data/spec/unit/parser/functions_spec.rb +2 -2
  457. data/spec/unit/parser/lexer_spec.rb +1 -1
  458. data/spec/unit/parser/methods/each_spec.rb +1 -1
  459. data/spec/unit/parser/methods/{select_spec.rb → filter_spec.rb} +11 -11
  460. data/spec/unit/parser/methods/map_spec.rb +95 -0
  461. data/spec/unit/parser/methods/reduce_spec.rb +12 -11
  462. data/spec/unit/parser/methods/shared.rb +5 -5
  463. data/spec/unit/parser/methods/slice_spec.rb +13 -13
  464. data/spec/unit/parser/parser_spec.rb +1 -1
  465. data/spec/unit/parser/resource/param_spec.rb +44 -0
  466. data/spec/unit/parser/resource_spec.rb +16 -15
  467. data/spec/unit/pops/model/ast_transformer_spec.rb +18 -4
  468. data/spec/unit/pops/parser/lexer_spec.rb +22 -5
  469. data/spec/unit/pops/parser/parse_calls_spec.rb +5 -5
  470. data/spec/unit/pops/transformer/transform_calls_spec.rb +6 -6
  471. data/spec/unit/pops/transformer/transform_containers_spec.rb +2 -2
  472. data/spec/unit/pops/validator/validator_spec.rb +31 -0
  473. data/spec/unit/provider/augeas/augeas_spec.rb +57 -2
  474. data/spec/unit/provider/exec/posix_spec.rb +8 -3
  475. data/spec/unit/provider/file/posix_spec.rb +2 -2
  476. data/spec/unit/provider/group/windows_adsi_spec.rb +70 -3
  477. data/spec/unit/provider/nameservice/directoryservice_spec.rb +3 -3
  478. data/spec/unit/provider/package/apt_spec.rb +1 -1
  479. data/spec/unit/provider/package/msi_spec.rb +15 -42
  480. data/spec/unit/provider/package/openbsd_spec.rb +3 -3
  481. data/spec/unit/provider/package/rpm_spec.rb +56 -13
  482. data/spec/unit/provider/package/windows_spec.rb +15 -19
  483. data/spec/unit/provider/service/base_spec.rb +1 -1
  484. data/spec/unit/provider/service/daemontools_spec.rb +18 -8
  485. data/spec/unit/provider/service/freebsd_spec.rb +3 -3
  486. data/spec/unit/provider/service/gentoo_spec.rb +5 -2
  487. data/spec/unit/provider/service/init_spec.rb +17 -17
  488. data/spec/unit/provider/service/launchd_spec.rb +76 -23
  489. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  490. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  491. data/spec/unit/provider/service/runit_spec.rb +12 -5
  492. data/spec/unit/provider/service/upstart_spec.rb +4 -4
  493. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +5 -5
  494. data/spec/unit/provider/user/directoryservice_spec.rb +4 -4
  495. data/spec/unit/provider/zone/solaris_spec.rb +1 -1
  496. data/spec/unit/provider_spec.rb +2 -2
  497. data/spec/unit/reports/http_spec.rb +19 -34
  498. data/spec/unit/reports/store_spec.rb +2 -2
  499. data/spec/unit/resource/catalog_spec.rb +81 -11
  500. data/spec/unit/resource/status_spec.rb +11 -1
  501. data/spec/unit/resource/type_spec.rb +30 -1
  502. data/spec/unit/resource_spec.rb +40 -4
  503. data/spec/unit/settings/file_setting_spec.rb +2 -2
  504. data/spec/unit/settings/path_setting_spec.rb +2 -2
  505. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  506. data/spec/unit/settings_spec.rb +16 -31
  507. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  508. data/spec/unit/ssl/certificate_authority_spec.rb +129 -134
  509. data/spec/unit/ssl/certificate_factory_spec.rb +18 -0
  510. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  511. data/spec/unit/ssl/certificate_request_spec.rb +103 -0
  512. data/spec/unit/ssl/certificate_spec.rb +31 -18
  513. data/spec/unit/ssl/host_spec.rb +34 -8
  514. data/spec/unit/ssl/inventory_spec.rb +27 -62
  515. data/spec/unit/ssl/key_spec.rb +4 -4
  516. data/spec/unit/ssl/oids_spec.rb +48 -0
  517. data/spec/unit/ssl/validator_spec.rb +49 -6
  518. data/spec/unit/status_spec.rb +9 -0
  519. data/spec/unit/transaction/event_spec.rb +1 -9
  520. data/spec/unit/transaction/report_spec.rb +20 -1
  521. data/spec/unit/transaction/resource_harness_spec.rb +60 -210
  522. data/spec/unit/transaction_spec.rb +54 -8
  523. data/spec/unit/type/component_spec.rb +2 -2
  524. data/spec/unit/type/exec_spec.rb +14 -7
  525. data/spec/unit/type/file/content_spec.rb +13 -2
  526. data/spec/unit/type/file/ctime_spec.rb +1 -1
  527. data/spec/unit/type/file/mode_spec.rb +48 -2
  528. data/spec/unit/type/file/mtime_spec.rb +1 -1
  529. data/spec/unit/type/file/source_spec.rb +177 -7
  530. data/spec/unit/type/file_spec.rb +63 -71
  531. data/spec/unit/type/group_spec.rb +20 -0
  532. data/spec/unit/type/k5login_spec.rb +3 -3
  533. data/spec/unit/type/mount_spec.rb +53 -0
  534. data/spec/unit/type/nagios_spec.rb +216 -0
  535. data/spec/unit/type/package_spec.rb +7 -1
  536. data/spec/unit/type/schedule_spec.rb +6 -0
  537. data/spec/unit/type/service_spec.rb +3 -3
  538. data/spec/unit/type/tidy_spec.rb +14 -14
  539. data/spec/unit/type/user_spec.rb +9 -0
  540. data/spec/unit/type_spec.rb +86 -4
  541. data/spec/unit/util/adsi_spec.rb +120 -12
  542. data/spec/unit/util/autoload_spec.rb +14 -14
  543. data/spec/unit/util/backups_spec.rb +29 -21
  544. data/spec/unit/util/checksums_spec.rb +2 -1
  545. data/spec/unit/util/command_line_spec.rb +41 -0
  546. data/spec/unit/util/docs_spec.rb +91 -0
  547. data/spec/unit/util/execution_spec.rb +26 -2
  548. data/spec/unit/util/filetype_spec.rb +7 -7
  549. data/spec/unit/util/lockfile_spec.rb +2 -2
  550. data/spec/unit/util/log/destinations_spec.rb +32 -0
  551. data/spec/unit/util/monkey_patches_spec.rb +41 -0
  552. data/spec/unit/util/pidlock_spec.rb +6 -6
  553. data/spec/unit/util/rdoc/parser_spec.rb +15 -13
  554. data/spec/unit/util/rdoc_spec.rb +18 -24
  555. data/spec/unit/util/resource_template_spec.rb +3 -3
  556. data/spec/unit/util/selinux_spec.rb +4 -2
  557. data/spec/unit/util/storage_spec.rb +4 -4
  558. data/spec/unit/util/suidmanager_spec.rb +7 -0
  559. data/spec/unit/util/tag_set_spec.rb +46 -0
  560. data/spec/unit/util/tagging_spec.rb +82 -45
  561. data/spec/unit/util/watcher_spec.rb +4 -1
  562. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  563. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  564. data/spec/unit/util/windows/root_certs_spec.rb +10 -8
  565. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  566. data/spec/unit/util/windows/sid_spec.rb +69 -0
  567. data/spec/unit/util_spec.rb +7 -7
  568. data/tasks/ci.rake +17 -36
  569. metadata +2811 -2746
  570. checksums.yaml +0 -7
  571. data/examples/mac_automount.pp +0 -16
  572. data/examples/mcx_dock_absent.pp +0 -4
  573. data/examples/mcx_dock_default.pp +0 -118
  574. data/examples/mcx_dock_full.pp +0 -125
  575. data/examples/mcx_dock_invalid.pp +0 -9
  576. data/examples/mcx_nogroup.pp +0 -118
  577. data/examples/mcx_notexists_absent.pp +0 -4
  578. data/ext/rack/README +0 -58
  579. data/ext/rack/manifest.pp +0 -59
  580. data/lib/puppet/external/lock.rb +0 -63
  581. data/lib/puppet/indirector/hiera.rb +0 -39
  582. data/lib/puppet/parser/functions/foreach.rb +0 -95
  583. data/spec/integration/network/server/webrick_spec.rb +0 -76
  584. data/spec/integration/parser/functions_spec.rb +0 -16
  585. data/spec/unit/indirector/hiera_spec.rb +0 -154
  586. data/spec/unit/parser/methods/collect_spec.rb +0 -153
  587. data/spec/unit/parser/methods/foreach_spec.rb +0 -91
  588. data/spec/unit/parser/methods/reject_spec.rb +0 -73
  589. data/spec/unit/resource/resource_type.json +0 -34
@@ -32,7 +32,7 @@ module Puppet
32
32
 
33
33
  # Create our link.
34
34
  def mklink
35
- raise Puppet::Error, "Cannot symlink on Microsoft Windows" if Puppet.features.microsoft_windows?
35
+ raise Puppet::Error, "Cannot symlink on this platform version" if !provider.feature?(:manages_symlinks)
36
36
 
37
37
  target = self.should
38
38
 
@@ -40,17 +40,17 @@ module Puppet
40
40
  # it doesn't determine what's removed.
41
41
  @resource.remove_existing(target)
42
42
 
43
- raise Puppet::Error, "Could not remove existing file" if FileTest.exists?(@resource[:path])
43
+ raise Puppet::Error, "Could not remove existing file" if Puppet::FileSystem::File.exist?(@resource[:path])
44
44
 
45
45
  Dir.chdir(File.dirname(@resource[:path])) do
46
46
  Puppet::Util::SUIDManager.asuser(@resource.asuser) do
47
47
  mode = @resource.should(:mode)
48
48
  if mode
49
49
  Puppet::Util.withumask(000) do
50
- File.symlink(target, @resource[:path])
50
+ Puppet::FileSystem::File.new(target).symlink(@resource[:path])
51
51
  end
52
52
  else
53
- File.symlink(target, @resource[:path])
53
+ Puppet::FileSystem::File.new(target).symlink(@resource[:path])
54
54
  end
55
55
  end
56
56
 
@@ -63,7 +63,7 @@ module Puppet
63
63
  def insync?(currentvalue)
64
64
  if [:nochange, :notlink].include?(self.should) or @resource.recurse?
65
65
  return true
66
- elsif ! @resource.replace? and File.exists?(@resource[:path])
66
+ elsif ! @resource.replace? and Puppet::FileSystem::File.exist?(@resource[:path])
67
67
  return true
68
68
  else
69
69
  return super(currentvalue)
@@ -74,7 +74,7 @@ module Puppet
74
74
  def retrieve
75
75
  if stat = @resource.stat
76
76
  if stat.ftype == "link"
77
- return File.readlink(@resource[:path])
77
+ return Puppet::FileSystem::File.new(@resource[:path]).readlink
78
78
  else
79
79
  return :notlink
80
80
  end
File without changes
File without changes
@@ -87,6 +87,24 @@ module Puppet
87
87
  newvalue = newvalue.join(",")
88
88
  super(currentvalue, newvalue)
89
89
  end
90
+
91
+ def insync?(current)
92
+ if provider.respond_to?(:members_insync?)
93
+ return provider.members_insync?(current, @should)
94
+ end
95
+
96
+ super(current)
97
+ end
98
+
99
+ def is_to_s(currentvalue)
100
+ if provider.respond_to?(:members_to_s)
101
+ currentvalue = '' if currentvalue.nil?
102
+ return provider.members_to_s(currentvalue.split(','))
103
+ end
104
+
105
+ super(currentvalue)
106
+ end
107
+ alias :should_to_s :is_to_s
90
108
  end
91
109
 
92
110
  newparam(:auth_membership) do
File without changes
@@ -37,7 +37,7 @@ Puppet::Type.newtype(:k5login) do
37
37
 
38
38
  # Does this file exist?
39
39
  def exists?
40
- File.exists?(@resource[:name])
40
+ Puppet::FileSystem::File.exist?(@resource[:name])
41
41
  end
42
42
 
43
43
  # create the file
@@ -51,12 +51,12 @@ Puppet::Type.newtype(:k5login) do
51
51
 
52
52
  # remove the file
53
53
  def destroy
54
- File.unlink(@resource[:name])
54
+ Puppet::FileSystem::File.unlink(@resource[:name])
55
55
  end
56
56
 
57
57
  # Return the principals
58
58
  def principals(dummy_argument=:work_arround_for_ruby_GC_bug)
59
- if File.exists?(@resource[:name])
59
+ if Puppet::FileSystem::File.exist?(@resource[:name])
60
60
  File.readlines(@resource[:name]).collect { |line| line.chomp }
61
61
  else
62
62
  :absent
@@ -70,7 +70,7 @@ Puppet::Type.newtype(:k5login) do
70
70
 
71
71
  # Return the mode as an octal string, not as an integer
72
72
  def mode
73
- "%o" % (File.stat(@resource[:name]).mode & 007777)
73
+ "%o" % (Puppet::FileSystem::File.new(@resource[:name]).stat.mode & 007777)
74
74
  end
75
75
 
76
76
  # Set the file mode, converting from a string to an integer.
File without changes
File without changes
@@ -8,7 +8,11 @@ module Puppet
8
8
  on the value of the 'ensure' parameter.
9
9
 
10
10
  Note that if a `mount` receives an event from another resource,
11
- it will try to remount the filesystems if `ensure` is set to `mounted`."
11
+ it will try to remount the filesystems if `ensure` is set to `mounted`.
12
+
13
+ **Autorequires:** If Puppet is managing any parents of a mount resource ---
14
+ that is, other mount points higher up in the filesystem --- the child
15
+ mount will autorequire them."
12
16
 
13
17
  feature :refreshable, "The provider can remount the filesystem.",
14
18
  :methods => [:remount]
@@ -268,5 +272,15 @@ module Puppet
268
272
  return property.value
269
273
  end
270
274
  end
275
+
276
+ # Ensure that mounts higher up in the filesystem are mounted first
277
+ autorequire(:mount) do
278
+ dependencies = []
279
+ Pathname.new(@parameters[:name].value).ascend do |parent|
280
+ dependencies.unshift parent.to_s
281
+ end
282
+ dependencies[0..-2]
283
+ end
284
+
271
285
  end
272
286
  end
@@ -58,7 +58,7 @@ module Puppet
58
58
  retrieve by specifying a version number or `latest` as the ensure
59
59
  value. On packaging systems that manage configuration files separately
60
60
  from "normal" system files, you can uninstall config files by
61
- specifying `purged` as the ensure value.
61
+ specifying `purged` as the ensure value. This defaults to `installed`.
62
62
  EOT
63
63
 
64
64
  attr_accessor :latest
@@ -225,6 +225,12 @@ module Puppet
225
225
 
226
226
  "
227
227
  isnamevar
228
+
229
+ validate do |value|
230
+ if !value.is_a?(String)
231
+ raise ArgumentError, "Name must be a String not #{value.class}"
232
+ end
233
+ end
228
234
  end
229
235
 
230
236
  newparam(:source) do
File without changes
@@ -356,10 +356,10 @@ module Puppet
356
356
  of the range, not necessarily the day that it is when it matches.
357
357
  For example, consider this schedule:
358
358
 
359
- schedule { 'maintenance_window':
360
- range => '22:00 - 04:00',
361
- weekday => 'Saturday',
362
- }
359
+ schedule { 'maintenance_window':
360
+ range => '22:00 - 04:00',
361
+ weekday => 'Saturday',
362
+ }
363
363
 
364
364
  This will match at 11 PM on Saturday and 2 AM on Sunday, but not
365
365
  at 2 AM on Saturday.
@@ -418,6 +418,11 @@ module Puppet
418
418
 
419
419
  def self.mkdefaultschedules
420
420
  result = []
421
+ unless Puppet[:default_schedules]
422
+ Puppet.debug "Not creating default schedules: default_schedules is false"
423
+ return result
424
+ end
425
+
421
426
  Puppet.debug "Creating default schedules"
422
427
 
423
428
  result << self.new(
@@ -180,7 +180,7 @@ module Puppet
180
180
  automatically, usually by looking for the service in the process
181
181
  table.
182
182
 
183
- [lsb-exit-codes]: http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html"
183
+ [lsb-exit-codes]: http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html"
184
184
  end
185
185
 
186
186
  newparam(:stop) do
File without changes
@@ -312,7 +312,7 @@ Puppet::Type.newtype(:tidy) do
312
312
 
313
313
  def stat(path)
314
314
  begin
315
- ::File.lstat(path)
315
+ Puppet::FileSystem::File.new(path).lstat
316
316
  rescue Errno::ENOENT => error
317
317
  info "File does not exist"
318
318
  return nil
@@ -164,6 +164,9 @@ module Puppet
164
164
 
165
165
  newproperty(:comment) do
166
166
  desc "A description of the user. Generally the user's full name."
167
+ munge do |v|
168
+ v.respond_to?(:encode) ? v.encode(Encoding::ASCII_8BIT) : v
169
+ end
167
170
  end
168
171
 
169
172
  newproperty(:shell) do
@@ -170,7 +170,7 @@ module Puppet
170
170
  unless Puppet[:noop]
171
171
  target_mode = 0644 # FIXME: should be configurable
172
172
  inifile.each_file do |file|
173
- current_mode = ::File.stat(file).mode & 0777
173
+ current_mode = Puppet::FileSystem::File.new(file).stat.mode & 0777
174
174
  unless current_mode == target_mode
175
175
  Puppet::info "changing mode of #{file} from %03o to %03o" % [current_mode, target_mode]
176
176
  ::File.chmod(target_mode, file)
@@ -332,7 +332,7 @@ module Puppet
332
332
  end
333
333
 
334
334
  newproperty(:cost, :parent => Puppet::IniProperty) do
335
- desc "Cost of this repository.\n#{ABSENT_DOC}"
335
+ desc "Cost of this repository. #{ABSENT_DOC}"
336
336
  newvalue(:absent) { self.should = :absent }
337
337
  newvalue(%r{\d+}) { }
338
338
  end
@@ -364,28 +364,30 @@ module Puppet
364
364
 
365
365
  newproperty(:sslcacert, :parent => Puppet::IniProperty) do
366
366
  desc "Path to the directory containing the databases of the
367
- certificate authorities yum should use to verify SSL certificates.\n#{ABSENT_DOC}"
367
+ certificate authorities yum should use to verify SSL certificates.
368
+ #{ABSENT_DOC}"
368
369
  newvalue(:absent) { self.should = :absent }
369
370
  newvalue(/.*/) { }
370
371
  end
371
372
 
372
373
  newproperty(:sslverify, :parent => Puppet::IniProperty) do
373
374
  desc "Should yum verify SSL certificates/hosts at all.
374
- Possible values are 'True' or 'False'.\n#{ABSENT_DOC}"
375
+ Possible values are 'True' or 'False'.
376
+ #{ABSENT_DOC}"
375
377
  newvalue(:absent) { self.should = :absent }
376
378
  newvalue(%r(True|False)) { }
377
379
  end
378
380
 
379
381
  newproperty(:sslclientcert, :parent => Puppet::IniProperty) do
380
382
  desc "Path to the SSL client certificate yum should use to connect
381
- to repos/remote sites.\n#{ABSENT_DOC}"
383
+ to repos/remote sites. #{ABSENT_DOC}"
382
384
  newvalue(:absent) { self.should = :absent }
383
385
  newvalue(/.*/) { }
384
386
  end
385
387
 
386
388
  newproperty(:sslclientkey, :parent => Puppet::IniProperty) do
387
389
  desc "Path to the SSL client key yum should use to connect
388
- to repos/remote sites.\n#{ABSENT_DOC}"
390
+ to repos/remote sites. #{ABSENT_DOC}"
389
391
  newvalue(:absent) { self.should = :absent }
390
392
  newvalue(/.*/) { }
391
393
  end
File without changes
@@ -1,12 +1,9 @@
1
1
  # A module to collect utility functions.
2
2
 
3
3
  require 'English'
4
- require 'puppet/external/lock'
5
4
  require 'puppet/error'
6
5
  require 'puppet/util/execution_stub'
7
6
  require 'uri'
8
- require 'sync'
9
- require 'monitor'
10
7
  require 'tempfile'
11
8
  require 'pathname'
12
9
  require 'ostruct'
@@ -26,9 +23,6 @@ module Util
26
23
 
27
24
  extend Puppet::Util::SymbolicFileMode
28
25
 
29
- @@sync_objects = {}.extend MonitorMixin
30
-
31
-
32
26
  def self.activerecord_version
33
27
  if (defined?(::ActiveRecord) and defined?(::ActiveRecord::VERSION) and defined?(::ActiveRecord::VERSION::MAJOR) and defined?(::ActiveRecord::VERSION::MINOR))
34
28
  ([::ActiveRecord::VERSION::MAJOR, ::ActiveRecord::VERSION::MINOR].join('.').to_f)
@@ -67,20 +61,6 @@ module Util
67
61
  end
68
62
 
69
63
 
70
- def self.synchronize_on(x,type)
71
- sync_object,users = 0,1
72
- begin
73
- @@sync_objects.synchronize {
74
- (@@sync_objects[x] ||= [Sync.new,0])[users] += 1
75
- }
76
- @@sync_objects[x][sync_object].synchronize(type) { yield }
77
- ensure
78
- @@sync_objects.synchronize {
79
- @@sync_objects.delete(x) unless (@@sync_objects[x][users] -= 1) > 0
80
- }
81
- end
82
- end
83
-
84
64
  # Change the process to a different user
85
65
  def self.chuser
86
66
  if group = Puppet[:group]
@@ -154,7 +134,6 @@ module Util
154
134
  end
155
135
  end
156
136
 
157
-
158
137
  def benchmark(*args)
159
138
  msg = args.pop
160
139
  level = args.pop
@@ -187,6 +166,7 @@ module Util
187
166
  yield
188
167
  end
189
168
  end
169
+ module_function :benchmark
190
170
 
191
171
  # Resolve a path for an executable to the absolute path. This tries to behave
192
172
  # in the same manner as the unix `which` command and uses the `PATH`
@@ -270,7 +250,7 @@ module Util
270
250
  if Puppet.features.microsoft_windows?
271
251
  path = path.gsub(/\\/, '/')
272
252
 
273
- if unc = /^\/\/([^\/]+)(\/[^\/]+)/.match(path)
253
+ if unc = /^\/\/([^\/]+)(\/.+)/.match(path)
274
254
  params[:host] = unc[1]
275
255
  path = unc[2]
276
256
  elsif path =~ /^[a-z]:\//i
@@ -320,13 +300,6 @@ module Util
320
300
  end
321
301
  module_function :safe_posix_fork
322
302
 
323
- # Create an exclusive lock.
324
- def threadlock(resource, type = Sync::EX)
325
- Puppet::Util.synchronize_on(resource,type) { yield }
326
- end
327
-
328
- module_function :benchmark
329
-
330
303
  def memory
331
304
  unless defined?(@pmap)
332
305
  @pmap = which('pmap')
@@ -361,6 +334,7 @@ module Util
361
334
 
362
335
  # Because IO#binread is only available in 1.9
363
336
  def binread(file)
337
+ Puppet.deprecation_warning("Puppet::Util.binread is deprecated. Read the file without this method as it will be removed in a future version.")
364
338
  File.open(file, 'rb') { |f| f.read }
365
339
  end
366
340
  module_function :binread
@@ -467,7 +441,7 @@ module Util
467
441
  # This might race, but there are enough possible cases that there
468
442
  # isn't a good, solid "better" way to do this, and the next call
469
443
  # should fail in the same way anyhow.
470
- raise if have_retried or File.exist?(file)
444
+ raise if have_retried or Puppet::FileSystem::File.exist?(file)
471
445
  have_retried = true
472
446
 
473
447
  # OK, so, we can't replace a file that doesn't exist, so let us put
@@ -499,7 +473,6 @@ module Util
499
473
  end
500
474
  module_function :replace_file
501
475
 
502
-
503
476
  # Executes a block of code, wrapped with some special exception handling. Causes the ruby interpreter to
504
477
  # exit if the block throws an exception.
505
478
  #
@@ -41,6 +41,11 @@ module Puppet::Util::ADSI
41
41
  "winmgmts:{impersonationLevel=impersonate}!//#{host}/root/cimv2"
42
42
  end
43
43
 
44
+ def sid_uri(sid)
45
+ raise Puppet::Error.new( "Must use a valid SID object" ) if !sid.kind_of?(Win32::Security::SID)
46
+ "WinNT://#{sid.to_s}"
47
+ end
48
+
44
49
  def uri(resource_name, resource_type, host = '.')
45
50
  "#{computer_uri(host)}/#{resource_name},#{resource_type}"
46
51
  end
@@ -64,22 +69,40 @@ module Puppet::Util::ADSI
64
69
  extend Enumerable
65
70
 
66
71
  attr_accessor :native_user
67
- attr_reader :name
72
+ attr_reader :name, :sid
68
73
  def initialize(name, native_user = nil)
69
74
  @name = name
70
75
  @native_user = native_user
71
76
  end
72
77
 
78
+ def self.parse_name(name)
79
+ if name =~ /\//
80
+ raise Puppet::Error.new( "Value must be in DOMAIN\\user style syntax" )
81
+ end
82
+
83
+ matches = name.scan(/((.*)\\)?(.*)/)
84
+ domain = matches[0][1] || '.'
85
+ account = matches[0][2]
86
+
87
+ return account, domain
88
+ end
89
+
73
90
  def native_user
74
- @native_user ||= Puppet::Util::ADSI.connect(uri)
91
+ @native_user ||= Puppet::Util::ADSI.connect(self.class.uri(*self.class.parse_name(@name)))
92
+ end
93
+
94
+ def sid
95
+ @sid ||= Puppet::Util::Windows::Security.octet_string_to_sid_object(native_user.objectSID)
75
96
  end
76
97
 
77
98
  def self.uri(name, host = '.')
99
+ host = '.' if ['NT AUTHORITY', 'BUILTIN', Socket.gethostname].include?(host)
100
+
78
101
  Puppet::Util::ADSI.uri(name, 'user', host)
79
102
  end
80
103
 
81
104
  def uri
82
- self.class.uri(name)
105
+ self.class.uri(sid.account, sid.domain)
83
106
  end
84
107
 
85
108
  def self.logon(name, password)
@@ -131,14 +154,14 @@ module Puppet::Util::ADSI
131
154
 
132
155
  def add_to_groups(*group_names)
133
156
  group_names.each do |group_name|
134
- Puppet::Util::ADSI::Group.new(group_name).add_member(@name)
157
+ Puppet::Util::ADSI::Group.new(group_name).add_member_sids(sid)
135
158
  end
136
159
  end
137
160
  alias add_to_group add_to_groups
138
161
 
139
162
  def remove_from_groups(*group_names)
140
163
  group_names.each do |group_name|
141
- Puppet::Util::ADSI::Group.new(group_name).remove_member(@name)
164
+ Puppet::Util::ADSI::Group.new(group_name).remove_member_sids(sid)
142
165
  end
143
166
  end
144
167
  alias remove_from_group remove_from_groups
@@ -167,7 +190,7 @@ module Puppet::Util::ADSI
167
190
  end
168
191
 
169
192
  def self.exists?(name)
170
- Puppet::Util::ADSI::connectable?(User.uri(name))
193
+ Puppet::Util::ADSI::connectable?(User.uri(*User.parse_name(name)))
171
194
  end
172
195
 
173
196
  def self.delete(name)
@@ -233,20 +256,44 @@ module Puppet::Util::ADSI
233
256
  self
234
257
  end
235
258
 
236
- def add_members(*names)
237
- names.each do |name|
238
- native_group.Add(Puppet::Util::ADSI::User.uri(name, Puppet::Util::ADSI.computer_name))
259
+ def self.name_sid_hash(names)
260
+ return [] if names.nil? or names.empty?
261
+
262
+ sids = names.map do |name|
263
+ sid = Puppet::Util::Windows::Security.name_to_sid_object(name)
264
+ raise Puppet::Error.new( "Could not resolve username: #{name}" ) if !sid
265
+ [sid.to_s, sid]
239
266
  end
267
+
268
+ Hash[ sids ]
269
+ end
270
+
271
+ def add_members(*names)
272
+ Puppet.deprecation_warning('Puppet::Util::ADSI::Group#add_members is deprecated; please use Puppet::Util::ADSI::Group#add_member_sids')
273
+ sids = self.class.name_sid_hash(names)
274
+ add_member_sids(*sids.values)
240
275
  end
241
276
  alias add_member add_members
242
277
 
243
278
  def remove_members(*names)
244
- names.each do |name|
245
- native_group.Remove(Puppet::Util::ADSI::User.uri(name, Puppet::Util::ADSI.computer_name))
246
- end
279
+ Puppet.deprecation_warning('Puppet::Util::ADSI::Group#remove_members is deprecated; please use Puppet::Util::ADSI::Group#remove_member_sids')
280
+ sids = self.class.name_sid_hash(names)
281
+ remove_member_sids(*sids.values)
247
282
  end
248
283
  alias remove_member remove_members
249
284
 
285
+ def add_member_sids(*sids)
286
+ sids.each do |sid|
287
+ native_group.Add(Puppet::Util::ADSI.sid_uri(sid))
288
+ end
289
+ end
290
+
291
+ def remove_member_sids(*sids)
292
+ sids.each do |sid|
293
+ native_group.Remove(Puppet::Util::ADSI.sid_uri(sid))
294
+ end
295
+ end
296
+
250
297
  def members
251
298
  # WIN32OLE objects aren't enumerable, so no map
252
299
  members = []
@@ -254,18 +301,27 @@ module Puppet::Util::ADSI
254
301
  members
255
302
  end
256
303
 
304
+ def member_sids
305
+ sids = []
306
+ native_group.Members.each do |m|
307
+ sids << Puppet::Util::Windows::Security.octet_string_to_sid_object(m.objectSID)
308
+ end
309
+ sids
310
+ end
311
+
257
312
  def set_members(desired_members)
258
313
  return if desired_members.nil? or desired_members.empty?
259
314
 
260
- current_members = self.members
315
+ current_hash = Hash[ self.member_sids.map { |sid| [sid.to_s, sid] } ]
316
+ desired_hash = self.class.name_sid_hash(desired_members)
261
317
 
262
318
  # First we add all missing members
263
- members_to_add = desired_members - current_members
264
- add_members(*members_to_add)
319
+ members_to_add = (desired_hash.keys - current_hash.keys).map { |sid| desired_hash[sid] }
320
+ add_member_sids(*members_to_add)
265
321
 
266
322
  # Then we remove all extra members
267
- members_to_remove = current_members - desired_members
268
- remove_members(*members_to_remove)
323
+ members_to_remove = (current_hash.keys - desired_hash.keys).map { |sid| current_hash[sid] }
324
+ remove_member_sids(*members_to_remove)
269
325
  end
270
326
 
271
327
  def self.create(name)