Blob Blame History Raw
From eb5c75eb590ff2eeac6b8c4e93d4589920cc3a9a Mon Sep 17 00:00:00 2001
From: Vratislav Podzimek <vpodzime@redhat.com>
Date: Tue, 7 Jul 2015 15:28:09 +0200
Subject: [PATCH 2/7] Properly react on download/loading issues in
 text+kickstart mode

Instead of raising an exception in case of content download or loading issues we
should let users know and give them a chance to continue anyway (if possible).

Related: rhbz#1240710
Signed-off-by: Vratislav Podzimek <vpodzime@redhat.com>
---
 org_fedora_oscap/ks/oscap.py | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/org_fedora_oscap/ks/oscap.py b/org_fedora_oscap/ks/oscap.py
index fd57b14..ed0e54d 100644
--- a/org_fedora_oscap/ks/oscap.py
+++ b/org_fedora_oscap/ks/oscap.py
@@ -23,10 +23,14 @@
 import shutil
 import re
 import os
+import time
 
 from pyanaconda.addons import AddonData
 from pyanaconda.iutil import getSysroot
+from pyanaconda.progress import progressQ
+from pyanaconda import errors
 from pyanaconda import iutil
+from pyanaconda import flags
 from pykickstart.errors import KickstartParseError, KickstartValueError
 from org_fedora_oscap import utils, common, rule_handling, data_fetch
 from org_fedora_oscap.common import SUPPORTED_ARCHIVES
@@ -35,6 +39,9 @@ from org_fedora_oscap.content_handling import ContentCheckError
 import logging
 log = logging.getLogger("anaconda")
 
+import gettext
+_ = lambda x: gettext.ldgettext("oscap-anaconda-addon", x)
+
 # export OSCAPdata class to prevent Anaconda's collect method from taking
 # AddonData class instead of the OSCAPdata class
 # @see: pyanaconda.kickstart.AnacondaKSHandler.__init__
@@ -406,9 +413,29 @@ class OSCAPdata(AddonData):
             # content not available/fetched yet
             try:
                 self._fetch_content_and_initialize()
-            except common.OSCAPaddonError:
+            except common.OSCAPaddonError as e:
                 log.error("Failed to fetch and initialize SCAP content!")
-                return
+                msg = _("There was an error fetching and loading the security content:\n" +
+                        "%s\n" +
+                        "The installation should be aborted. Do you wish to continue anyway?") % e
+
+                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)
+
 
         # check fingerprint if given
         if self.fingerprint:
-- 
2.4.3