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
import os.path
import json
import shlex
import sys
import tarfile
import tempfile
import warnings
......@@ -15,6 +14,7 @@ from fnmatch import fnmatch
import requests
import six
from .. import constants
from .. import errors
from .. import tls
......@@ -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)):
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
# and directories executable by default.
i.mode = i.mode & 0o755 | 0o111
......
......@@ -5,6 +5,7 @@ import json
import os
import os.path
import shutil
import socket
import sys
import tarfile
import tempfile
......@@ -894,6 +895,20 @@ class TarTest(unittest.TestCase):
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):
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