Kaydet (Commit) 383c32dd authored tarafından Senthil Kumaran's avatar Senthil Kumaran

Issue10063 - file:// scheme will stop accessing remote hosts via ftp protocol

üst 6d7be5f8
...@@ -1004,8 +1004,12 @@ FileHandler Objects ...@@ -1004,8 +1004,12 @@ FileHandler Objects
.. method:: FileHandler.file_open(req) .. method:: FileHandler.file_open(req)
Open the file locally, if there is no host name, or the host name is Open the file locally, if there is no host name, or the host name is
``'localhost'``. Change the protocol to ``ftp`` otherwise, and retry opening it ``'localhost'``.
using :attr:`parent`.
This method is applicable only for local hostnames. When a remote hostname
is given, an :exc:`URLError` is raised.
.. versionchanged:: 3.2
.. _ftp-handler-objects: .. _ftp-handler-objects:
......
...@@ -731,11 +731,11 @@ class HandlerTests(unittest.TestCase): ...@@ -731,11 +731,11 @@ class HandlerTests(unittest.TestCase):
# file:///blah.txt (a file) # file:///blah.txt (a file)
# file://ftp.example.com/blah.txt (an ftp URL) # file://ftp.example.com/blah.txt (an ftp URL)
for url, ftp in [ for url, ftp in [
("file://ftp.example.com//foo.txt", True), ("file://ftp.example.com//foo.txt", False),
("file://ftp.example.com///foo.txt", False), ("file://ftp.example.com///foo.txt", False),
# XXXX bug: fails with OSError, should be URLError # XXXX bug: fails with OSError, should be URLError
("file://ftp.example.com/foo.txt", False), ("file://ftp.example.com/foo.txt", False),
("file://somehost//foo/something.txt", True), ("file://somehost//foo/something.txt", False),
("file://localhost//foo/something.txt", False), ("file://localhost//foo/something.txt", False),
]: ]:
req = Request(url) req = Request(url)
......
...@@ -1228,8 +1228,8 @@ class FileHandler(BaseHandler): ...@@ -1228,8 +1228,8 @@ class FileHandler(BaseHandler):
url = req.selector url = req.selector
if url[:2] == '//' and url[2:3] != '/' and (req.host and if url[:2] == '//' and url[2:3] != '/' and (req.host and
req.host != 'localhost'): req.host != 'localhost'):
req.type = 'ftp' if not req.host is self.get_names():
return self.parent.open(req) raise URLError("file:// scheme is supported only on localhost")
else: else:
return self.open_local_file(req) return self.open_local_file(req)
...@@ -1712,7 +1712,7 @@ class URLopener: ...@@ -1712,7 +1712,7 @@ class URLopener:
if not isinstance(url, str): if not isinstance(url, str):
raise URLError('file error', 'proxy support for file protocol currently not implemented') raise URLError('file error', 'proxy support for file protocol currently not implemented')
if url[:2] == '//' and url[2:3] != '/' and url[2:12].lower() != 'localhost/': if url[:2] == '//' and url[2:3] != '/' and url[2:12].lower() != 'localhost/':
return self.open_ftp(url) raise ValueError("file:// scheme is supported only on localhost")
else: else:
return self.open_local_file(url) return self.open_local_file(url)
......
...@@ -18,6 +18,12 @@ Core and Builtins ...@@ -18,6 +18,12 @@ Core and Builtins
Library Library
------- -------
- Issue #Issue10063: file:// scheme will stop accessing remote hosts via ftp
protocol. file:// urls had fallback to access remote hosts via ftp. This was
not correct, change is made to raise a URLError when a remote host is tried
to access via file:// scheme.
- Issue #1710703: Write structures for an empty ZIP archive when a ZipFile is - Issue #1710703: Write structures for an empty ZIP archive when a ZipFile is
created in modes 'a' or 'w' and then closed without adding any files. Raise created in modes 'a' or 'w' and then closed without adding any files. Raise
BadZipfile (rather than IOError) when opening small non-ZIP files. BadZipfile (rather than IOError) when opening small non-ZIP files.
......
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