diff --git a/gns3server/modules/virtualbox/__init__.py b/gns3server/modules/virtualbox/__init__.py index 18253925..5ea015e0 100644 --- a/gns3server/modules/virtualbox/__init__.py +++ b/gns3server/modules/virtualbox/__init__.py @@ -73,6 +73,8 @@ class VirtualBox(BaseManager): raise VirtualBoxError("VBoxManage {} is not accessible".format(vboxmanage_path)) if not os.access(vboxmanage_path, os.X_OK): raise VirtualBoxError("VBoxManage is not executable") + if os.path.basename(vboxmanage_path) not in ["VBoxManage", "VBoxManage.exe", "vboxmanage"]: + raise VirtualBoxError("Invalid VBoxManage executable name {}".format(os.path.basename(vboxmanage_path))) self._vboxmanage_path = vboxmanage_path return vboxmanage_path diff --git a/tests/modules/virtualbox/test_virtualbox_manager.py b/tests/modules/virtualbox/test_virtualbox_manager.py index 1dc647d6..3faf2e0f 100644 --- a/tests/modules/virtualbox/test_virtualbox_manager.py +++ b/tests/modules/virtualbox/test_virtualbox_manager.py @@ -18,6 +18,8 @@ import pytest import tempfile +import os +import stat from gns3server.modules.virtualbox import VirtualBox from gns3server.modules.virtualbox.virtualbox_error import VirtualBoxError @@ -36,9 +38,28 @@ def test_vm_invalid_vboxmanage_path(manager): with pytest.raises(VirtualBoxError): manager.find_vboxmanage() - def test_vm_non_executable_vboxmanage_path(manager): tmpfile = tempfile.NamedTemporaryFile() with patch("gns3server.config.Config.get_section_config", return_value={"vboxmanage_path": tmpfile.name}): with pytest.raises(VirtualBoxError): manager.find_vboxmanage() + +def test_vm_invalid_executable_name_vboxmanage_path(manager, tmpdir): + path = str(tmpdir / "vpcs") + with open(path, "w+") as f: + f.write(path) + os.chmod(path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) + tmpfile = tempfile.NamedTemporaryFile() + with patch("gns3server.config.Config.get_section_config", return_value={"vboxmanage_path": path}): + with pytest.raises(VirtualBoxError): + manager.find_vboxmanage() + +def test_vboxmanage_path(manager, tmpdir): + path = str(tmpdir / "VBoxManage") + with open(path, "w+") as f: + f.write(path) + os.chmod(path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR) + tmpfile = tempfile.NamedTemporaryFile() + with patch("gns3server.config.Config.get_section_config", return_value={"vboxmanage_path": path}): + assert manager.find_vboxmanage() == path + diff --git a/tests/modules/virtualbox/test_virtualbox_vm.py b/tests/modules/virtualbox/test_virtualbox_vm.py index 8b91431e..be343170 100644 --- a/tests/modules/virtualbox/test_virtualbox_vm.py +++ b/tests/modules/virtualbox/test_virtualbox_vm.py @@ -54,3 +54,4 @@ def test_vm_invalid_virtualbox_api_version(loop, project, manager): with pytest.raises(VirtualBoxError): vm = VirtualBoxVM("test", "00010203-0405-0607-0809-0a0b0c0d0e0f", project, manager, "test", False) loop.run_until_complete(asyncio.async(vm.create())) +