diff --git a/dangerzone/common.py b/dangerzone/common.py index 9b479c7..637b26b 100644 --- a/dangerzone/common.py +++ b/dangerzone/common.py @@ -1,3 +1,4 @@ +import os import platform import tempfile @@ -8,16 +9,27 @@ class Common(object): """ def __init__(self): - # Temporary directory to store pixel data - # Note in macOS, temp dirs must be in /tmp (or a few other paths) for Docker to mount them + # Temporary directory to store pixel data and safe PDFs if platform.system() == "Windows": self.pixel_dir = tempfile.TemporaryDirectory(prefix="dangerzone-pixel-") self.safe_dir = tempfile.TemporaryDirectory(prefix="dangerzone-safe-") - else: + elif platform.system() == "Darwin": + # In macOS, temp dirs must be in /tmp (or a few other paths) for Docker to mount them self.pixel_dir = tempfile.TemporaryDirectory( prefix="/tmp/dangerzone-pixel-" ) self.safe_dir = tempfile.TemporaryDirectory(prefix="/tmp/dangerzone-safe-") + else: + # In Linux, temp dirs must be in the homedir for the snap package version of Docker to mount them + cache_dir = os.path.expanduser("~/.cache/dangerzone") + os.makedirs(cache_dir, exist_ok=True) + self.pixel_dir = tempfile.TemporaryDirectory( + prefix=os.path.join(cache_dir, "pixel-") + ) + self.safe_dir = tempfile.TemporaryDirectory( + prefix=os.path.join(cache_dir, "safe-") + ) + print( f"Temporary directories created, dangerous={self.pixel_dir.name}, safe={self.safe_dir.name}" ) diff --git a/dangerzone/container.py b/dangerzone/container.py index ab1bd98..a47f5b6 100644 --- a/dangerzone/container.py +++ b/dangerzone/container.py @@ -4,6 +4,7 @@ import subprocess import sys import pipes import getpass +import shutil # What is the container runtime for this platform? if platform.system() == "Darwin": @@ -11,7 +12,7 @@ if platform.system() == "Darwin": elif platform.system() == "Windows": container_runtime = "C:\\Program Files\\Docker\\Docker\\resources\\bin\\docker.exe" else: - container_runtime = "/usr/bin/docker" + container_runtime = shutil.which("docker") # Define startupinfo for subprocesses if platform.system() == "Windows":