diff --git a/borg/platform_linux.pyx b/borg/platform_linux.pyx index 142185f3b..e60768aaa 100644 --- a/borg/platform_linux.pyx +++ b/borg/platform_linux.pyx @@ -86,10 +86,11 @@ def set_flags(path, bsd_flags, fd=None): def get_flags(path, st): - if stat.S_ISLNK(st.st_mode): - return 0 cdef int linux_flags - fd = os.open(path, os.O_RDONLY|os.O_NONBLOCK|os.O_NOFOLLOW) + try: + fd = os.open(path, os.O_RDONLY|os.O_NONBLOCK|os.O_NOFOLLOW) + except OSError: + return 0 try: if ioctl(fd, FS_IOC_GETFLAGS, &linux_flags) == -1: return 0 diff --git a/borg/testsuite/archiver.py b/borg/testsuite/archiver.py index 5b8cf95af..173a01e18 100644 --- a/borg/testsuite/archiver.py +++ b/borg/testsuite/archiver.py @@ -5,6 +5,7 @@ import inspect from io import StringIO import logging import random +import socket import stat import subprocess import sys @@ -357,6 +358,16 @@ class ArchiverTestCase(ArchiverTestCaseBase): # the interesting parts of info_output2 and info_output should be same self.assert_equal(filter(info_output), filter(info_output2)) + def test_unix_socket(self): + self.cmd('init', self.repository_location) + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.bind(os.path.join(self.input_path, 'unix-socket')) + self.cmd('create', self.repository_location + '::test', 'input') + sock.close() + with changedir('output'): + self.cmd('extract', self.repository_location + '::test') + assert not os.path.exists('input/unix-socket') + def test_symlink_extract(self): self.create_test_files() self.cmd('init', self.repository_location)