summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-04-08 22:46:36 +0000
committerZac Medico <zmedico@gentoo.org>2008-04-08 22:46:36 +0000
commitc4b00468909daab5b1ff48178cfaef6b60a66f02 (patch)
treec7135f19e56767cc4701985d5979124d1efce2df /pym
parent405f5103c2b2877ffde4f3b9d37edc5a9d6f90b8 (diff)
downloadportage-c4b00468909daab5b1ff48178cfaef6b60a66f02.tar.gz
portage-c4b00468909daab5b1ff48178cfaef6b60a66f02.tar.bz2
portage-c4b00468909daab5b1ff48178cfaef6b60a66f02.zip
Bug #162542 - When checking permissions inside CCACHE_DIR for compatibility
with FEATURES=userpriv, check the permissions on files inside the directory to decide whether to fix the permissions. (trunk r9759) svn path=/main/branches/2.1.2/; revision=9760
Diffstat (limited to 'pym')
-rw-r--r--pym/portage.py30
1 files changed, 26 insertions, 4 deletions
diff --git a/pym/portage.py b/pym/portage.py
index cac0316b7..ca3445548 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -4234,12 +4234,34 @@ def prepare_build_dirs(myroot, mysettings, cleanup):
if droppriv:
st = os.stat(mydir)
if st.st_gid != portage_gid or \
- not stat.S_IMODE(st.st_mode) & dirmode:
+ not dirmode == (stat.S_IMODE(st.st_mode) & dirmode):
droppriv_fix = True
+ if not droppriv_fix:
+ # Check permissions of files in the directory.
+ for filename in os.listdir(mydir):
+ try:
+ subdir_st = os.lstat(
+ os.path.join(mydir, filename))
+ 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)) or \
+ (not stat.S_ISDIR(subdir_st.st_mode) and \
+ not filemode == (stat.S_IMODE(subdir_st.st_mode) & filemode))):
+ droppriv_fix = True
+ break
+ if droppriv_fix:
+ writemsg(colorize("WARN", " * ") + \
+ "Adjusting permissions " + \
+ "for FEATURES=userpriv: '%s'\n" % mydir,
+ noiselevel=-1)
+ elif modified:
+ writemsg(colorize("WARN", " * ") + \
+ "Adjusting permissions " + \
+ "for FEATURES=%s: '%s'\n" % (myfeature, mydir),
+ noiselevel=-1)
if modified or kwargs["always_recurse"] or droppriv_fix:
- if modified:
- writemsg("Adjusting permissions recursively: '%s'\n" % mydir,
- noiselevel=-1)
def onerror(e):
raise # The feature is disabled if a single error
# occurs during permissions adjustment.