Kaydet (Commit) e87ed38f authored tarafından Joffrey F's avatar Joffrey F

Ignore socket files in utils.tar

Signed-off-by: 's avatarJoffrey F <joffrey@docker.com>
üst 8ca5b2b3
...@@ -4,7 +4,6 @@ import os ...@@ -4,7 +4,6 @@ import os
import os.path import os.path
import json import json
import shlex import shlex
import sys
import tarfile import tarfile
import tempfile import tempfile
import warnings import warnings
...@@ -15,6 +14,7 @@ from fnmatch import fnmatch ...@@ -15,6 +14,7 @@ from fnmatch import fnmatch
import requests import requests
import six import six
from .. import constants
from .. import errors from .. import errors
from .. import tls from .. import tls
...@@ -90,7 +90,12 @@ def tar(path, exclude=None, dockerfile=None, fileobj=None, gzip=False): ...@@ -90,7 +90,12 @@ def tar(path, exclude=None, dockerfile=None, fileobj=None, gzip=False):
for path in sorted(exclude_paths(root, exclude, dockerfile=dockerfile)): for path in sorted(exclude_paths(root, exclude, dockerfile=dockerfile)):
i = t.gettarinfo(os.path.join(root, path), arcname=path) i = t.gettarinfo(os.path.join(root, path), arcname=path)
if sys.platform == 'win32': if i is None:
# This happens when we encounter a socket file. We can safely
# ignore it and proceed.
continue
if constants.IS_WINDOWS_PLATFORM:
# Windows doesn't keep track of the execute bit, so we make files # Windows doesn't keep track of the execute bit, so we make files
# and directories executable by default. # and directories executable by default.
i.mode = i.mode & 0o755 | 0o111 i.mode = i.mode & 0o755 | 0o111
......
...@@ -5,6 +5,7 @@ import json ...@@ -5,6 +5,7 @@ import json
import os import os
import os.path import os.path
import shutil import shutil
import socket
import sys import sys
import tarfile import tarfile
import tempfile import tempfile
...@@ -894,6 +895,20 @@ class TarTest(unittest.TestCase): ...@@ -894,6 +895,20 @@ class TarTest(unittest.TestCase):
sorted(tar_data.getnames()), ['bar', 'bar/foo', 'foo'] sorted(tar_data.getnames()), ['bar', 'bar/foo', 'foo']
) )
def test_tar_socket_file(self):
base = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, base)
for d in ['foo', 'bar']:
os.makedirs(os.path.join(base, d))
sock = socket.socket(socket.AF_UNIX)
self.addCleanup(sock.close)
sock.bind(os.path.join(base, 'test.sock'))
with tar(base) as archive:
tar_data = tarfile.open(fileobj=archive)
self.assertEqual(
sorted(tar_data.getnames()), ['bar', 'foo']
)
class ShouldCheckDirectoryTest(unittest.TestCase): class ShouldCheckDirectoryTest(unittest.TestCase):
exclude_patterns = [ exclude_patterns = [
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment