mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
bpo-34139: Remove unix datagram socket from FS before binding (GH-8323)
https://bugs.python.org/issue34139
This commit is contained in:
parent
5aaac94eeb
commit
56065d4c8a
3 changed files with 29 additions and 0 deletions
|
@ -20,6 +20,7 @@ import heapq
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
|
import stat
|
||||||
import subprocess
|
import subprocess
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
@ -1183,6 +1184,19 @@ class BaseEventLoop(events.AbstractEventLoop):
|
||||||
for addr in (local_addr, remote_addr):
|
for addr in (local_addr, remote_addr):
|
||||||
if addr is not None and not isinstance(addr, str):
|
if addr is not None and not isinstance(addr, str):
|
||||||
raise TypeError('string is expected')
|
raise TypeError('string is expected')
|
||||||
|
|
||||||
|
if local_addr and local_addr[0] not in (0, '\x00'):
|
||||||
|
try:
|
||||||
|
if stat.S_ISSOCK(os.stat(local_addr).st_mode):
|
||||||
|
os.remove(local_addr)
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
except OSError as err:
|
||||||
|
# Directory may have permissions only to create socket.
|
||||||
|
logger.error('Unable to check or remove stale UNIX '
|
||||||
|
'socket %r: %r',
|
||||||
|
local_addr, err)
|
||||||
|
|
||||||
addr_pairs_info = (((family, proto),
|
addr_pairs_info = (((family, proto),
|
||||||
(local_addr, remote_addr)), )
|
(local_addr, remote_addr)), )
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1662,6 +1662,20 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase):
|
||||||
self.loop.run_until_complete(protocol.done)
|
self.loop.run_until_complete(protocol.done)
|
||||||
self.assertEqual('CLOSED', protocol.state)
|
self.assertEqual('CLOSED', protocol.state)
|
||||||
|
|
||||||
|
@unittest.skipUnless(hasattr(socket, 'AF_UNIX'), 'No UNIX Sockets')
|
||||||
|
def test_create_datagram_endpoint_existing_sock_unix(self):
|
||||||
|
with test_utils.unix_socket_path() as path:
|
||||||
|
sock = socket.socket(socket.AF_UNIX, type=socket.SOCK_DGRAM)
|
||||||
|
sock.bind(path)
|
||||||
|
sock.close()
|
||||||
|
|
||||||
|
coro = self.loop.create_datagram_endpoint(
|
||||||
|
lambda: MyDatagramProto(create_future=True, loop=self.loop),
|
||||||
|
path, family=socket.AF_UNIX)
|
||||||
|
transport, protocol = self.loop.run_until_complete(coro)
|
||||||
|
transport.close()
|
||||||
|
self.loop.run_until_complete(protocol.done)
|
||||||
|
|
||||||
def test_create_datagram_endpoint_sock_sockopts(self):
|
def test_create_datagram_endpoint_sock_sockopts(self):
|
||||||
class FakeSock:
|
class FakeSock:
|
||||||
type = socket.SOCK_DGRAM
|
type = socket.SOCK_DGRAM
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Remove stale unix datagram socket before binding
|
Loading…
Add table
Add a link
Reference in a new issue