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

This commit is contained in:
Senthil Kumaran 2010-10-14 11:57:35 +00:00
parent 6d7be5f86c
commit 383c32dd38
4 changed files with 17 additions and 7 deletions

View file

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

View file

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

View file

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

View file

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