mirror of https://github.com/python/cpython
fix issue 9601: ftplib now provides a workaround for invalid response code returned on MKD and PWD by non-compliant FTPserver implementations such as ISS shipped with Windows server 2003
This commit is contained in:
parent
076e031e54
commit
bbc4782d77
|
@ -565,7 +565,11 @@ class FTP:
|
||||||
|
|
||||||
def mkd(self, dirname):
|
def mkd(self, dirname):
|
||||||
'''Make a directory, return its full pathname.'''
|
'''Make a directory, return its full pathname.'''
|
||||||
resp = self.sendcmd('MKD ' + dirname)
|
resp = self.voidcmd('MKD ' + dirname)
|
||||||
|
# fix around non-compliant implementations such as IIS shipped
|
||||||
|
# with Windows server 2003
|
||||||
|
if not resp.startswith('257'):
|
||||||
|
return ''
|
||||||
return parse257(resp)
|
return parse257(resp)
|
||||||
|
|
||||||
def rmd(self, dirname):
|
def rmd(self, dirname):
|
||||||
|
@ -574,7 +578,11 @@ class FTP:
|
||||||
|
|
||||||
def pwd(self):
|
def pwd(self):
|
||||||
'''Return current working directory.'''
|
'''Return current working directory.'''
|
||||||
resp = self.sendcmd('PWD')
|
resp = self.voidcmd('PWD')
|
||||||
|
# fix around non-compliant implementations such as IIS shipped
|
||||||
|
# with Windows server 2003
|
||||||
|
if not resp.startswith('257'):
|
||||||
|
return ''
|
||||||
return parse257(resp)
|
return parse257(resp)
|
||||||
|
|
||||||
def quit(self):
|
def quit(self):
|
||||||
|
|
|
@ -606,6 +606,18 @@ class TestFTPClass(TestCase):
|
||||||
self.assertEqual(self.server.handler_instance.last_received_cmd, 'quit')
|
self.assertEqual(self.server.handler_instance.last_received_cmd, 'quit')
|
||||||
self.assertFalse(is_client_connected())
|
self.assertFalse(is_client_connected())
|
||||||
|
|
||||||
|
def test_parse257(self):
|
||||||
|
self.assertEqual(ftplib.parse257('257 "/foo/bar"'), '/foo/bar')
|
||||||
|
self.assertEqual(ftplib.parse257('257 "/foo/bar" created'), '/foo/bar')
|
||||||
|
self.assertEqual(ftplib.parse257('257 ""'), '')
|
||||||
|
self.assertEqual(ftplib.parse257('257 "" created'), '')
|
||||||
|
self.assertRaises(ftplib.error_reply, ftplib.parse257, '250 "/foo/bar"')
|
||||||
|
# The 257 response is supposed to include the directory
|
||||||
|
# name and in case it contains embedded double-quotes
|
||||||
|
# they must be doubled (see RFC-959, chapter 7, appendix 2).
|
||||||
|
self.assertEqual(ftplib.parse257('257 "/foo/b""ar"'), '/foo/b"ar')
|
||||||
|
self.assertEqual(ftplib.parse257('257 "/foo/b""ar" created'), '/foo/b"ar')
|
||||||
|
|
||||||
|
|
||||||
class TestIPv6Environment(TestCase):
|
class TestIPv6Environment(TestCase):
|
||||||
|
|
||||||
|
|
|
@ -123,8 +123,12 @@ Extensions
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #9601: ftplib now provides a workaround for non-compliant
|
||||||
|
implementations such as IIS shipped with Windows server 2003 returning invalid
|
||||||
|
response codes for MKD and PWD commands.
|
||||||
|
|
||||||
- Issue #658749: asyncore's connect() method now correctly interprets winsock
|
- Issue #658749: asyncore's connect() method now correctly interprets winsock
|
||||||
errors;
|
errors.
|
||||||
|
|
||||||
- Issue #9501: Fixed logging regressions in cleanup code.
|
- Issue #9501: Fixed logging regressions in cleanup code.
|
||||||
|
|
||||||
|
@ -291,6 +295,8 @@ Tools/Demos
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #9601: Provide a test case for ftplib.parse257.
|
||||||
|
|
||||||
- Issue #8857: Provide a test case for socket.getaddrinfo.
|
- Issue #8857: Provide a test case for socket.getaddrinfo.
|
||||||
|
|
||||||
- Issue #7564: Skip test_ioctl if another process is attached to /dev/tty.
|
- Issue #7564: Skip test_ioctl if another process is attached to /dev/tty.
|
||||||
|
|
Loading…
Reference in New Issue