puppet 0.18.4 → 0.22.4

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 (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -0,0 +1,113 @@
1
+ # Support for modules
2
+ class Puppet::Module
3
+
4
+ TEMPLATES = "templates"
5
+ FILES = "files"
6
+ MANIFESTS = "manifests"
7
+
8
+ # Return an array of paths by splitting the +modulepath+ config
9
+ # parameter. Only consider paths that are absolute and existing
10
+ # directories
11
+ def self.modulepath
12
+ dirs = Puppet[:modulepath].split(":")
13
+ if ENV["PUPPETLIB"]
14
+ dirs = ENV["PUPPETLIB"].split(":") + dirs
15
+ end
16
+ dirs.select do |p|
17
+ p =~ /^#{File::SEPARATOR}/ && File::directory?(p)
18
+ end
19
+ end
20
+
21
+ # Find and return the +module+ that +path+ belongs to. If +path+ is
22
+ # absolute, or if there is no module whose name is the first component
23
+ # of +path+, return +nil+
24
+ def self.find(path)
25
+ if path =~ %r/^#{File::SEPARATOR}/
26
+ return nil
27
+ end
28
+
29
+ modname, rest = path.split(File::SEPARATOR, 2)
30
+ return nil if modname.nil? || modname.empty?
31
+
32
+ modpath = modulepath.collect { |p|
33
+ File::join(p, modname)
34
+ }.find { |f| File::directory?(f) }
35
+ return nil unless modpath
36
+
37
+ return self.new(modname, modpath)
38
+ end
39
+
40
+ # Instance methods
41
+
42
+ # Find the concrete file denoted by +file+. If +file+ is absolute,
43
+ # return it directly. Otherwise try to find it as a template in a
44
+ # module. If that fails, return it relative to the +templatedir+ config
45
+ # param.
46
+ # In all cases, an absolute path is returned, which does not
47
+ # necessarily refer to an existing file
48
+ def self.find_template(file)
49
+ if file =~ /^#{File::SEPARATOR}/
50
+ return file
51
+ end
52
+
53
+ mod = find(file)
54
+ if mod
55
+ return mod.template(file)
56
+ else
57
+ return File.join(Puppet[:templatedir], file)
58
+ end
59
+ end
60
+
61
+ # Return a list of manifests (as absolute filenames) that match +pat+
62
+ # with the current directory set to +cwd+. If the first component of
63
+ # +pat+ does not contain any wildcards and is an existing module, return
64
+ # a list of manifests in that module matching the rest of +pat+
65
+ # Otherwise, try to find manifests matching +pat+ relative to +cwd+
66
+ def self.find_manifests(pat, cwd = nil)
67
+ cwd ||= Dir.getwd
68
+ mod = find(pat)
69
+ if mod
70
+ return mod.manifests(pat)
71
+ else
72
+ abspat = File::expand_path(pat, cwd)
73
+ files = Dir.glob(abspat).reject { |f| FileTest.directory?(f) }
74
+ if files.size == 0
75
+ files = Dir.glob(abspat + ".pp").reject { |f| FileTest.directory?(f) }
76
+ end
77
+ return files
78
+ end
79
+ end
80
+
81
+ attr_reader :name, :path
82
+ def initialize(name, path)
83
+ @name = name
84
+ @path = path
85
+ end
86
+
87
+ def strip(file)
88
+ n, rest = file.split(File::SEPARATOR, 2)
89
+ rest = nil if rest && rest.empty?
90
+ return rest
91
+ end
92
+
93
+ def template(file)
94
+ return File::join(path, TEMPLATES, strip(file))
95
+ end
96
+
97
+ def files
98
+ return File::join(path, FILES)
99
+ end
100
+
101
+ def manifests(pat)
102
+ rest = strip(pat)
103
+ rest ||= "init.pp"
104
+ p = File::join(path, MANIFESTS, rest)
105
+ files = Dir.glob(p)
106
+ if files.size == 0
107
+ files = Dir.glob(p + ".pp")
108
+ end
109
+ return files
110
+ end
111
+
112
+ private :initialize
113
+ end
@@ -0,0 +1,168 @@
1
+ require 'puppet/util/loadedfile'
2
+ require 'puppet/network/rights'
3
+
4
+ module Puppet
5
+ class ConfigurationError < Puppet::Error; end
6
+ class Network::AuthConfig < Puppet::Util::LoadedFile
7
+
8
+ def self.main
9
+ unless defined? @main
10
+ @main = self.new()
11
+ end
12
+ @main
13
+ end
14
+
15
+ # Just proxy the setting methods to our rights stuff
16
+ [:allow, :deny].each do |method|
17
+ define_method(method) do |*args|
18
+ @rights.send(method, *args)
19
+ end
20
+ end
21
+
22
+ # Here we add a little bit of semantics. They can set auth on a whole
23
+ # namespace or on just a single method in the namespace.
24
+ def allowed?(request)
25
+ name = request.call.intern
26
+ namespace = request.handler.intern
27
+ method = request.method.intern
28
+
29
+ read()
30
+
31
+ if @rights.include?(name)
32
+ return @rights[name].allowed?(request.name, request.ip)
33
+ elsif @rights.include?(namespace)
34
+ return @rights[namespace].allowed?(request.name, request.ip)
35
+ else
36
+ return false
37
+ end
38
+ end
39
+
40
+ # Does the file exist? Puppetmasterd does not require it, but
41
+ # puppetd does.
42
+ def exists?
43
+ FileTest.exists?(@file)
44
+ end
45
+
46
+ def initialize(file = nil, parsenow = true)
47
+ @file ||= Puppet[:authconfig]
48
+
49
+ unless @file
50
+ raise Puppet::DevError, "No authconfig file defined"
51
+ end
52
+ return unless self.exists?
53
+ super(@file)
54
+ @rights = Puppet::Network::Rights.new
55
+ @configstamp = @configstatted = nil
56
+ @configtimeout = 60
57
+
58
+ if parsenow
59
+ read()
60
+ end
61
+ end
62
+
63
+ # Read the configuration file.
64
+ def read
65
+ return unless FileTest.exists?(@file)
66
+
67
+ if @configstamp
68
+ if @configtimeout and @configstatted
69
+ if Time.now - @configstatted > @configtimeout
70
+ @configstatted = Time.now
71
+ tmp = File.stat(@file).ctime
72
+
73
+ if tmp == @configstamp
74
+ return
75
+ else
76
+ Puppet.notice "%s vs %s" % [tmp, @configstamp]
77
+ end
78
+ else
79
+ return
80
+ end
81
+ else
82
+ Puppet.notice "%s and %s" % [@configtimeout, @configstatted]
83
+ end
84
+ end
85
+
86
+ parse()
87
+
88
+ @configstamp = File.stat(@file).ctime
89
+ @configstatted = Time.now
90
+ end
91
+
92
+ private
93
+
94
+ def parse
95
+ newrights = Puppet::Network::Rights.new
96
+ begin
97
+ File.open(@file) { |f|
98
+ right = nil
99
+ count = 1
100
+ f.each { |line|
101
+ case line
102
+ when /^\s*#/: next # skip comments
103
+ when /^\s*$/: next # skip blank lines
104
+ when /\[([\w.]+)\]/: # "namespace" or "namespace.method"
105
+ name = $1
106
+ if newrights.include?(name)
107
+ raise FileServerError, "%s is already set at %s" %
108
+ [newrights[name], name]
109
+ end
110
+ newrights.newright(name)
111
+ right = newrights[name]
112
+ when /^\s*(\w+)\s+(.+)$/:
113
+ var = $1
114
+ value = $2
115
+ case var
116
+ when "allow":
117
+ value.split(/\s*,\s*/).each { |val|
118
+ begin
119
+ right.info "allowing %s access" % val
120
+ right.allow(val)
121
+ rescue AuthStoreError => detail
122
+ raise ConfigurationError, "%s at line %s of %s" %
123
+ [detail.to_s, count, @config]
124
+ end
125
+ }
126
+ when "deny":
127
+ value.split(/\s*,\s*/).each { |val|
128
+ begin
129
+ right.info "denying %s access" % val
130
+ right.deny(val)
131
+ rescue AuthStoreError => detail
132
+ raise ConfigurationError, "%s at line %s of %s" %
133
+ [detail.to_s, count, @config]
134
+ end
135
+ }
136
+ else
137
+ raise ConfigurationError,
138
+ "Invalid argument '%s' at line %s" % [var, count]
139
+ end
140
+ else
141
+ raise ConfigurationError, "Invalid line %s: %s" % [count, line]
142
+ end
143
+ count += 1
144
+ }
145
+ }
146
+ rescue Errno::EACCES => detail
147
+ Puppet.err "Configuration error: Cannot read %s; cannot serve" % @file
148
+ #raise Puppet::Error, "Cannot read %s" % @config
149
+ rescue Errno::ENOENT => detail
150
+ Puppet.err "Configuration error: '%s' does not exit; cannot serve" %
151
+ @file
152
+ #raise Puppet::Error, "%s does not exit" % @config
153
+ #rescue FileServerError => detail
154
+ # Puppet.err "FileServer error: %s" % detail
155
+ end
156
+
157
+ # Verify each of the rights are valid.
158
+ # We let the check raise an error, so that it can raise an error
159
+ # pointing to the specific problem.
160
+ newrights.each { |name, right|
161
+ right.valid?
162
+ }
163
+ @rights = newrights
164
+ end
165
+ end
166
+ end
167
+
168
+ # $Id: authconfig.rb 2345 2007-03-22 15:40:28Z luke $
@@ -0,0 +1,84 @@
1
+ require 'puppet/network/client_request'
2
+ require 'puppet/network/authconfig'
3
+
4
+ module Puppet::Network
5
+ # Most of our subclassing is just so that we can get
6
+ # access to information from the request object, like
7
+ # the client name and IP address.
8
+ class InvalidClientRequest < Puppet::Error; end
9
+ module Authorization
10
+ # Create our config object if necessary. This works even if
11
+ # there's no configuration file.
12
+ def authconfig
13
+ unless defined? @authconfig
14
+ @authconfig = Puppet::Network::AuthConfig.main()
15
+ end
16
+
17
+ @authconfig
18
+ end
19
+
20
+ # Verify that our client has access. We allow untrusted access to
21
+ # puppetca methods but no others.
22
+ def authorized?(request)
23
+ msg = "%s client %s access to %s" %
24
+ [request.authenticated? ? "authenticated" : "unauthenticated",
25
+ request, request.call]
26
+
27
+ if request.authenticated?
28
+ if authconfig.exists?
29
+ if authconfig.allowed?(request)
30
+ Puppet.debug "Allowing " + msg
31
+ return true
32
+ else
33
+ Puppet.notice "Denying " + msg
34
+ return false
35
+ end
36
+ else
37
+ # This is a hack way of seeing if we're a config master.
38
+ if Puppet[:name] == "puppetmasterd"
39
+ Puppet.debug "Allowing " + msg
40
+ return true
41
+ else
42
+ Puppet.notice "Denying " + msg
43
+ return false
44
+ end
45
+ end
46
+ else
47
+ if request.handler == "puppetca"
48
+ Puppet.notice "Allowing " + msg
49
+ else
50
+ Puppet.notice "Denying " + msg
51
+ return false
52
+ end
53
+ end
54
+ end
55
+
56
+ # Is this functionality available?
57
+ def available?(request)
58
+ if handler_loaded?(request.handler)
59
+ return true
60
+ else
61
+ Puppet.warning "Client %s requested unavailable functionality %s" %
62
+ [request, request.handler]
63
+ return false
64
+ end
65
+ end
66
+
67
+ # Make sure that this method is available and authorized.
68
+ def verify(request)
69
+ unless available?(request)
70
+ raise InvalidClientRequest.new(
71
+ "Functionality %s not available" % request.handler
72
+ )
73
+ end
74
+ unless authorized?(request)
75
+ raise InvalidClientRequest.new(
76
+ "Host %s not authorized to call %s" %
77
+ [request, request.call]
78
+ )
79
+ end
80
+ end
81
+ end
82
+ end
83
+
84
+ # $Id: authorization.rb 2259 2007-03-06 19:03:05Z luke $
@@ -0,0 +1,293 @@
1
+ # standard module for determining whether a given hostname or IP has access to
2
+ # the requested resource
3
+
4
+ require 'ipaddr'
5
+ require 'puppet/util/logging'
6
+
7
+ module Puppet
8
+ class AuthStoreError < Puppet::Error; end
9
+ class AuthorizationError < Puppet::Error; end
10
+
11
+ class Network::AuthStore
12
+ include Puppet::Util::Logging
13
+
14
+ # Mark a given pattern as allowed.
15
+ def allow(pattern)
16
+ # a simple way to allow anyone at all to connect
17
+ if pattern == "*"
18
+ @globalallow = true
19
+ else
20
+ store(:allow, pattern)
21
+ end
22
+
23
+ return nil
24
+ end
25
+
26
+ # Is a given combination of name and ip address allowed? If either input
27
+ # is non-nil, then both inputs must be provided. If neither input
28
+ # is provided, then the authstore is considered local and defaults to "true".
29
+ def allowed?(name, ip)
30
+ if name or ip
31
+ # This is probably unnecessary, and can cause some weirdnesses in
32
+ # cases where we're operating over localhost but don't have a real
33
+ # IP defined.
34
+ unless name and ip
35
+ raise Puppet::DevError, "Name and IP must be passed to 'allowed?'"
36
+ end
37
+ # else, we're networked and such
38
+ else
39
+ # we're local
40
+ return true
41
+ end
42
+
43
+ # yay insecure overrides
44
+ if globalallow?
45
+ return true
46
+ end
47
+
48
+ if decl = @declarations.find { |d| d.match?(name, ip) }
49
+ return decl.result
50
+ end
51
+
52
+ self.info "defaulting to no access for %s" % name
53
+ return false
54
+ end
55
+
56
+ # Deny a given pattern.
57
+ def deny(pattern)
58
+ store(:deny, pattern)
59
+ end
60
+
61
+ # Is global allow enabled?
62
+ def globalallow?
63
+ @globalallow
64
+ end
65
+
66
+ def initialize
67
+ @globalallow = nil
68
+ @declarations = []
69
+ end
70
+
71
+ private
72
+
73
+ # Store the results of a pattern into our hash. Basically just
74
+ # converts the pattern and sticks it into the hash.
75
+ def store(type, pattern)
76
+ @declarations << Declaration.new(type, pattern)
77
+ @declarations.sort!
78
+
79
+ return nil
80
+ end
81
+
82
+ # A single declaration. Stores the info for a given declaration,
83
+ # provides the methods for determining whether a declaration matches,
84
+ # and handles sorting the declarations appropriately.
85
+ class Declaration
86
+ include Puppet::Util
87
+ include Comparable
88
+
89
+ # The type of declaration: either :allow or :deny
90
+ attr_reader :type
91
+
92
+ # The name: :ip or :domain
93
+ attr_accessor :name
94
+
95
+ # The pattern we're matching against. Can be an IPAddr instance,
96
+ # or an array of strings, resulting from reversing a hostname
97
+ # or domain name.
98
+ attr_reader :pattern
99
+
100
+ # The length. Only used for iprange and domain.
101
+ attr_accessor :length
102
+
103
+ # Sort the declarations specially.
104
+ def <=>(other)
105
+ # Sort first based on whether the matches are exact.
106
+ if r = compare(exact?, other.exact?)
107
+ return r
108
+ end
109
+
110
+ # Then by type
111
+ if r = compare(self.ip?, other.ip?)
112
+ return r
113
+ end
114
+
115
+ # Next sort based on length
116
+ unless self.length == other.length
117
+ # Longer names/ips should go first, because they're more
118
+ # specific.
119
+ return other.length <=> self.length
120
+ end
121
+
122
+ # Then sort deny before allow
123
+ if r = compare(self.deny?, other.deny?)
124
+ return r
125
+ end
126
+
127
+ # We've already sorted by name and length, so all that's left
128
+ # is the pattern
129
+ if ip?
130
+ return self.pattern.to_s <=> other.pattern.to_s
131
+ else
132
+ return self.pattern <=> other.pattern
133
+ end
134
+ end
135
+
136
+ def deny?
137
+ self.type == :deny
138
+ end
139
+
140
+ # Are we an exact match?
141
+ def exact?
142
+ self.length.nil?
143
+ end
144
+
145
+ def initialize(type, pattern)
146
+ self.type = type
147
+ self.pattern = pattern
148
+ end
149
+
150
+ # Are we an IP type?
151
+ def ip?
152
+ self.name == :ip
153
+ end
154
+
155
+ # Does this declaration match the name/ip combo?
156
+ def match?(name, ip)
157
+ if self.ip?
158
+ return pattern.include?(IPAddr.new(ip))
159
+ else
160
+ return matchname?(name)
161
+ end
162
+ end
163
+
164
+ # Set the pattern appropriately. Also sets the name and length.
165
+ def pattern=(pattern)
166
+ parse(pattern)
167
+ @orig = pattern
168
+ end
169
+
170
+ # Mapping a type of statement into a return value.
171
+ def result
172
+ case @type
173
+ when :allow: true
174
+ else
175
+ false
176
+ end
177
+ end
178
+
179
+ def to_s
180
+ "%s: %s" % [self.type, self.pattern]
181
+ end
182
+
183
+ # Set the declaration type. Either :allow or :deny.
184
+ def type=(type)
185
+ type = symbolize(type)
186
+ unless [:allow, :deny].include?(type)
187
+ raise ArgumentError, "Invalid declaration type %s" % type
188
+ end
189
+ @type = type
190
+ end
191
+
192
+ private
193
+
194
+ # Returns nil if both values are true or both are false, returns
195
+ # -1 if the first is true, and 1 if the second is true. Used
196
+ # in the <=> operator.
197
+ def compare(me, them)
198
+ unless me and them
199
+ if me
200
+ return -1
201
+ elsif them
202
+ return 1
203
+ else
204
+ return false
205
+ end
206
+ end
207
+ return nil
208
+ end
209
+
210
+ # Does the name match our pattern?
211
+ def matchname?(name)
212
+ name = munge_name(name)
213
+ return true if self.pattern == name
214
+
215
+ # If it's an exact match, then just return false, since the
216
+ # exact didn't match.
217
+ if exact?
218
+ return false
219
+ end
220
+
221
+ # If every field in the pattern matches, then we consider it
222
+ # a match.
223
+ pattern.zip(name) do |p,n|
224
+ unless p == n
225
+ return false
226
+ end
227
+ end
228
+
229
+ return true
230
+ end
231
+
232
+ # Convert the name to a common pattern.
233
+ def munge_name(name)
234
+ name.downcase.split(".").reverse
235
+ end
236
+
237
+ # Parse our input pattern and figure out what kind of allowal
238
+ # statement it is. The output of this is used for later matching.
239
+ def parse(value)
240
+ case value
241
+ when /^(\d+\.){1,3}\*$/: # an ip address with a '*' at the end
242
+ @name = :ip
243
+ match = $1
244
+ match.sub!(".", '')
245
+ ary = value.split(".")
246
+
247
+ mask = case ary.index(match)
248
+ when 0: 8
249
+ when 1: 16
250
+ when 2: 24
251
+ else
252
+ raise AuthStoreError, "Invalid IP pattern %s" % value
253
+ end
254
+
255
+ @length = mask
256
+
257
+ ary.pop
258
+ while ary.length < 4
259
+ ary.push("0")
260
+ end
261
+
262
+ begin
263
+ @pattern = IPAddr.new(ary.join(".") + "/" + mask.to_s)
264
+ rescue ArgumentError => detail
265
+ raise AuthStoreError, "Invalid IP address pattern %s" % value
266
+ end
267
+ when /^([a-zA-Z][-\w]*\.)+[-\w]+$/: # a full hostname
268
+ @name = :domain
269
+ @pattern = munge_name(value)
270
+ when /^\*(\.([a-zA-Z][-\w]*)){1,}$/: # *.domain.com
271
+ @name = :domain
272
+ @pattern = munge_name(value)
273
+ @pattern.pop # take off the '*'
274
+ @length = @pattern.length
275
+ else
276
+ # Else, use the IPAddr class to determine if we've got a
277
+ # valid IP address.
278
+ if value =~ /\/(\d+)$/
279
+ @length = Integer($1)
280
+ end
281
+ begin
282
+ @pattern = IPAddr.new(value)
283
+ rescue ArgumentError => detail
284
+ raise AuthStoreError, "Invalid pattern %s" % value
285
+ end
286
+ @name = :ip
287
+ end
288
+ end
289
+ end
290
+ end
291
+ end
292
+
293
+ # $Id: authstore.rb 2262 2007-03-08 00:16:53Z luke $