If setup code for a process depends on network connectivity
it needs to be protected with a rescue clause as much as the
main body of the process.

Further, Timeout exceptions aren't under StandardError and thus
aren't caught by an un-typed rescue clause.  This doesn't matter
if we've morphed the exception, but will cause the program to
fail if we haven't.

There are many places where these concerns _might_ cause a problem
but in most cases they never will in practice; this patch addesses
the two cases where I have been able to confirm that it actually
can cause the client daemon to exit and two more where I suspect
(but can not prove) that it could.

I'd be willing to push this patch as it stands, as it at least
fixes demonstrable problems.  A more general solution would be
nice.

Signed-off-by: Markus Roberts <[email protected]>
---
 lib/puppet/configurer.rb              |    7 ++++++-
 lib/puppet/indirector/facts/facter.rb |    2 +-
 lib/puppet/indirector/ldap.rb         |    4 ++--
 lib/puppet/ssl/host.rb                |    5 ++---
 4 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/lib/puppet/configurer.rb b/lib/puppet/configurer.rb
index efda545..afe56c7 100644
--- a/lib/puppet/configurer.rb
+++ b/lib/puppet/configurer.rb
@@ -133,7 +133,12 @@ class Puppet::Configurer
     # This just passes any options on to the catalog,
     # which accepts :tags and :ignoreschedules.
     def run(options = {})
-        prepare()
+        begin
+            prepare()
+        rescue Exception => detail
+            puts detail.backtrace if Puppet[:trace]
+            Puppet.err "Failed to prepare catalog: %s" % detail
+        end
 
         if catalog = options[:catalog]
             options.delete(:catalog)
diff --git a/lib/puppet/indirector/facts/facter.rb 
b/lib/puppet/indirector/facts/facter.rb
index 9df71fc..6c6cbc6 100644
--- a/lib/puppet/indirector/facts/facter.rb
+++ b/lib/puppet/indirector/facts/facter.rb
@@ -29,7 +29,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
                     Timeout::timeout(self.timeout) do
                         load file
                     end
-                rescue => detail
+                rescue Exception => detail
                     Puppet.warning "Could not load fact file %s: %s" % 
[fqfile, detail]
                 end
             end
diff --git a/lib/puppet/indirector/ldap.rb b/lib/puppet/indirector/ldap.rb
index 7485bd9..744a839 100644
--- a/lib/puppet/indirector/ldap.rb
+++ b/lib/puppet/indirector/ldap.rb
@@ -1,4 +1,4 @@
-require 'puppet/indirector/terminus'
+requir 'puppet/indirector/terminus'
 require 'puppet/util/ldap/connection'
 
 class Puppet::Indirector::Ldap < Puppet::Indirector::Terminus
@@ -40,7 +40,7 @@ class Puppet::Indirector::Ldap < Puppet::Indirector::Terminus
                 found = true
                 yield entry
             end
-        rescue => detail
+        rescue Exception => detail
             if count == 0
                 # Try reconnecting to ldap if we get an exception and we 
haven't yet retried.
                 count += 1
diff --git a/lib/puppet/ssl/host.rb b/lib/puppet/ssl/host.rb
index 29b947e..11e11c5 100644
--- a/lib/puppet/ssl/host.rb
+++ b/lib/puppet/ssl/host.rb
@@ -235,12 +235,11 @@ class Puppet::SSL::Host
 
     # Attempt to retrieve a cert, if we don't already have one.
     def wait_for_cert(time)
-        return if certificate
         begin
+            return if certificate
             generate
-
             return if certificate
-        rescue StandardError => detail
+        rescue Exception => detail
             Puppet.err "Could not request certificate: %s" % detail.to_s
             if time < 1
                 puts "Exiting; failed to retrieve certificate and watiforcert 
is disabled"
-- 
1.6.4


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to