diff --git a/src/borg/testsuite/archiver.py b/src/borg/testsuite/archiver.py index 661f5fb40..c978ba280 100644 --- a/src/borg/testsuite/archiver.py +++ b/src/borg/testsuite/archiver.py @@ -1370,15 +1370,15 @@ class ArchiverTestCase(ArchiverTestCaseBase): input_abspath = os.path.abspath('input/file') with patch.object(xattr, 'setxattr', patched_setxattr_E2BIG): out = self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING) - assert '>: Value or key of extended attribute user.attribute is too big for this filesystem\n' in out + assert ': when setting extended attribute user.attribute: too big for this filesystem\n' in out os.remove(input_abspath) with patch.object(xattr, 'setxattr', patched_setxattr_ENOTSUP): out = self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING) - assert '>: Extended attributes are not supported on this filesystem\n' in out + assert ': when setting extended attribute user.attribute: xattrs not supported on this filesystem\n' in out os.remove(input_abspath) with patch.object(xattr, 'setxattr', patched_setxattr_EACCES): out = self.cmd('extract', self.repository_location + '::test', exit_code=EXIT_WARNING) - assert '>: Permission denied when setting extended attribute user.attribute\n' in out + assert ': when setting extended attribute user.attribute: Permission denied\n' in out assert os.path.isfile(input_abspath) def test_path_normalization(self): diff --git a/src/borg/xattr.py b/src/borg/xattr.py index 5bfc1b677..f1942a996 100644 --- a/src/borg/xattr.py +++ b/src/borg/xattr.py @@ -133,19 +133,19 @@ def set_all(path, xattrs, follow_symlinks=False): path_str = '' % path else: path_str = os.fsdecode(path) + msg_format = '%s: when setting extended attribute %s: %%s' % (path_str, k_str) if e.errno == errno.E2BIG: - logger.warning('%s: Value or key of extended attribute %s is too big for this filesystem' % ( - path_str, k_str)) + err_str = 'too big for this filesystem' elif e.errno == errno.ENOTSUP: - logger.warning('%s: Extended attributes are not supported on this filesystem' % path_str) - elif e.errno == errno.EACCES: - # permission denied to set this specific xattr (this may happen related to security.* keys) - logger.warning('%s: Permission denied when setting extended attribute %s' % (path_str, k_str)) + err_str = 'xattrs not supported on this filesystem' elif e.errno == errno.ENOSPC: # ext4 reports ENOSPC when trying to set an xattr with >4kiB while ext4 can only support 4kiB xattrs # (in this case, this is NOT a "disk full" error, just a ext4 limitation). - logger.warning('%s: No space left on device while setting extended attribute %s (len = %d)' % ( - path_str, k_str, len(v))) + err_str = 'no space left on device [xattr len = %d]' % (len(v),) else: - raise + # generic handler + # EACCES: permission denied to set this specific xattr (this may happen related to security.* keys) + # EPERM: operation not permitted + err_str = os.strerror(e.errno) + logger.warning(msg_format % err_str) return warning