Blob Blame History Raw
From 9cf9d865f9c51b7d7d82b3a768244bbed763731e Mon Sep 17 00:00:00 2001
From: Vratislav Podzimek <vpodzime@redhat.com>
Date: Wed, 8 Jul 2015 10:45:29 +0200
Subject: [PATCH 3/7] Just report integrity check failure instead of traceback
 (#1240710)

That way users can continue with the installation in some way or exit the
installation in a user-friendly way.

Signed-off-by: Vratislav Podzimek <vpodzime@redhat.com>
---
 org_fedora_oscap/gui/spokes/oscap.py | 15 +++++++++++++--
 org_fedora_oscap/ks/oscap.py         | 22 ++++++++++++++++++++--
 2 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/org_fedora_oscap/gui/spokes/oscap.py b/org_fedora_oscap/gui/spokes/oscap.py
index 46b742b..daa23e9 100644
--- a/org_fedora_oscap/gui/spokes/oscap.py
+++ b/org_fedora_oscap/gui/spokes/oscap.py
@@ -332,8 +332,11 @@ class OSCAPSpoke(NormalSpoke):
                                        self._addon_data.raw_preinst_content_path,
                                        hash_obj)
             if digest != self._addon_data.fingerprint:
-                msg = _("Integrity check failed")
-                raise content_handling.ContentCheckError(msg)
+                self._integrity_check_failed()
+                # fetching done
+                with self._fetch_flag_lock:
+                    self._fetching = False
+                return
 
         # RPM is an archive at this phase
         if self._addon_data.content_type in ("archive", "rpm"):
@@ -652,6 +655,14 @@ class OSCAPSpoke(NormalSpoke):
         self._wrong_content()
 
     @gtk_action_wait
+    def _integrity_check_failed(self):
+        """Adapts the UI if integrity check fails"""
+
+        msg = _("The integrity check of the content failed. Cannot use the content.")
+        self._progress_label.set_markup("<b>%s</b>" % msg)
+        self._wrong_content()
+
+    @gtk_action_wait
     def _extraction_failed(self, err_msg):
         """Adapts the UI if extracting data from entered URL failed"""
 
diff --git a/org_fedora_oscap/ks/oscap.py b/org_fedora_oscap/ks/oscap.py
index ed0e54d..1a185d5 100644
--- a/org_fedora_oscap/ks/oscap.py
+++ b/org_fedora_oscap/ks/oscap.py
@@ -443,8 +443,26 @@ class OSCAPdata(AddonData):
             digest = utils.get_file_fingerprint(self.raw_preinst_content_path,
                                                 hash_obj)
             if digest != self.fingerprint:
-                msg = "Integrity check of the content failed!"
-                raise ContentCheckError(msg)
+                log.error("Failed to fetch and initialize SCAP content!")
+                msg = _("The integrity check of the security content failed.\n" +
+                        "The installation should be aborted. Do you wish to continue anyway?")
+
+                if flags.flags.automatedInstall and not flags.flags.ksprompt:
+                    # cannot have ask in a non-interactive kickstart installation
+                    raise errors.CmdlineError(msg)
+
+                answ = errors.errorHandler.ui.showYesNoQuestion(msg)
+                if answ == errors.ERROR_CONTINUE:
+                    # prevent any futher actions here by switching to the dry
+                    # run mode and let things go on
+                    self.dry_run = True
+                    return
+                else:
+                    # Let's sleep forever to prevent any further actions and wait for
+                    # the main thread to quit the process.
+                    progressQ.send_quit(1)
+                    while True:
+                        time.sleep(100000)
 
         # evaluate rules, do automatic fixes and stop if something that cannot
         # be fixed automatically is wrong
-- 
2.4.3