summaryrefslogtreecommitdiffstats
path: root/lib/puppet/daemon.rb
Commit message (Collapse)AuthorAgeFilesLines
* (#6346) Move the trap calls onto Signal so they're easier to stubMatt Robinson2011-02-161-1/+1
| | | | | | | | | | | | | | | | | | | | Once you stub signal traps in tests, you can hit ctrl+c in the middle of a spec run and it will stop the run instead of puppet catching the SIGINT. I had trouble easily tracking down all the places to stub traps when the trap was being called as a private method on applications and daemons, but calling trap on Signal is equivalent since Kernel calls Signal.trap and Object mixes in Kernel to provide trap as a private method on all objects. A bigger solution would be to refactor everywhere we call trap into a method that's called consistently since right now we sprinkle SIGINT and SIGTERM trap handling over applications and daemons in inconsistent ways, returning different error codes and using different messages. I've captured this info in ticket #6345. Reviewed-by: Jacob Helwig <jacob@puppetlabs.com>
* Fix for #4955 -- Race condition & memory leak in Puppet::UtilMarkus Roberts2010-11-121-2/+2
| | | | | | | | | | | | | | The Puppet::Util.sync method was not thread safe and also leaked memory. I'm not certain, but I believe the first is ironic and the second is merely a bug. This patch addresses the problem by 1) refactoring so the sync objects are never returned (and thus no one can cache a reference to one) 2) adding reference counting 3) deleting them when they are no longer needed 4) doing the thread safty dance. It wasn't the first (or even second) solution considered, but it's the one that I was able to make work in a way that I'm convinced is correct. Its main advantage is that it puts all the tricky bits in one place.
* Start server before agentBernhard Miklautz2010-08-211-1/+1
|
* Code smell: Two space indentationMarkus Roberts2010-07-091-99/+99
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replaced 106806 occurances of ^( +)(.*$) with The ruby community almost universally (i.e. everyone but Luke, Markus, and the other eleven people who learned ruby in the 1900s) uses two-space indentation. 3 Examples: The code: end # Tell getopt which arguments are valid def test_get_getopt_args element = Setting.new :name => "foo", :desc => "anything", :settings => Puppet::Util::Settings.new assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args") becomes: end # Tell getopt which arguments are valid def test_get_getopt_args element = Setting.new :name => "foo", :desc => "anything", :settings => Puppet::Util::Settings.new assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args") The code: assert_equal(str, val) assert_instance_of(Float, result) end # Now test it with a passed object becomes: assert_equal(str, val) assert_instance_of(Float, result) end # Now test it with a passed object The code: end assert_nothing_raised do klass[:Yay] = "boo" klass["Cool"] = :yayness end becomes: end assert_nothing_raised do klass[:Yay] = "boo" klass["Cool"] = :yayness end
* Code smell: Avoid needless decorationsMarkus Roberts2010-07-091-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Replaced 704 occurances of (.*)\b([a-z_]+)\(\) with \1\2 3 Examples: The code: ctx = OpenSSL::SSL::SSLContext.new() becomes: ctx = OpenSSL::SSL::SSLContext.new The code: skip() becomes: skip The code: path = tempfile() becomes: path = tempfile * Replaced 31 occurances of ^( *)end *#.* with \1end 3 Examples: The code: becomes: The code: end # Dir.foreach becomes: end The code: end # def becomes: end
* Code smell: Line modifiers are preferred to one-line blocks.Markus Roberts2010-07-091-6/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Replaced 6 occurances of (while .*?) *do$ with The do is unneeded in the block header form and causes problems with the block-to-one-line transformation. 3 Examples: The code: while line = f.gets do becomes: while line = f.gets The code: while line = shadow.gets do becomes: while line = shadow.gets The code: while wrapper = zeros.pop do becomes: while wrapper = zeros.pop * Replaced 19 occurances of ((if|unless) .*?) *then$ with The then is unneeded in the block header form and causes problems with the block-to-one-line transformation. 3 Examples: The code: if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } then becomes: if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } The code: unless defined?(@spec_command) then becomes: unless defined?(@spec_command) The code: if c == ?\n then becomes: if c == ?\n * Replaced 758 occurances of ((?:if|unless|while|until) .*) (.*) end with The one-line form is preferable provided: * The condition is not used to assign a variable * The body line is not already modified * The resulting line is not too long 3 Examples: The code: if Puppet.features.libshadow? has_feature :manages_passwords end becomes: has_feature :manages_passwords if Puppet.features.libshadow? The code: unless (defined?(@current_pool) and @current_pool) @current_pool = process_zpool_data(get_pool_data) end becomes: @current_pool = process_zpool_data(get_pool_data) unless (defined?(@current_pool) and @current_pool) The code: if Puppet[:trace] puts detail.backtrace end becomes: puts detail.backtrace if Puppet[:trace]
* Code smell: Use string interpolationMarkus Roberts2010-07-091-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Replaced 83 occurances of (.*)" *[+] *([$@]?[\w_0-9.:]+?)(.to_s\b)?(?! *[*(%\w_0-9.:{\[]) with \1#{\2}" 3 Examples: The code: puts "PUPPET " + status + ": " + process + ", " + state becomes: puts "PUPPET " + status + ": " + process + ", #{state}" The code: puts "PUPPET " + status + ": #{process}" + ", #{state}" becomes: puts "PUPPET #{status}" + ": #{process}" + ", #{state}" The code: }.compact.join( "\n" ) + "\n" + t + "]\n" becomes: }.compact.join( "\n" ) + "\n#{t}" + "]\n" * Replaced 21 occurances of (.*)" *[+] *" with \1 3 Examples: The code: puts "PUPPET #{status}" + ": #{process}" + ", #{state}" becomes: puts "PUPPET #{status}" + ": #{process}, #{state}" The code: puts "PUPPET #{status}" + ": #{process}, #{state}" becomes: puts "PUPPET #{status}: #{process}, #{state}" The code: res = self.class.name + ": #{@name}" + "\n" becomes: res = self.class.name + ": #{@name}\n" * Don't use string concatenation to split lines unless they would be very long. Replaced 11 occurances of (.*)(['"]) *[+] *(['"])(.*) with 3 Examples: The code: o.define_head "The check_puppet Nagios plug-in checks that specified " + "Puppet process is running and the state file is no " + becomes: o.define_head "The check_puppet Nagios plug-in checks that specified Puppet process is running and the state file is no " + The code: o.separator "Mandatory arguments to long options are mandatory for " + "short options too." becomes: o.separator "Mandatory arguments to long options are mandatory for short options too." The code: o.define_head "The check_puppet Nagios plug-in checks that specified Puppet process is running and the state file is no " + "older than specified interval." becomes: o.define_head "The check_puppet Nagios plug-in checks that specified Puppet process is running and the state file is no older than specified interval." * Replaced no occurances of do (.*?) end with {\1} * Replaced 1488 occurances of "([^"\n]*%s[^"\n]*)" *% *(.+?)(?=$| *\b(do|if|while|until|unless|#)\b) with 20 Examples: The code: args[0].split(/\./).map do |s| "dc=%s"%[s] end.join(",") becomes: args[0].split(/\./).map do |s| "dc=#{s}" end.join(",") The code: puts "%s" % Puppet.version becomes: puts "#{Puppet.version}" The code: raise "Could not find information for %s" % node becomes: raise "Could not find information for #{node}" The code: raise Puppet::Error, "Cannot create %s: basedir %s is a file" % [dir, File.join(path)] becomes: raise Puppet::Error, "Cannot create #{dir}: basedir #{File.join(path)} is a file" The code: Puppet.err "Could not run %s: %s" % [client_class, detail] becomes: Puppet.err "Could not run #{client_class}: #{detail}" The code: raise "Could not find handler for %s" % arg becomes: raise "Could not find handler for #{arg}" The code: Puppet.err "Will not start without authorization file %s" % Puppet[:authconfig] becomes: Puppet.err "Will not start without authorization file #{Puppet[:authconfig]}" The code: raise Puppet::Error, "Could not deserialize catalog from pson: %s" % detail becomes: raise Puppet::Error, "Could not deserialize catalog from pson: #{detail}" The code: raise "Could not find facts for %s" % Puppet[:certname] becomes: raise "Could not find facts for #{Puppet[:certname]}" The code: raise ArgumentError, "%s is not readable" % path becomes: raise ArgumentError, "#{path} is not readable" The code: raise ArgumentError, "Invalid handler %s" % name becomes: raise ArgumentError, "Invalid handler #{name}" The code: debug "Executing '%s' in zone %s with '%s'" % [command, @resource[:name], str] becomes: debug "Executing '#{command}' in zone #{@resource[:name]} with '#{str}'" The code: raise Puppet::Error, "unknown cert type '%s'" % hash[:type] becomes: raise Puppet::Error, "unknown cert type '#{hash[:type]}'" The code: Puppet.info "Creating a new certificate request for %s" % Puppet[:certname] becomes: Puppet.info "Creating a new certificate request for #{Puppet[:certname]}" The code: "Cannot create alias %s: object already exists" % [name] becomes: "Cannot create alias #{name}: object already exists" The code: return "replacing from source %s with contents %s" % [metadata.source, metadata.checksum] becomes: return "replacing from source #{metadata.source} with contents #{metadata.checksum}" The code: it "should have a %s parameter" % param do becomes: it "should have a #{param} parameter" do The code: describe "when registring '%s' messages" % log do becomes: describe "when registring '#{log}' messages" do The code: paths = %w{a b c d e f g h}.collect { |l| "/tmp/iteration%stest" % l } becomes: paths = %w{a b c d e f g h}.collect { |l| "/tmp/iteration#{l}test" } The code: assert_raise(Puppet::Error, "Check '%s' did not fail on false" % check) do becomes: assert_raise(Puppet::Error, "Check '#{check}' did not fail on false") do
* Code smell: Win32 --> MS_windowsMarkus Roberts2010-07-091-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Replaced 12 occurances of Win32 with Microsoft Windows 3 Examples: The code: # and all .rb files in lib/. This is disabled by default on Win32. becomes: # and all .rb files in lib/. This is disabled by default on Microsoft Windows. The code: # We can use Win32 functions becomes: # We can use Microsoft Windows functions The code: desc "Uses Win32 functionality to manage file's users and rights." becomes: desc "Uses Microsoft Windows functionality to manage file's users and rights." * Replaced 10 occurances of :win32 with :microsoft_windows 3 Examples: The code: Puppet.features.add(:win32, :libs => ["sys/admin", "win32/process", "win32/dir"]) becomes: Puppet.features.add(:microsoft_windows, :libs => ["sys/admin", "win32/process", "win32/dir"]) The code: Puppet::Type.type(:file).provide :win32 do becomes: Puppet::Type.type(:file).provide :microsoft_windows do The code: confine :feature => :win32 becomes: confine :feature => :microsoft_windows * Replaced 13 occurances of win32\? with microsoft_windows? 3 Examples: The code: signals.update({:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs }) unless Puppet.features.win32? becomes: signals.update({:HUP => :restart, :USR1 => :reload, :USR2 => :reopen_logs }) unless Puppet.features.microsoft_windows? The code: raise Puppet::Error,"Cannot determine basic system flavour" unless Puppet.features.posix? or Puppet.features.win32? becomes: raise Puppet::Error,"Cannot determine basic system flavour" unless Puppet.features.posix? or Puppet.features.microsoft_windows? The code: require 'sys/admin' if Puppet.features.win32? becomes: require 'sys/admin' if Puppet.features.microsoft_windows?
* Avoid non-win32 signals on win32 runtimeDavid Schmitt2010-02-171-1/+4
|
* Fix 2239 (step four): Refactored Puppet::Daemon's stop/restart methods to ↵Ethan Rowe2010-02-171-7/+5
| | | | set status flags appropriately in Puppet::Application, and removed call to now-deprecated @agent.configure_delayed_restart. This should get the restart and stop behavior for daemons and their agents working nicely with the new global process status interface of Puppet::Application.
* Fix for temporary file security wholeMarkus Roberts2010-01-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | | We create temporary files in /tmp/ with predictable names. These could be used by an attacker to DoS a box by setting a symlink to some other file (say, /etc/shadow) and waiting for us to overwrite it. The minimalistic solution employed by this patch is to wrap all such file writing with a paranoid wrapper that: 1) Check to see if the target exists 2) Issues a warning if it was a symlink 3) Deletes it 4) Waits (0.1 seconds if it was a file, 5 seconds if it was a symlink) 5) Opens the file with EXCL, which will fail if the file has come back. If this succeeds (as it normally will) it has exactly the same semantics as the original code (a must, as we are right at a release boundary). However, under no circumstances will it follow a preexisting symlink (the operating system guarantees this with EXCL) so the danger of an exploit has been converted into the possibility of a failure, with an appropriate warning.
* Removed extra whitespace from end of linesIan Taylor2009-06-061-1/+1
|
* Creating and using a new Puppet::Daemon classLuke Kanies2009-02-061-25/+77
| | | | | | | | | | | | This replaces the short-lived EventManager class, all of the service- and timer-related code in puppet.rb, and moves code from agent.rb, server.rb, and other places into one class responsible for starting, stopping, pids, and more. The Daemon module is no longer in existence, so it's been removed from the classes that were using it. Signed-off-by: Luke Kanies <luke@madstop.com>
* Splitting the Agent class into Agent and ConfigurerLuke Kanies2009-02-061-2/+0
| | | | | | | | | | | | Once I went to add runinterval support to the Agent class, I realized it's really two classes: One that handles starting, stopping, running, et al (still called Agent), and one that handles downloading the catalog, running it, etc. (now called Configurer). This commit includes some additional code, but 95% of it is just moving code around. Signed-off-by: Luke Kanies <luke@madstop.com>
* Removing the Id tags from all of the filesLuke Kanies2007-10-031-1/+0
|
* Merging the webserver_portability branch from version 2182 to version 2258.luke2007-03-061-262/+61
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2259 980ebf18-57e1-0310-9a29-db15c13687c0
* Committing patch by Dennis Jacobfeuerborn to only use the domain name if it ↵luke2007-02-281-1/+5
| | | | | | is set. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2246 980ebf18-57e1-0310-9a29-db15c13687c0
* Renamed Puppet.name to Puppet.execname so rails 1.2 doesn't freak outshadoi2007-02-171-5/+5
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2208 980ebf18-57e1-0310-9a29-db15c13687c0
* Moving all of the client and server code into a single network/ directory. ↵luke2007-02-081-2/+2
| | | | | | In other words, more code structure cleanup. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2179 980ebf18-57e1-0310-9a29-db15c13687c0
* Moving some of the stand-alone classes into the util/ subdirectory, to clean ↵luke2007-02-071-4/+4
| | | | | | up the top-level namespace a bit. This is a lot of file modifications, but most of them just change class names and file paths. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2178 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing #418. The problem was that multiple objects might include Daemon, ↵luke2007-01-261-1/+4
| | | | | | which means that Daemon#shutdown can be called multiple times. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2094 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing some failing tests on fedora.luke2007-01-011-0/+1
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2011 980ebf18-57e1-0310-9a29-db15c13687c0
* Fix a syntax error in lib/puppet/daemon.rb (That'll teach me to not run the ↵mpalmer2006-12-311-1/+1
| | | | | | test suite before committing) git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2005 980ebf18-57e1-0310-9a29-db15c13687c0
* Switch puppet/daemon.rb to use Pidlockmpalmer2006-12-311-25/+4
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2003 980ebf18-57e1-0310-9a29-db15c13687c0
* Using the "trace" configuration parameter to determine whether a stack trace ↵luke2006-09-151-1/+1
| | | | | | should be printed, rather than just using "debug". I added the param a little while ago and was using it internally in Puppet::DevError, but I just now went through the whole configuration and switched to using it. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1613 980ebf18-57e1-0310-9a29-db15c13687c0
* Adding an "ignoretags" attribute to transaction, and setting it for ↵luke2006-09-051-2/+2
| | | | | | downloading plugins or facts, and for creating config directories git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1562 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing #231.luke2006-08-281-9/+19
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1491 980ebf18-57e1-0310-9a29-db15c13687c0
* Changing permissions on the cert file and the ca cert file, since it is no ↵luke2006-08-251-2/+2
| | | | | | problem for them to be readable and sometimes it is required git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1488 980ebf18-57e1-0310-9a29-db15c13687c0
* Merging r1468 from the implementations branch with r1438 from when the ↵luke2006-08-141-8/+29
| | | | | | branch was first created. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1469 980ebf18-57e1-0310-9a29-db15c13687c0
* Largely refactored how log destinations are handled, although it is not ↵luke2006-06-271-24/+32
| | | | | | exposed externally. Most of this work is related to handling a large number of small problems related to threading. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1315 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing #175. The setpidfile setting was being ignored.luke2006-06-201-0/+1
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1306 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing some logging issues with puppetmasterd when daemonized with verbose ↵luke2006-06-141-2/+0
| | | | | | mode on, and fixing ldap support when daemonizing git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1276 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing #132, which involved creating a separate CA client and using it to ↵luke2006-05-021-22/+19
| | | | | | retrieve the certificates. There was more work to do because of the weird client/daemon/server heirarchy. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1160 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing the docs a bit for the executables, adding a --daemonize option to ↵luke2006-04-301-14/+24
| | | | | | puppetd and puppetmasterd so they can still be daemonized with debugging or verbosity enabled, and causing puppetd to fail to start if a PID file exists (and not setting a pid file if running with --onetime enabled). git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1149 980ebf18-57e1-0310-9a29-db15c13687c0
* Adding in all of the patches necessary to make a prototype rails interface ↵luke2006-04-281-0/+8
| | | | | | to puppet nodes work. The biggest change is that there is now a separate NetworkClient class for every Client subclass, because otherwise you get namespace collisions. Most everything other change is a relatively minor patch. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1145 980ebf18-57e1-0310-9a29-db15c13687c0
* Okay, Puppet is now almost entirely capable of configuring itself. I have ↵luke2006-03-021-14/+22
| | | | | | not yet added the extra tests to puppetmasterd to make sure it can start as a normal user, and the executables still fail some simple tests because they are producing output when they start (I will get rid of the output), but overall things look pretty good. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@965 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing locking. It apparently was not working on OS X, and I was not ↵luke2006-02-121-1/+2
| | | | | | syncronizing access in threads -- i assumed locks themselves were a sufficient sync point. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@897 980ebf18-57e1-0310-9a29-db15c13687c0
* Fixing waitforcert so that the client can actually add the certs once it ↵luke2006-01-301-1/+6
| | | | | | receives them git-svn-id: https://reductivelabs.com/svn/puppet/trunk@856 980ebf18-57e1-0310-9a29-db15c13687c0
* Adding the event-loop stuff to the repository and switching to using it. ↵luke2006-01-241-0/+3
| | | | | | Also, breaking many classes out into their own class files. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@848 980ebf18-57e1-0310-9a29-db15c13687c0
* Modifying docs, and adding scheduling hooksluke2006-01-201-1/+1
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@846 980ebf18-57e1-0310-9a29-db15c13687c0
* Adding Sun support and fixing the last remaining bugs related to the daemon ↵luke2006-01-111-4/+19
| | | | | | changes i just made git-svn-id: https://reductivelabs.com/svn/puppet/trunk@799 980ebf18-57e1-0310-9a29-db15c13687c0
* Supporting puppetmasterd running as a non-root user, and doing some basic ↵luke2006-01-101-18/+23
| | | | | | message cleanup git-svn-id: https://reductivelabs.com/svn/puppet/trunk@798 980ebf18-57e1-0310-9a29-db15c13687c0
* Central logging now works, although there appear to be a few kinks to work out.luke2005-10-281-7/+43
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@732 980ebf18-57e1-0310-9a29-db15c13687c0
* Made tweaks here and there to get it running better on my local network. I ↵luke2005-10-211-0/+1
| | | | | | am inches away from that happening. All tests pass. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@720 980ebf18-57e1-0310-9a29-db15c13687c0
* This should be the commit that brings us to Beta 1. All tests pass, ↵Luke Kanies2005-08-281-1/+3
| | | | | | although I get some (gracefully handled) failures in tc_metrics.rb, and there is now a config file for the fileserver module, including authorization specification for it. I have also reworked error handling in the xmlrpc client and server so errors should propagate more correctly. git-svn-id: https://reductivelabs.com/svn/puppet/trunk@594 980ebf18-57e1-0310-9a29-db15c13687c0
* remote filecopying now worksLuke Kanies2005-08-231-2/+9
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/trunk@586 980ebf18-57e1-0310-9a29-db15c13687c0
* all tests pass except a certificate test i do not know how to fixLuke Kanies2005-08-161-56/+76
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/library/trunk@553 980ebf18-57e1-0310-9a29-db15c13687c0
* a basic first test of puppetmasterd now passesLuke Kanies2005-08-151-1/+1
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/library/trunk@551 980ebf18-57e1-0310-9a29-db15c13687c0
* further progress towards passing testsLuke Kanies2005-08-131-1/+2
| | | | git-svn-id: https://reductivelabs.com/svn/puppet/library/trunk@546 980ebf18-57e1-0310-9a29-db15c13687c0
* all tests pass except those related to puppetd; i am going to significantly ↵Luke Kanies2005-08-121-0/+91
| | | | | | reorganize how serving is done git-svn-id: https://reductivelabs.com/svn/puppet/library/trunk@540 980ebf18-57e1-0310-9a29-db15c13687c0