diff options
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Cfg')
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py | 11 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py | 33 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py | 16 |
3 files changed, 28 insertions, 32 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py index ef4e6a656..c3bf9569b 100644 --- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py +++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgGenshiGenerator.py @@ -10,6 +10,7 @@ from Bcfg2.Server.Plugin import PluginExecutionError, removecomment, \ DefaultTemplateDataProvider, get_template_data from Bcfg2.Server.Plugins.Cfg import CfgGenerator from genshi.template import TemplateLoader, NewTextTemplate +from genshi.template.base import TemplateError from genshi.template.eval import UndefinedError, Suite @@ -117,6 +118,8 @@ class CfgGenshiGenerator(CfgGenerator): quad[2])) raise except: + # this needs to be a blanket except, since it can catch + # any error raised by the genshi template. self._handle_genshi_exception(sys.exc_info()) get_data.__doc__ = CfgGenerator.get_data.__doc__ @@ -184,10 +187,10 @@ class CfgGenshiGenerator(CfgGenerator): def handle_event(self, event): CfgGenerator.handle_event(self, event) try: - self.template = \ - self.loader.load(self.name, cls=NewTextTemplate, - encoding=Bcfg2.Options.setup.encoding) - except: + self.template = self.loader.load( + self.name, cls=NewTextTemplate, + encoding=Bcfg2.Options.setup.encoding) + except TemplateError: raise PluginExecutionError("Failed to load template: %s" % sys.exc_info()[1]) handle_event.__doc__ = CfgGenerator.handle_event.__doc__ diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py index 8cc3f7b21..43035b410 100644 --- a/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py +++ b/src/lib/Bcfg2/Server/Plugins/Cfg/CfgPrivateKeyCreator.py @@ -47,7 +47,7 @@ class CfgPrivateKeyCreator(XMLCfgCreator): the given client metadata, and may be obtained by doing ``self.XMLMatch(metadata)`` :type spec: lxml.etree._Element - :returns: string - The filename of the private key + :returns: tuple - (private key data, public key data) """ if spec is None: spec = self.XMLMatch(metadata) @@ -91,10 +91,9 @@ class CfgPrivateKeyCreator(XMLCfgCreator): "with errors: %s" % (filename, metadata.hostname, result.stderr)) - return filename - except: + return (open(filename).read(), open(filename + ".pub").read()) + finally: shutil.rmtree(tempdir) - raise # pylint: disable=W0221 def create_data(self, entry, metadata): @@ -109,21 +108,17 @@ class CfgPrivateKeyCreator(XMLCfgCreator): """ spec = self.XMLMatch(metadata) specificity = self.get_specificity(metadata) - filename = self._gen_keypair(metadata, spec) + privkey, pubkey = self._gen_keypair(metadata, spec) - try: - # write the public key, stripping the comment and - # replacing it with a comment that specifies the filename. - kdata = open(filename + ".pub").read().split()[:2] - kdata.append(self.pubkey_creator.get_filename(**specificity)) - pubkey = " ".join(kdata) + "\n" - self.pubkey_creator.write_data(pubkey, **specificity) + # write the public key, stripping the comment and + # replacing it with a comment that specifies the filename. + kdata = pubkey.split()[:2] + kdata.append(self.pubkey_creator.get_filename(**specificity)) + pubkey = " ".join(kdata) + "\n" + self.pubkey_creator.write_data(pubkey, **specificity) - # encrypt the private key, write to the proper place, and - # return it - privkey = open(filename).read() - self.write_data(privkey, **specificity) - return privkey - finally: - shutil.rmtree(os.path.dirname(filename)) + # encrypt the private key, write to the proper place, and + # return it + self.write_data(privkey, **specificity) + return privkey # pylint: enable=W0221 diff --git a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py index 5dc3d98eb..355e53588 100644 --- a/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py +++ b/src/lib/Bcfg2/Server/Plugins/Cfg/__init__.py @@ -553,12 +553,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): % (action, event.filename)) self.debug_log("%s handling %s event on %s" % (hdlr.__name__, action, event.filename)) - try: - self.entry_init(event, hdlr) - except: # pylint: disable=W0702 - err = sys.exc_info()[1] - self.logger.error("Cfg: Failed to parse %s: %s" % - (event.filename, err)) + self.entry_init(event, hdlr) return elif hdlr.ignore(event, basename=self.path): return @@ -732,7 +727,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): try: return creator.create_data(entry, metadata) - except: + except CfgCreationError: raise PluginExecutionError("Cfg: Error creating data for %s: %s" % (entry.get("name"), sys.exc_info()[1])) @@ -760,6 +755,9 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): try: return (generator.get_data(entry, metadata), generator) except: + # TODO: the exceptions raised by ``get_data`` are not + # constrained in any way, so for now this needs to be a + # blanket except. msg = "Cfg: Error rendering %s: %s" % (entry.get("name"), sys.exc_info()[1]) self.logger.error(msg) @@ -803,7 +801,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): try: best = self.best_matching(metadata, generators) rv.append(best.specific) - except: # pylint: disable=W0702 + except PluginExecutionError: pass if not rv or not rv[0].hostname: @@ -835,7 +833,7 @@ class CfgEntrySet(Bcfg2.Server.Plugin.EntrySet): raise PluginExecutionError(msg) try: etext = new_entry['text'].encode(Bcfg2.Options.setup.encoding) - except: + except UnicodeDecodeError: msg = "Cfg: Cannot encode content of %s as %s" % \ (name, Bcfg2.Options.setup.encoding) self.logger.error(msg) |