]> granicus.if.org Git - python/commitdiff
Issue10063 - file:// scheme will stop accessing remote hosts via ftp protocol
authorSenthil Kumaran <orsenthil@gmail.com>
Thu, 14 Oct 2010 11:57:35 +0000 (11:57 +0000)
committerSenthil Kumaran <orsenthil@gmail.com>
Thu, 14 Oct 2010 11:57:35 +0000 (11:57 +0000)
Doc/library/urllib.request.rst
Lib/test/test_urllib2.py
Lib/urllib/request.py
Misc/NEWS

index 21c1c2fd31cc3621cd516518d742528dba1008d3..5581f25dfd72aab4bbc17480c4d0926102c9366a 100644 (file)
@@ -1004,8 +1004,12 @@ FileHandler Objects
 .. method:: FileHandler.file_open(req)
 
    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
-   using :attr:`parent`.
+   ``'localhost'``.
+
+   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:
index 5a168ee2d80caeef6005b41167e187e11c50ebde..8d59180e86f7166f01e602779c934ab69a542c45 100644 (file)
@@ -731,11 +731,11 @@ class HandlerTests(unittest.TestCase):
         # file:///blah.txt (a file)
         # file://ftp.example.com/blah.txt (an ftp URL)
         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),
 # XXXX bug: fails with OSError, should be URLError
             ("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),
             ]:
             req = Request(url)
index e2845c9b5e6cd42535ec4c83ff1ddddf543265e9..9674b96ff1d019f963f6066324a7ae90a170d122 100644 (file)
@@ -1228,8 +1228,8 @@ class FileHandler(BaseHandler):
         url = req.selector
         if url[:2] == '//' and url[2:3] != '/' and (req.host and
                 req.host != 'localhost'):
-            req.type = 'ftp'
-            return self.parent.open(req)
+            if not req.host is self.get_names():
+                raise URLError("file:// scheme is supported only on localhost")
         else:
             return self.open_local_file(req)
 
@@ -1712,7 +1712,7 @@ class URLopener:
         if not isinstance(url, str):
             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/':
-            return self.open_ftp(url)
+            raise ValueError("file:// scheme is supported only on localhost")
         else:
             return self.open_local_file(url)
 
index 4392432b21bfaa5a630f1283d2c15614af53fa77..c8a43b5834ec1fc523afc7cfe5a0c5d456bb36f6 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -18,6 +18,12 @@ Core and Builtins
 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
   created in modes 'a' or 'w' and then closed without adding any files. Raise
   BadZipfile (rather than IOError) when opening small non-ZIP files.