From b33ba5f8ea84f05838e9c0fe1d4d8ac167eb650b Mon Sep 17 00:00:00 2001 From: Julien Duponchelle Date: Thu, 20 Jul 2017 15:37:56 +0200 Subject: [PATCH] Don't allow user to overwrite GNS3 docker environment variables Fix #1098 --- gns3server/compute/docker/docker_vm.py | 5 ++++- tests/compute/docker/test_docker_vm.py | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/gns3server/compute/docker/docker_vm.py b/gns3server/compute/docker/docker_vm.py index acfe16ab..41bf46b8 100644 --- a/gns3server/compute/docker/docker_vm.py +++ b/gns3server/compute/docker/docker_vm.py @@ -313,7 +313,10 @@ class DockerVM(BaseNode): params["Env"].append("GNS3_VOLUMES={}".format(":".join(self._volumes))) if self._environment: - params["Env"] += [e.strip() for e in self._environment.split("\n")] + for e in self._environment.split("\n"): + e = e.strip() + if not e.startswith("GNS3_"): + params["Env"].append(e) if self._console_type == "vnc": yield from self._start_vnc() diff --git a/tests/compute/docker/test_docker_vm.py b/tests/compute/docker/test_docker_vm.py index 01c825dd..6b38f5a6 100644 --- a/tests/compute/docker/test_docker_vm.py +++ b/tests/compute/docker/test_docker_vm.py @@ -30,8 +30,7 @@ from gns3server.compute.docker import Docker from gns3server.utils.get_resource import get_resource -from unittest.mock import patch, MagicMock, PropertyMock, call -from gns3server.config import Config +from unittest.mock import patch, MagicMock, call @pytest.fixture() @@ -244,15 +243,19 @@ def test_create_start_cmd(loop, project, manager): def test_create_environment(loop, project, manager): + """ + Allow user to pass an environnement. User can't override our + internal variables + """ response = { "Id": "e90e34656806", "Warnings": [] } - with asyncio_patch("gns3server.compute.docker.Docker.list_images", return_value=[{"image": "ubuntu"}]) as mock_list_images: + with asyncio_patch("gns3server.compute.docker.Docker.list_images", return_value=[{"image": "ubuntu"}]): with asyncio_patch("gns3server.compute.docker.Docker.query", return_value=response) as mock: vm = DockerVM("test", str(uuid.uuid4()), project, manager, "ubuntu") - vm.environment = "YES=1\nNO=0" + vm.environment = "YES=1\nNO=0\nGNS3_MAX_ETHERNET=eth2" loop.run_until_complete(asyncio.async(vm.create())) mock.assert_called_with("POST", "containers/create", data={ "Tty": True,