|
|
if droppriv: | if droppriv: |
st = os.stat(mydir) | st = os.stat(mydir) |
if st.st_gid != portage_gid or \ | 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 | 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 or kwargs["always_recurse"] or droppriv_fix: |
if modified: |
|
writemsg("Adjusting permissions recursively: '%s'\n" % mydir, |
|
noiselevel=-1) |
|
def onerror(e): | def onerror(e): |
raise # The feature is disabled if a single error | raise # The feature is disabled if a single error |
# occurs during permissions adjustment. | # occurs during permissions adjustment. |