From 77bf8d07fb6f82ddf5eec1c8c57e895ee7c783dc Mon Sep 17 00:00:00 2001 From: ChuckBuilds <33324927+ChuckBuilds@users.noreply.github.com> Date: Sat, 19 Apr 2025 18:32:19 -0500 Subject: [PATCH] fix: improve cache directory handling for sudo execution with proper user ownership --- src/cache_manager.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cache_manager.py b/src/cache_manager.py index 416117ad..bc26a5ad 100644 --- a/src/cache_manager.py +++ b/src/cache_manager.py @@ -23,11 +23,21 @@ class CacheManager: # Initialize logger first self.logger = logging.getLogger(__name__) + # Get the actual user's home directory, even when running with sudo + try: + # Try to get the real user's home directory + real_user = os.environ.get('SUDO_USER') or os.environ.get('USER') + if real_user: + home_dir = f"/home/{real_user}" + else: + home_dir = os.path.expanduser('~') + except Exception: + home_dir = os.path.expanduser('~') + # Determine the appropriate cache directory if os.geteuid() == 0: # Running as root/sudo self.cache_dir = "/var/cache/ledmatrix" else: - home_dir = os.path.expanduser('~') self.cache_dir = os.path.join(home_dir, '.ledmatrix_cache') self._memory_cache = {} # In-memory cache for faster access @@ -44,6 +54,16 @@ class CacheManager: # Set permissions to allow both root and the user to access if os.geteuid() == 0: # Running as root/sudo os.chmod(self.cache_dir, 0o777) # Full permissions for all users + # Also set ownership to the real user if we're running as root + real_user = os.environ.get('SUDO_USER') + if real_user: + try: + import pwd + uid = pwd.getpwnam(real_user).pw_uid + gid = pwd.getpwnam(real_user).pw_gid + os.chown(self.cache_dir, uid, gid) + except Exception as e: + self.logger.warning(f"Could not set cache directory ownership: {e}") except Exception as e: self.logger.error(f"Failed to create cache directory: {e}") # Fallback to temp directory if we can't create the cache directory