summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSol Jerome <sol.jerome@gmail.com>2011-06-21 11:27:19 -0500
committerSol Jerome <sol.jerome@gmail.com>2011-06-21 11:27:19 -0500
commit45f7e202f6b7860214d709d0d470f2c8938c2993 (patch)
tree2f056a9203818c7c09084cf01dd134f07f432505
parent55bb1f8cb2aca78914e896fd2a4fdf59f53882e1 (diff)
downloadbcfg2-45f7e202f6b7860214d709d0d470f2c8938c2993.tar.gz
bcfg2-45f7e202f6b7860214d709d0d470f2c8938c2993.tar.bz2
bcfg2-45f7e202f6b7860214d709d0d470f2c8938c2993.zip
bcfg2: Catch tracebacks (Tickets #1016 and #1017)
This also moves the exception handling added in #1012 to the bcfg2 code for consistency (as per Holger Weiß's suggestion). Signed-off-by: Sol Jerome <sol.jerome@gmail.com>
-rw-r--r--src/lib/Proxy.py11
-rwxr-xr-xsrc/sbin/bcfg28
2 files changed, 12 insertions, 7 deletions
diff --git a/src/lib/Proxy.py b/src/lib/Proxy.py
index e4a0f6a3d..4cb0bbe80 100644
--- a/src/lib/Proxy.py
+++ b/src/lib/Proxy.py
@@ -47,6 +47,9 @@ __all__ = ["ComponentProxy",
class CertificateError(Exception):
def __init__(self, commonName):
self.commonName = commonName
+ def __str__(self):
+ return ("Got unallowed commonName %s from server"
+ % self.commonName)
class RetryMethod(xmlrpclib._Method):
@@ -193,13 +196,7 @@ class SSLHTTPConnection(httplib.HTTPConnection):
ca_certs=self.ca, suppress_ragged_eofs=True,
keyfile=self.key, certfile=self.cert,
ssl_version=ssl_protocol_ver)
- try:
- self.sock.connect((self.host, self.port))
- except socket.gaierror:
- e = sys.exc_info()[1]
- self.logger.error("Unable to connect to %s:%s\n%s" %
- (self.host, self.port, e.strerror))
- sys.exit(1)
+ self.sock.connect((self.host, self.port))
peer_cert = self.sock.getpeercert()
if peer_cert and self.scns:
scn = [x[0][1] for x in peer_cert['subject'] if x[0][0] == 'commonName'][0]
diff --git a/src/sbin/bcfg2 b/src/sbin/bcfg2
index 534ab8238..5ddfd8791 100755
--- a/src/sbin/bcfg2
+++ b/src/sbin/bcfg2
@@ -7,6 +7,7 @@ import fcntl
import logging
import os
import signal
+import socket
import stat
import sys
import tempfile
@@ -199,6 +200,13 @@ class Client:
self.logger.error("Failed to download probes from bcfg2")
self.logger.error(flt.faultString)
raise SystemExit(1)
+ except (Bcfg2.Proxy.CertificateError,
+ socket.gaierror,
+ socket.error):
+ e = sys.exc_info()[1]
+ self.logger.error("Failed to download probes from bcfg2: %s"
+ % e)
+ raise SystemExit(1)
times['probe_download'] = time.time()