Merge pull request #166 from ThomasWaldmann/fix-restore-xattrs

Fix restore xattrs
This commit is contained in:
TW 2015-08-29 00:26:38 +02:00
commit acf5ddc68d
1 changed files with 11 additions and 8 deletions

View File

@ -323,13 +323,16 @@ class Archive:
raise Exception('Unknown archive item type %r' % item[b'mode']) raise Exception('Unknown archive item type %r' % item[b'mode'])
def restore_attrs(self, path, item, symlink=False, fd=None): def restore_attrs(self, path, item, symlink=False, fd=None):
xattrs = item.get(b'xattrs') xattrs = item.get(b'xattrs', {})
if xattrs:
for k, v in xattrs.items(): for k, v in xattrs.items():
try: try:
xattr.setxattr(fd or path, k, v, follow_symlinks=False) xattr.setxattr(fd or path, k, v, follow_symlinks=False)
except OSError as e: except OSError as e:
if e.errno != errno.ENOTSUP: if e.errno not in (errno.ENOTSUP, errno.EACCES, ):
# only raise if the errno is not on our ignore list:
# ENOTSUP == xattrs not supported here
# EACCES == permission denied to set this specific xattr
# (this may happen related to security.* keys)
raise raise
uid = gid = None uid = gid = None
if not self.numeric_owner: if not self.numeric_owner: