Blob Blame History Raw
From caa5b6a14c6c8175a3f4639df0863271564d16b2 Mon Sep 17 00:00:00 2001
From: Vratislav Podzimek <vpodzime@redhat.com>
Date: Tue, 23 Aug 2016 14:16:15 +0200
Subject: [PATCH 2/3] Beware of the invalid profiles

If a profile we cannot get pre-installation rules for is chosen we need to just
inform the user instead of crashing.

Resolves: rhbz#1365130
Signed-off-by: Vratislav Podzimek <vpodzime@redhat.com>
---
 org_fedora_oscap/gui/spokes/oscap.py | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/org_fedora_oscap/gui/spokes/oscap.py b/org_fedora_oscap/gui/spokes/oscap.py
index 8f94601..35f7a75 100644
--- a/org_fedora_oscap/gui/spokes/oscap.py
+++ b/org_fedora_oscap/gui/spokes/oscap.py
@@ -581,12 +581,12 @@ class OSCAPSpoke(NormalSpoke):
 
         """
 
+        self._message_store.clear()
+
         if not self._rule_data:
             # RuleData instance not initialized, cannot do anything
             return
 
-        self._message_store.clear()
-
         messages = self._rule_data.eval_rules(self.data, self._storage,
                                               report_only)
         if not messages:
@@ -660,12 +660,6 @@ class OSCAPSpoke(NormalSpoke):
             # no profile specified, nothing to do
             return False
 
-        itr = self._profiles_store.get_iter_first()
-        while itr:
-            if self._profiles_store[itr][0] == profile_id:
-                self._profiles_store.set_value(itr, 2, True)
-            itr = self._profiles_store.iter_next(itr)
-
         if self._using_ds:
             ds = self._current_ds_id
             xccdf = self._current_xccdf_id
@@ -678,10 +672,20 @@ class OSCAPSpoke(NormalSpoke):
             xccdf = None
 
         # get pre-install fix rules from the content
-        rules = common.get_fix_rules_pre(profile_id,
-                                         self._addon_data.preinst_content_path,
-                                         ds, xccdf,
-                                         self._addon_data.preinst_tailoring_path)
+        try:
+            rules = common.get_fix_rules_pre(profile_id,
+                                             self._addon_data.preinst_content_path,
+                                             ds, xccdf,
+                                             self._addon_data.preinst_tailoring_path)
+        except common.OSCAPaddonError:
+            self._set_error("Failed to get rules for the profile '%s'" % profile_id)
+            return False
+
+        itr = self._profiles_store.get_iter_first()
+        while itr:
+            if self._profiles_store[itr][0] == profile_id:
+                self._profiles_store.set_value(itr, 2, True)
+            itr = self._profiles_store.iter_next(itr)
 
         # parse and store rules with a clean RuleData instance
         self._rule_data = rule_handling.RuleData()
-- 
2.7.4