Example #1
0
	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")
Example #4
0
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()
Example #5
0
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()
Example #6
0
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")
Example #7
0
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()
Example #8
0
    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()