From 1a307edbcafd412c2680c841c474e5c467081696 Mon Sep 17 00:00:00 2001 From: YueGuobin Date: Wed, 10 Jun 2026 00:14:40 +0800 Subject: [PATCH] Fix _fix_permissions error handling and list_node_files PermissionError - _fix_permissions: capture stderr, check returncode, only set _permissions_fixed on success instead of silently marking as fixed - list_node_files: wrap os.scandir in try-except to handle PermissionError gracefully --- gns3server/compute/docker/docker_vm.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gns3server/compute/docker/docker_vm.py b/gns3server/compute/docker/docker_vm.py index 988d61cf3..53f8dcffb 100644 --- a/gns3server/compute/docker/docker_vm.py +++ b/gns3server/compute/docker/docker_vm.py @@ -772,11 +772,19 @@ class DockerVM(BaseNode): ' && /gns3/bin/busybox chown {uid}:{gid} -R "{path}"'.format( uid=os.getuid(), gid=os.getgid(), path=volume ), + stderr=asyncio.subprocess.PIPE, ) except OSError as e: raise DockerError(f"Could not fix permissions for {volume}: {e}") await process.wait() - self._permissions_fixed = True + if process.returncode != 0: + stderr = (await process.stderr.read()).decode(errors="replace").strip() + log.error( + "Failed to fix permissions on '%s' for container '%s': %s", + volume, self._name, stderr or f"exit code {process.returncode}" + ) + else: + self._permissions_fixed = True async def _start_vnc_process(self, restart=False): """