def __run(self, options): if not len(self.__vars['to_run']['value']) > 0: print("\nERROR: No modules have been added. Cannot run.\n") else: self.__warning() print ("\n\nAre you sure you want to run the modules? The changes made by " + NAME + " cannot be reversed!\nType 'yes' if you want to continue\n") answer = self.__user_input("? ") if answer == "yes": print("Resolving module dependencies...") resolver = None if self.__debug_mode == True: resolver = resolve.resolver(debug=True) else: resolver = resolve.resolver() if not self.__vars['level']['value'] == 'any': resolver.set_difficulty(self.__vars['level']['value']) for module in self.__vars['to_run']['value']: if self.__vars['verbose']['value'] == True: print("\tAdding " + module) if module in self.__vars['force']['value']: resolver.add_module(module, forced=self.__vars['force']['value'][module]) else: resolver.add_module(module) resolver.start_resolve() print("Ordering modules for executing...") order_list = resolver.get_install_modules(resolver.get_install_order()) for module in order_list: if self.__vars['verbose']['value'] == True or self.__debug_mode == True: print("\tRunning " + module.name()) print("Executing modules...") for module in order_list: if self.__vars['verbose']['value'] == True or self.__debug_mode == True: print("\tExecuting " + module.name()) for vuln in module.get_running_vulns(): print("\t |-" + vuln.name()) result = None if self.__debug_mode == False: result = module.run() if result == False: print("Module " + module.name() + " failed! Halting.") return if self.__debug_mode == False: print("Execution complete!") for module in order_list: print(module.doc.get_all_docs(output='clear')) else: print("'yes' not given. Stopping...")
def test_invalid_2(): config = [ { "print_name": "Mod_1", "class_name": "mod_1", "vulns": [ { "name": "VULN_1_A", "desc": "Test Vuln 1A", "provides": "A", "version": "1.0.0", "deps": [ ("B", ">2.0.0") ] } ] }, { "print_name": "Mod_2", "class_name": "mod_2", "vulns": [ { "name": "VULN_2_A", "desc": "Test Vuln 2A", "provides": "B", "version": "1.2.0", "deps": [ ] } ] } ] generate_modules(config) mod_list = module_util.get_module_list() assert "mod_1" in mod_list assert "mod_2" in mod_list resolving = resolve.resolver() resolving.add_module("mod_1") assert resolving.start_resolve() == False resolving = resolve.resolver() resolving.add_module("mod_1") resolving.add_module("mod_2") assert resolving.start_resolve() == False remove_stubs()
def test_resolve_simple(): mod_1 = module_util.import_module("test_module") vuln1 = mod_1.new_vulnerability("VULN_1_A", "Test Vuln A", "A", "1.0.0") vuln1.add_dependency(("B", ">0.1")) mod_1.add_vulnerability(vuln1) mod_1.override_class_name("mod_1") mod_1.set_name("Mod_1") assert mod_1.get_class_name() == "mod_1" module_util.set_stub_module("mod_1", mod_1) mod_2 = module_util.import_module("test_module") vuln2 = mod_2.new_vulnerability("VULN_2_A", "Test Vuln B", "B", "1.0.0") mod_2.add_vulnerability(vuln2) mod_2.override_class_name("mod_2") mod_2.set_name("Mod_2") assert mod_2.get_class_name() == "mod_2" module_util.set_stub_module("mod_2", mod_2) mod_list = module_util.get_module_list() assert "mod_1" in mod_list assert "mod_2" in mod_list resolving = resolve.resolver() resolving.add_module("mod_1") assert resolving.start_resolve() == True assert resolving.get_install_order() == ['mod_2', 'mod_1'] resolving = resolve.resolver() resolving.add_module("mod_1") resolving.add_module("mod_2") assert resolving.start_resolve() == True assert resolving.get_install_order() == ['mod_2', 'mod_1'] assert resolving.get_install_order() != ['mod_1', 'mod_2'] module_util.remove_stub_module("mod_1") module_util.remove_stub_module("mod_2")
def test_resolve_simple_or(): config = [{ "print_name": "Mod_1", "class_name": "mod_1", "vulns": [{ "name": "VULN_1_B", "desc": "Test Vuln 1B", "provides": "", "version": "", "deps": [("B", "=1.2.0"), ("C", "=4.5.0")] }] }, { "print_name": "Mod_2", "class_name": "mod_2", "vulns": [{ "name": "VULN_2_A", "desc": "Test Vuln 2A", "provides": "B", "version": "1.2.0", "deps": [] }] }, { "print_name": "Mod_3", "class_name": "mod_3", "vulns": [{ "name": "VULN_3_A", "desc": "Test Vuln 3A", "provides": "C", "version": "4.5.0", "deps": [] }] }] generate_modules(config) mod_list = module_util.get_module_list() assert "mod_1" in mod_list assert "mod_2" in mod_list assert "mod_3" in mod_list resolving = resolve.resolver() resolving.add_module("mod_1") assert resolving.start_resolve() == True assert resolving.get_install_order() == [ 'mod_3', 'mod_1' ] or resolving.get_install_order() == ['mod_2', 'mod_1'] assert len(resolving.get_install_modules( resolving.get_install_order())) == 2 remove_stubs()
def test_invalid_2(): config = [{ "print_name": "Mod_1", "class_name": "mod_1", "vulns": [{ "name": "VULN_1_A", "desc": "Test Vuln 1A", "provides": "A", "version": "1.0.0", "deps": [("B", ">2.0.0")] }] }, { "print_name": "Mod_2", "class_name": "mod_2", "vulns": [{ "name": "VULN_2_A", "desc": "Test Vuln 2A", "provides": "B", "version": "1.2.0", "deps": [] }] }] generate_modules(config) mod_list = module_util.get_module_list() assert "mod_1" in mod_list assert "mod_2" in mod_list resolving = resolve.resolver() resolving.add_module("mod_1") assert resolving.start_resolve() == False resolving = resolve.resolver() resolving.add_module("mod_1") resolving.add_module("mod_2") assert resolving.start_resolve() == False remove_stubs()
def test_resolve_or(): config = [{ "print_name": "Mod_1", "class_name": "mod_1", "vulns": [{ "name": "VULN_1_A", "desc": "Test Vuln 1A", "provides": "A", "version": "1.0.0", "deps": [("B", "<0.2"), ("C", "<4.5.0")] }, { "name": "VULN_1_B", "desc": "Test Vuln 1B", "provides": "", "version": "", "deps": [("B", "=1.2.0"), ("C", "=4.5.0")] }] }, { "print_name": "Mod_2", "class_name": "mod_2", "vulns": [{ "name": "VULN_2_A", "desc": "Test Vuln 2A", "provides": "B", "version": "1.2.0", "deps": [] }] }, { "print_name": "Mod_3", "class_name": "mod_3", "vulns": [{ "name": "VULN_3_A", "desc": "Test Vuln 3A", "provides": "C", "version": "4.5.0", "deps": [] }] }] generate_modules(config) mod_list = module_util.get_module_list() assert "mod_1" in mod_list assert "mod_2" in mod_list assert "mod_3" in mod_list list1 = ['mod_3', 'mod_1'] list2 = ['mod_2', 'mod_1'] list1_count = 0 list2_count = 0 for i in range(20): #~ resolving = resolve.resolver(debug=True) resolving = resolve.resolver() resolving.add_module("mod_1") assert resolving.start_resolve() == True #~ print("\n\END DEBUG\n\n") install_order = resolving.get_install_order() assert install_order == list1 or install_order == list2 if install_order == list1: list1_count += 1 elif install_order == list2: list2_count += 1 assert len(resolving.get_install_modules( resolving.get_install_order())) == 2 assert list1_count > 1 assert list2_count > 1 remove_stubs()
def __run(self, options): if not len(self.__vars['to_run']['value']) > 0: print("\nERROR: No modules have been added. Cannot run.\n") else: self.__warning() print( "\n\nAre you sure you want to run the modules? The changes made by " + NAME + " cannot be reversed!\nType 'yes' if you want to continue\n") answer = self.__user_input("? ") if answer == "yes": print("Resolving module dependencies...") resolver = None if self.__debug_mode == True: resolver = resolve.resolver(debug=True) else: resolver = resolve.resolver() if not self.__vars['level']['value'] == 'any': resolver.set_difficulty(self.__vars['level']['value']) for module in self.__vars['to_run']['value']: if self.__vars['verbose']['value'] == True: print("\tAdding " + module) if module in self.__vars['force']['value']: resolver.add_module( module, forced=self.__vars['force']['value'][module]) else: resolver.add_module(module) resolver.start_resolve() print("Ordering modules for executing...") order_list = resolver.get_install_modules( resolver.get_install_order()) for module in order_list: if self.__vars['verbose'][ 'value'] == True or self.__debug_mode == True: print("\tRunning " + module.name()) print("Executing modules...") for module in order_list: if self.__vars['verbose'][ 'value'] == True or self.__debug_mode == True: print("\tExecuting " + module.name()) for vuln in module.get_running_vulns(): print("\t |-" + vuln.name()) result = None if self.__debug_mode == False: result = module.run() if result == False: print("Module " + module.name() + " failed! Halting.") return if self.__debug_mode == False: print("Execution complete!") for module in order_list: print(module.doc.get_all_docs(output='clear')) else: print("'yes' not given. Stopping...")
def test_resolve_or(): config = [ { "print_name": "Mod_1", "class_name": "mod_1", "vulns": [ { "name": "VULN_1_A", "desc": "Test Vuln 1A", "provides": "A", "version": "1.0.0", "deps": [ ("B", "<0.2"), ("C", "<4.5.0") ] }, { "name": "VULN_1_B", "desc": "Test Vuln 1B", "provides": "", "version": "", "deps": [ ("B", "=1.2.0"), ("C", "=4.5.0") ] } ] }, { "print_name": "Mod_2", "class_name": "mod_2", "vulns": [ { "name": "VULN_2_A", "desc": "Test Vuln 2A", "provides": "B", "version": "1.2.0", "deps": [ ] } ] }, { "print_name": "Mod_3", "class_name": "mod_3", "vulns": [ { "name": "VULN_3_A", "desc": "Test Vuln 3A", "provides": "C", "version": "4.5.0", "deps": [ ] } ] } ] generate_modules(config) mod_list = module_util.get_module_list() assert "mod_1" in mod_list assert "mod_2" in mod_list assert "mod_3" in mod_list list1 = ['mod_3', 'mod_1'] list2 = ['mod_2', 'mod_1'] list1_count = 0 list2_count = 0 for i in range(20): #~ resolving = resolve.resolver(debug=True) resolving = resolve.resolver() resolving.add_module("mod_1") assert resolving.start_resolve() == True #~ print("\n\END DEBUG\n\n") install_order = resolving.get_install_order() assert install_order == list1 or install_order == list2 if install_order == list1: list1_count += 1 elif install_order == list2: list2_count += 1 assert len(resolving.get_install_modules(resolving.get_install_order())) == 2 assert list1_count > 1 assert list2_count > 1 remove_stubs()
def test_resolve_simple_or(): config = [ { "print_name": "Mod_1", "class_name": "mod_1", "vulns": [ { "name": "VULN_1_B", "desc": "Test Vuln 1B", "provides": "", "version": "", "deps": [ ("B", "=1.2.0"), ("C", "=4.5.0") ] } ] }, { "print_name": "Mod_2", "class_name": "mod_2", "vulns": [ { "name": "VULN_2_A", "desc": "Test Vuln 2A", "provides": "B", "version": "1.2.0", "deps": [ ] } ] }, { "print_name": "Mod_3", "class_name": "mod_3", "vulns": [ { "name": "VULN_3_A", "desc": "Test Vuln 3A", "provides": "C", "version": "4.5.0", "deps": [ ] } ] } ] generate_modules(config) mod_list = module_util.get_module_list() assert "mod_1" in mod_list assert "mod_2" in mod_list assert "mod_3" in mod_list resolving = resolve.resolver() resolving.add_module("mod_1") assert resolving.start_resolve() == True assert resolving.get_install_order() == ['mod_3', 'mod_1'] or resolving.get_install_order() == ['mod_2', 'mod_1'] assert len(resolving.get_install_modules(resolving.get_install_order())) == 2 remove_stubs()