def main(): """ Breaks the OVAL file into its constituent elements and writes each of those into the repository """ parser = argparse.ArgumentParser(description='Separates an OVAL file into its component parts and saves them to the repository.') options = parser.add_argument_group('options') options.add_argument('-f', '--file', required=True, help='The name of the source file') options.add_argument('-v', '--verbose', required=False, action="store_true", help='Enable more verbose messages') args = vars(parser.parse_args()) oval = OvalDocument(None) filename = args['file'] if args['verbose']: verbose = True else: verbose = False if not oval.parseFromFile(filename): print("\n >> Unable to parse source file '{0}': no actions taken".format(filename)) return deflist = oval.getDefinitions() if not deflist or deflist is None or len(deflist) < 1: print("\n ## Error: this document does not contain any OVAL definitions. No further action will be taken") return if verbose: print(" Number of definitions to process: ", len(deflist)) repository_root = lib_repo.get_repository_root_path() writeFiles(deflist, repository_root, verbose) writeFiles(oval.getTests(), repository_root, verbose) writeFiles(oval.getObjects(), repository_root, verbose) writeFiles(oval.getStates(), repository_root, verbose) writeFiles(oval.getVariables(), repository_root, verbose)
def decompose(filename, verbose): oval = OvalDocument(None) if not oval.parseFromFile(filename): print("\n >> Unable to parse source file '{0}': no actions taken".format(filename)) return deflist = oval.getDefinitions() # if not deflist or deflist is None or len(deflist) < 1: # print("\n ## Error: this document does not contain any OVAL definitions. No further action will be taken") # return if verbose: print(" Number of definitions to process: ", len(deflist)) repository_root = lib_repo.get_repository_root_path() writeFiles(deflist, repository_root, verbose) writeFiles(oval.getTests(), repository_root, verbose) writeFiles(oval.getObjects(), repository_root, verbose) writeFiles(oval.getStates(), repository_root, verbose) writeFiles(oval.getVariables(), repository_root, verbose)
def decompose(filename, verbose): oval = OvalDocument(None) if not oval.parseFromFile(filename): print("\n >> Unable to parse source file '{0}': no actions taken". format(filename)) return deflist = oval.getDefinitions() # if not deflist or deflist is None or len(deflist) < 1: # print("\n ## Error: this document does not contain any OVAL definitions. No further action will be taken") # return if verbose: print(" Number of definitions to process: ", len(deflist)) repository_root = lib_repo.get_repository_root_path() writeFiles(deflist, repository_root, verbose) writeFiles(oval.getTests(), repository_root, verbose) writeFiles(oval.getObjects(), repository_root, verbose) writeFiles(oval.getStates(), repository_root, verbose) writeFiles(oval.getVariables(), repository_root, verbose)
def main(): """ """ print("------------- Opening OVAL file -------------") tree = ElementTree() tree.parse("OvalTest.xml") document = OvalDocument(tree) # document.parseFromFile("OvalTest.xml") generator = document.getGenerator() if not generator: print("## Oops: Generator element not found") else: print("-- Product: ", generator.getProduct()) print("-- Schema: ", generator.getSchemaVersion()) print("-- Timestamp: ", generator.getTimestamp()) print("-- Edition: ", generator.getExtra("def:edition_field", OvalDocument.NS_DEFAULT)) print("\n") def_list = document.getDefinitions() if not def_list: print("## Oops: No definitions found in OVAL document") else: print(" Number of definitions: ", len(def_list), ", Expected = 489") test_list = document.getTests() if not test_list: print("## Oops: No tests found in OVAL document") else: print(" Number of tests: ", len(test_list), ", Expected = 1439") object_list = document.getObjects() if not object_list: print("## Oops: No objects found in OVAL document") else: print(" Number of objects: ", len(object_list), ", Expected = 1276") state_list = document.getStates() if not state_list: print("## Oops: No states found in OVAL document") else: print(" Number of states: ", len(state_list), ", Expected = 713") var_list = document.getVariables() if not var_list: print(" Number of variables: 0, Expected = 0") else: print(" Number of variables: ", len(var_list), ", Expected = ") print("\n Find the definition with OVAL ID 'oval:org.mitre.oval:def:22382'") definition = document.getElementByID("oval:org.mitre.oval:def:22382") if definition is None: print("## Oops: definition not found") else: print(" Found. Definition details:") print(" Class: ", definition.getClass()) print(" Version: ", definition.getVersion()) definition.incrementVersion() print("New Version: ", definition.getVersion()) meta = definition.getMetadata() if meta is None: print(" ## Oops. Definition metadata not found") else: print(" Title: ", meta.getTitle()) repo = meta.getOvalRepositoryInformation() if repo is None: print(" ### Oops. No repository information") else: print(" ----- From the repository ------") print(" Status: ", repo.getStatus()) repo.setStatus("Munged") print(" New Status: ", repo.getStatus()) print(" Min Version: ", repo.getMinimumSchemaVersion()) repo.setMinimumSchemaVersion("5.9") print("New Min Version: ", repo.getMinimumSchemaVersion())