mirror of
https://github.com/borgbackup/borg.git
synced 2026-06-11 09:59:19 -04:00
Merge pull request #2198 from Abogical/too-big-xattr
Handle big extended attributes. Fixes #2161
This commit is contained in:
commit
89114d4885
2 changed files with 19 additions and 1 deletions
|
|
@ -688,7 +688,10 @@ Utilization of max. archive size: {csize_max:.0%}
|
|||
try:
|
||||
xattr.setxattr(fd or path, k, v, follow_symlinks=False)
|
||||
except OSError as e:
|
||||
if e.errno not in (errno.ENOTSUP, errno.EACCES):
|
||||
if e.errno == errno.E2BIG:
|
||||
logger.warning('%s: Value or key of extended attribute %s is too big for this filesystem' %
|
||||
(path, k.decode()))
|
||||
elif 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
|
||||
|
|
|
|||
|
|
@ -1046,6 +1046,21 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
|||
self.cmd('extract', self.repository_location + '::test')
|
||||
assert xattr.getxattr('input/file', 'security.capability') == capabilities
|
||||
|
||||
@pytest.mark.skipif(not xattr.XATTR_FAKEROOT, reason='xattr not supported on this system or on this version of'
|
||||
'fakeroot')
|
||||
def test_extract_big_xattrs(self):
|
||||
def patched_setxattr(*args, **kwargs):
|
||||
raise OSError(errno.E2BIG, 'E2BIG')
|
||||
self.create_regular_file('file')
|
||||
xattr.setxattr('input/file', 'attribute', 'value')
|
||||
self.cmd('init', self.repository_location, '-e' 'none')
|
||||
self.cmd('create', self.repository_location + '::test', 'input')
|
||||
with changedir('output'):
|
||||
with patch.object(xattr, 'setxattr', patched_setxattr):
|
||||
out = self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING)
|
||||
assert out == (os.path.abspath('input/file') + ': Value or key of extended attribute attribute is too big'
|
||||
'for this filesystem\n')
|
||||
|
||||
def test_path_normalization(self):
|
||||
self.cmd('init', '--encryption=repokey', self.repository_location)
|
||||
self.create_regular_file('dir1/dir2/file', size=1024 * 80)
|
||||
|
|
|
|||
Loading…
Reference in a new issue