Merge pull request #1079 from enkore/issue/1078

Fix crash regression for UDS introduced in 805f631
This commit is contained in:
TW 2016-05-22 13:38:22 +02:00
commit a1365c9bc7
2 changed files with 21 additions and 3 deletions

View File

@ -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

View File

@ -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)
@ -1244,6 +1255,9 @@ class ArchiverTestCase(ArchiverTestCaseBase):
try:
self.cmd('mount', self.repository_location, mountpoint, fork=True)
self.wait_for_mount(mountpoint)
if has_lchflags:
# remove the file we did not backup, so input and output become equal
os.remove(os.path.join('input', 'flagfile'))
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive', 'input'))
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'archive2', 'input'))
finally:
@ -1265,6 +1279,9 @@ class ArchiverTestCase(ArchiverTestCaseBase):
try:
self.cmd('mount', self.repository_location + '::archive', mountpoint, fork=True)
self.wait_for_mount(mountpoint)
if has_lchflags:
# remove the file we did not backup, so input and output become equal
os.remove(os.path.join('input', 'flagfile'))
self.assert_dirs_equal(self.input_path, os.path.join(mountpoint, 'input'))
finally:
if sys.platform.startswith('linux'):