From bc93800990741a5214b15291ccfdd62de1a13d06 Mon Sep 17 00:00:00 2001 From: Sep0lkit Date: Thu, 20 Jun 2019 19:20:45 +0800 Subject: [PATCH 1/3] Fix count_oval_object get wrong count oval_root no point to the right oval document root, so get the wrong count. --- utils/count_oval_objects.py | 39 +++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/utils/count_oval_objects.py b/utils/count_oval_objects.py index 582768372bfa..97a983759459 100755 --- a/utils/count_oval_objects.py +++ b/utils/count_oval_objects.py @@ -28,7 +28,8 @@ def load_xml(file_name): try: it = ET.iterparse(file_name) for _, el in it: - el.tag = el.tag.split('}', 1)[1] # strip all namespaces + if '}'in el.tag: + el.tag = el.tag.split('}', 1)[1] # strip all namespaces root = it.root return root except: @@ -59,24 +60,28 @@ def find_oval_objects(oval_refs): tests.append(test_ref) # find references to objects in tests - for test in tests: - test_element = None - for t in oval_root.findall("tests/*"): - if t.attrib.get('id') == test: - test_element = t - break - if test_element is not None: - for object_element in test_element.findall(".//*"): - if 'object_ref' in object_element.attrib: - object_ref = object_element.attrib['object_ref'] - object_refs.append(object_ref) + for key in oval_files: + oval_root = oval_files[key] + for test in tests: + test_element = None + for t in oval_root.findall("tests/*"): + if t.attrib.get('id') == test: + test_element = t + break + if test_element is not None: + for object_element in test_element.findall(".//*"): + if 'object_ref' in object_element.attrib: + object_ref = object_element.attrib['object_ref'] + object_refs.append(object_ref) # find objects - for r in object_refs: - for obj in oval_root.findall("objects/*"): - if obj.attrib.get('id') == r: - objects.append(obj.tag) - break + for key in oval_files: + oval_root = oval_files[key] + for r in object_refs: + for obj in oval_root.findall("objects/*"): + if obj.attrib.get('id') == r: + objects.append(obj.tag) + break return set(objects) From b060422b775756a9b26b1a67e9ede5977bfee042 Mon Sep 17 00:00:00 2001 From: Sep0lkit Date: Mon, 24 Jun 2019 19:16:20 +0800 Subject: [PATCH 2/3] count_oval_objects count extend_definition objects count extend_definition objects --- utils/count_oval_objects.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/utils/count_oval_objects.py b/utils/count_oval_objects.py index 97a983759459..52122f104241 100755 --- a/utils/count_oval_objects.py +++ b/utils/count_oval_objects.py @@ -37,6 +37,22 @@ def load_xml(file_name): exit(-1) +def get_ext_def_tests(oval_root,def_refs): + t = [] + for d in oval_root.findall(".//definition"): + if d.attrib.get('id') == def_refs: + definition = d + break + if definition is not None: + for criterion in definition.findall(".//criterion"): + test_ref = criterion.attrib["test_ref"] + t.append(test_ref) + for extend_def in definition.findall(".//extend_definition"): + extend_ref = extend_def.attrib["definition_ref"] + t = t + (get_ext_def_tests(oval_root,extend_ref)) + return t + + def find_oval_objects(oval_refs): ''' Finds OVAL objects according to definitions ID ''' tests = [] @@ -55,9 +71,15 @@ def find_oval_objects(oval_refs): definition = d break if definition is not None: + extend_refs = [] for criterion in definition.findall(".//criterion"): test_ref = criterion.attrib["test_ref"] tests.append(test_ref) + for extend_def in definition.findall(".//extend_definition"): + extend_ref = extend_def.attrib["definition_ref"] + #extend_refs.append(extend_ref) + t = get_ext_def_tests(oval_root,extend_ref) + tests += t # find references to objects in tests for key in oval_files: From c7b9fb888ddcb5cb3949003fc7011a36bfb7ea33 Mon Sep 17 00:00:00 2001 From: Sep0lkit Date: Mon, 24 Jun 2019 19:36:11 +0800 Subject: [PATCH 3/3] PEP 8 issues resolve pep 8 issues --- utils/count_oval_objects.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/utils/count_oval_objects.py b/utils/count_oval_objects.py index 52122f104241..aa8523231182 100755 --- a/utils/count_oval_objects.py +++ b/utils/count_oval_objects.py @@ -37,7 +37,7 @@ def load_xml(file_name): exit(-1) -def get_ext_def_tests(oval_root,def_refs): +def get_ext_def_tests(oval_root, def_refs): t = [] for d in oval_root.findall(".//definition"): if d.attrib.get('id') == def_refs: @@ -49,9 +49,9 @@ def get_ext_def_tests(oval_root,def_refs): t.append(test_ref) for extend_def in definition.findall(".//extend_definition"): extend_ref = extend_def.attrib["definition_ref"] - t = t + (get_ext_def_tests(oval_root,extend_ref)) + t = t + (get_ext_def_tests(oval_root, extend_ref)) return t - + def find_oval_objects(oval_refs): ''' Finds OVAL objects according to definitions ID ''' @@ -77,9 +77,8 @@ def find_oval_objects(oval_refs): tests.append(test_ref) for extend_def in definition.findall(".//extend_definition"): extend_ref = extend_def.attrib["definition_ref"] - #extend_refs.append(extend_ref) - t = get_ext_def_tests(oval_root,extend_ref) - tests += t + t = get_ext_def_tests(oval_root, extend_ref) + tests += t # find references to objects in tests for key in oval_files: