]> git.ipfire.org Git - thirdparty/mkosi.git/commitdiff
Introduce INVOKING_USER.mkdir()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Tue, 30 Jan 2024 13:43:12 +0000 (14:43 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 31 Jan 2024 13:24:43 +0000 (14:24 +0100)
This function creates a directory as the appropriate user depending
on where the directory is being created.

mkosi/__init__.py
mkosi/user.py

index dc7a5b68c72683599684bac8aeeb0a67238b60ff..75eca8fb9e16480f0f82f9d2dedc298fef2e3e9c 100644 (file)
@@ -3538,15 +3538,14 @@ def run_build(args: Args, config: Config, *, resources: Path) -> None:
     ):
         check_tools(config, Verb.build)
 
-        # Create these as the invoking user to make sure they're owned by the user running mkosi.
         for p in (
             config.output_dir,
             config.cache_dir,
             config.build_dir,
             config.workspace_dir,
         ):
-            if p:
-                run(["mkdir", "--parents", p], user=INVOKING_USER.uid, group=INVOKING_USER.gid)
+            if p and not p.exists():
+                INVOKING_USER.mkdir(p)
 
         with (
             acl_toggle_build(config, INVOKING_USER.uid),
index a8725c66347a091d3e02987616912af6885c7c16..585b51cfcf640a315e319f6295f005c402917448 100644 (file)
@@ -9,7 +9,7 @@ import pwd
 from pathlib import Path
 
 from mkosi.log import die
-from mkosi.run import spawn
+from mkosi.run import run, spawn
 from mkosi.util import flock
 
 SUBRANGE = 65536
@@ -55,6 +55,13 @@ class INVOKING_USER:
 
         return cache / "mkosi"
 
+    @classmethod
+    def mkdir(cls, path: Path) -> Path:
+        user = cls.uid if cls.is_regular_user() and path.is_relative_to(cls.home()) else os.getuid()
+        group = cls.gid if cls.is_regular_user() and path.is_relative_to(cls.home()) else os.getgid()
+        run(["mkdir", "--parents", path], user=user, group=group)
+        return path
+
 
 def read_subrange(path: Path) -> int:
     uid = str(os.getuid())