From c899ac40c5793dc76e5c726d610ee17f9bc71d43 Mon Sep 17 00:00:00 2001 From: Vratislav Podzimek Date: Tue, 7 Jul 2015 15:15:33 +0200 Subject: [PATCH 1/7] Fetch and process the content even if GUI doesn't take care of it (#1240625) We cannot rely on the GUI code fetching and loading the content because in text kickstart installations it never gets a chance to do so. Signed-off-by: Vratislav Podzimek --- org_fedora_oscap/ks/oscap.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/org_fedora_oscap/ks/oscap.py b/org_fedora_oscap/ks/oscap.py index 475aa2c..fd57b14 100644 --- a/org_fedora_oscap/ks/oscap.py +++ b/org_fedora_oscap/ks/oscap.py @@ -22,15 +22,19 @@ import shutil import re +import os from pyanaconda.addons import AddonData from pyanaconda.iutil import getSysroot from pyanaconda import iutil from pykickstart.errors import KickstartParseError, KickstartValueError -from org_fedora_oscap import utils, common, rule_handling +from org_fedora_oscap import utils, common, rule_handling, data_fetch from org_fedora_oscap.common import SUPPORTED_ARCHIVES from org_fedora_oscap.content_handling import ContentCheckError +import logging +log = logging.getLogger("anaconda") + # export OSCAPdata class to prevent Anaconda's collect method from taking # AddonData class instead of the OSCAPdata class # @see: pyanaconda.kickstart.AnacondaKSHandler.__init__ @@ -356,6 +360,27 @@ class OSCAPdata(AddonData): return utils.join_paths(common.TARGET_CONTENT_DIR, self.tailoring_path) + def _fetch_content_and_initialize(self): + """Fetch content and initialize from it""" + + data_fetch.fetch_data(self.content_url, self.raw_preinst_content_path, self.certificates) + # RPM is an archive at this phase + if self.content_type in ("archive", "rpm"): + # extract the content + common.extract_data(self.raw_preinst_content_path, + common.INSTALLATION_CONTENT_DIR, + [self.xccdf_path]) + + rules = common.get_fix_rules_pre(self.profile_id, + self.preinst_content_path, + self.datastream_id, self.xccdf_id, + self.preinst_tailoring_path) + + # parse and store rules with a clean RuleData instance + self.rule_data = rule_handling.RuleData() + for rule in rules.splitlines(): + self.rule_data.new_rule(rule) + def setup(self, storage, ksdata, instclass): """ The setup method that should make changes to the runtime environment @@ -377,6 +402,14 @@ class OSCAPdata(AddonData): # selected return + if not os.path.exists(self.raw_preinst_content_path): + # content not available/fetched yet + try: + self._fetch_content_and_initialize() + except common.OSCAPaddonError: + log.error("Failed to fetch and initialize SCAP content!") + return + # check fingerprint if given if self.fingerprint: hash_obj = utils.get_hashing_algorithm(self.fingerprint) -- 2.4.3