From 48217f1367ef34512343971f74faae538a546464 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Thu, 26 Sep 2024 09:51:15 +0200 Subject: [PATCH] chroot_scan: create result directory with appropriate permissions To make the fix possible, we needed to make the result directory creation method public. Fixes: #1467 --- mock/py/mockbuild/buildroot.py | 9 ++++++--- mock/py/mockbuild/plugins/chroot_scan.py | 2 +- .../unified-resultdir-preparation.bugfix | 5 +++++ 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 releng/release-notes-next/unified-resultdir-preparation.bugfix diff --git a/mock/py/mockbuild/buildroot.py b/mock/py/mockbuild/buildroot.py index 8c34bb711..be21fb9a8 100644 --- a/mock/py/mockbuild/buildroot.py +++ b/mock/py/mockbuild/buildroot.py @@ -213,7 +213,10 @@ def _setup_basedir(self): os.chmod(self.basedir, 0o775) @traceLog() - def _setup_result_dir(self): + def create_resultdir(self): + """ + (re)create self.resultdir directory with appropriate permissions + """ self._setup_basedir() with self.uid_manager: try: @@ -300,7 +303,7 @@ def _init(self, prebuild): # intentionally we do not call bootstrap hook here - it does not have sense self._setup_nosync() self.chroot_was_initialized = self.chroot_is_initialized() - self._setup_result_dir() + self.create_resultdir() getLog().info("calling preinit hooks") self.plugins.call_hooks('preinit') # intentionally we do not call bootstrap hook here - it does not have sense @@ -629,7 +632,7 @@ def resetLogging(self, force=False): return self.logging_initialized = True - self._setup_result_dir() + self.create_resultdir() with self.uid_manager: # attach logs to log files. diff --git a/mock/py/mockbuild/plugins/chroot_scan.py b/mock/py/mockbuild/plugins/chroot_scan.py index 539c7d34d..c417a30c0 100644 --- a/mock/py/mockbuild/plugins/chroot_scan.py +++ b/mock/py/mockbuild/plugins/chroot_scan.py @@ -56,7 +56,7 @@ def __scanChroot(self): regexstr = "|".join(self.scan_opts['regexes']) regex = re.compile(regexstr) chroot = self.buildroot.make_chroot_path() - file_util.mkdirIfAbsent(self.resultdir) + self.buildroot.create_resultdir() count = 0 logger = getLog() logger.debug("chroot_scan: Starting scan of %s", chroot) diff --git a/releng/release-notes-next/unified-resultdir-preparation.bugfix b/releng/release-notes-next/unified-resultdir-preparation.bugfix new file mode 100644 index 000000000..0211f08b2 --- /dev/null +++ b/releng/release-notes-next/unified-resultdir-preparation.bugfix @@ -0,0 +1,5 @@ +Several internal code locations attempt to ensure that the result directory +exists, creating it if necessary. However, these locations handled it +inconsistently, sometimes neglecting to [change the ownership][issue#1467] of +the result directory. Now, all locations use a single method dedicated to +result directory preparation.