chmod should be called before chown to avoid SUID and SGRP reset.

This commit is contained in:
Jonas Borgström 2013-05-18 23:03:16 +02:00
parent 1dc1411302
commit b994203c01
2 changed files with 5 additions and 5 deletions

View File

@ -285,10 +285,6 @@ class Archive(object):
xa.set(k, v)
except (IOError, KeyError):
pass
if have_lchmod:
os.lchmod(path, item['mode'])
elif not symlink:
os.chmod(path, item['mode'])
uid = gid = None
if not self.numeric_owner:
uid = user2uid(item['user'])
@ -299,6 +295,10 @@ class Archive(object):
os.lchown(path, uid, gid)
except OSError:
pass
if have_lchmod:
os.lchmod(path, item['mode'])
elif not symlink:
os.chmod(path, item['mode'])
if not symlink:
# FIXME: We should really call futimes here (c extension required)
os.utime(path, (item['mtime'], item['mtime']))

View File

@ -104,7 +104,7 @@ class Test(unittest.TestCase):
# File owner
os.chown('input/file1', 100, 200)
# File mode
os.chmod('input/file1', 0600)
os.chmod('input/file1', 7755)
os.chmod('input/dir2', 0700)
# Block device
os.mknod('input/bdev', 0600 | stat.S_IFBLK, os.makedev(10, 20))