summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-01-10 23:07:06 +0000
committerZac Medico <zmedico@gentoo.org>2008-01-10 23:07:06 +0000
commitd936a954f95c325be257e423f831a08839fcb396 (patch)
tree27928e728c644ed0aa90c3e525191b4683f8d2a3 /pym
parent3450fc768a01f461e14d6dde1fd1dbe59eb97690 (diff)
downloadportage-d936a954f95c325be257e423f831a08839fcb396.tar.gz
portage-d936a954f95c325be257e423f831a08839fcb396.tar.bz2
portage-d936a954f95c325be257e423f831a08839fcb396.zip
Bug #162542 - When dropping privileges for FEATURES=userpriv,
automatically detect permission problems with CCACHE_DIR and recursively adjust permissions only when necessary. (trunk r9160) svn path=/main/branches/2.1.2/; revision=9161
Diffstat (limited to 'pym')
-rw-r--r--pym/portage.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/pym/portage.py b/pym/portage.py
index a7efc64b4..d83cd6e0e 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -4038,6 +4038,11 @@ def prepare_build_dirs(myroot, mysettings, cleanup):
dirmode = 02070
filemode = 060
modemask = 02
+ restrict = mysettings.get("PORTAGE_RESTRICT","").split()
+ from portage_data import secpass
+ droppriv = secpass >= 2 and \
+ "userpriv" in mysettings.features and \
+ "userpriv" not in restrict
for myfeature, kwargs in features_dirs.iteritems():
if myfeature in mysettings.features:
basedir = mysettings[kwargs["basedir_var"]]
@@ -4054,7 +4059,13 @@ def prepare_build_dirs(myroot, mysettings, cleanup):
# Generally, we only want to apply permissions for
# initial creation. Otherwise, we don't know exactly what
# permissions the user wants, so should leave them as-is.
- if modified or kwargs["always_recurse"]:
+ droppriv_fix = False
+ if droppriv:
+ st = os.stat(mydir)
+ if st.st_gid != portage_gid or \
+ not stat.S_IMODE(st.st_mode) & dirmode:
+ droppriv_fix = True
+ if modified or kwargs["always_recurse"] or droppriv_fix:
if modified:
writemsg("Adjusting permissions recursively: '%s'\n" % mydir,
noiselevel=-1)