aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/portage/package/ebuild/prepare_build_dirs.py')
-rw-r--r--lib/portage/package/ebuild/prepare_build_dirs.py41
1 files changed, 24 insertions, 17 deletions
diff --git a/lib/portage/package/ebuild/prepare_build_dirs.py b/lib/portage/package/ebuild/prepare_build_dirs.py
index 659198905..9471179aa 100644
--- a/lib/portage/package/ebuild/prepare_build_dirs.py
+++ b/lib/portage/package/ebuild/prepare_build_dirs.py
@@ -54,7 +54,7 @@ def prepare_build_dirs(myroot=None, settings=None, cleanup=False):
if errno.ENOENT == oe.errno:
pass
elif errno.EPERM == oe.errno:
- writemsg("%s\n" % oe, noiselevel=-1)
+ writemsg(f"{oe}\n", noiselevel=-1)
writemsg(
_("Operation Not Permitted: rmtree('%s')\n") % clean_dir,
noiselevel=-1,
@@ -72,7 +72,7 @@ def prepare_build_dirs(myroot=None, settings=None, cleanup=False):
if errno.EEXIST == oe.errno:
pass
elif errno.EPERM == oe.errno:
- writemsg("%s\n" % oe, noiselevel=-1)
+ writemsg(f"{oe}\n", noiselevel=-1)
writemsg(
_("Operation Not Permitted: makedirs('%s')\n") % dir_path,
noiselevel=-1,
@@ -102,6 +102,15 @@ def prepare_build_dirs(myroot=None, settings=None, cleanup=False):
apply_secpass_permissions(
mysettings[dir_key], uid=portage_uid, gid=portage_gid
)
+ # The setgid bit prevents a lockfile group permission race for bug #468990.
+ ipc_kwargs = {}
+ if portage.data.secpass >= 1:
+ ipc_kwargs["gid"] = portage_gid
+ ipc_kwargs["mode"] = 0o2770
+ ensure_dirs(
+ os.path.join(mysettings["PORTAGE_BUILDDIR"], ".ipc"),
+ **ipc_kwargs,
+ )
except PermissionDenied as e:
writemsg(_("Permission Denied: %s\n") % str(e), noiselevel=-1)
return 1
@@ -142,7 +151,7 @@ def _adjust_perms_msg(settings, msg):
mode="ab",
)
log_file_real = log_file
- except IOError:
+ except OSError:
def write(msg):
pass
@@ -165,7 +174,6 @@ def _adjust_perms_msg(settings, msg):
def _prepare_features_dirs(mysettings):
-
# Use default ABI libdir in accordance with bug #355283.
libdir = None
default_abi = mysettings.get("DEFAULT_ABI")
@@ -228,11 +236,9 @@ def _prepare_features_dirs(mysettings):
except OSError:
continue
if subdir_st.st_gid != portage_gid or (
- (
- stat.S_ISDIR(subdir_st.st_mode)
- and not dirmode
- == (stat.S_IMODE(subdir_st.st_mode) & dirmode)
- )
+ stat.S_ISDIR(subdir_st.st_mode)
+ and not dirmode
+ == (stat.S_IMODE(subdir_st.st_mode) & dirmode)
):
droppriv_fix = True
break
@@ -284,7 +290,7 @@ def _prepare_features_dirs(mysettings):
except PortageException as e:
failure = True
- writemsg("\n!!! %s\n" % str(e), noiselevel=-1)
+ writemsg(f"\n!!! {str(e)}\n", noiselevel=-1)
writemsg(
_("!!! Failed resetting perms on %s='%s'\n")
% (kwargs["basedir_var"], basedir),
@@ -308,7 +314,7 @@ def _prepare_workdir(mysettings):
else:
raise ValueError()
if parsed_mode & 0o7777 != parsed_mode:
- raise ValueError("Invalid file mode: %s" % mode)
+ raise ValueError(f"Invalid file mode: {mode}")
else:
workdir_mode = parsed_mode
except KeyError as e:
@@ -317,7 +323,7 @@ def _prepare_workdir(mysettings):
)
except ValueError as e:
if len(str(e)) > 0:
- writemsg("%s\n" % e)
+ writemsg(f"{e}\n")
writemsg(
_("!!! Unable to parse PORTAGE_WORKDIR_MODE='%s', using %s.\n")
% (mysettings["PORTAGE_WORKDIR_MODE"], oct(workdir_mode))
@@ -355,7 +361,7 @@ def _prepare_workdir(mysettings):
mode=0o2770,
)
except PortageException as e:
- writemsg("!!! %s\n" % str(e), noiselevel=-1)
+ writemsg(f"!!! {str(e)}\n", noiselevel=-1)
writemsg(
_("!!! Permission issues with PORTAGE_LOGDIR='%s'\n")
% mysettings["PORTAGE_LOGDIR"],
@@ -387,7 +393,7 @@ def _prepare_workdir(mysettings):
log_subdir = os.path.join(logdir, "build", mysettings["CATEGORY"])
mysettings["PORTAGE_LOG_FILE"] = os.path.join(
log_subdir,
- "%s:%s.log%s" % (mysettings["PF"], logid_time, compress_log_ext),
+ f"{mysettings['PF']}:{logid_time}.log{compress_log_ext}",
)
else:
log_subdir = logdir
@@ -408,16 +414,17 @@ def _prepare_workdir(mysettings):
try:
_ensure_log_subdirs(logdir, log_subdir)
except PortageException as e:
- writemsg("!!! %s\n" % (e,), noiselevel=-1)
+ writemsg(f"!!! {e}\n", noiselevel=-1)
if os.access(log_subdir, os.W_OK):
logdir_subdir_ok = True
else:
writemsg(
- "!!! %s: %s\n" % (_("Permission Denied"), log_subdir), noiselevel=-1
+ f"!!! {_('Permission Denied')}: {log_subdir}\n",
+ noiselevel=-1,
)
- tmpdir_log_path = os.path.join(mysettings["T"], "build.log%s" % compress_log_ext)
+ tmpdir_log_path = os.path.join(mysettings["T"], f"build.log{compress_log_ext}")
if not logdir_subdir_ok:
# NOTE: When sesandbox is enabled, the local SELinux security policies
# may not allow output to be piped out of the sesandbox domain. The