[tahoe-lafs-trac-stream] [Tahoe-LAFS] #2394: ftp "ls" command is broken
Tahoe-LAFS
trac at tahoe-lafs.org
Tue Mar 24 17:25:19 UTC 2015
#2394: ftp "ls" command is broken
------------------------------------+------------------------
Reporter: warner | Owner:
Type: defect | Status: new
Priority: normal | Milestone: 1.10.1
Component: code-frontend-ftp-sftp | Version: 1.10.0
Keywords: ftpd regression | Launchpad Bug:
------------------------------------+------------------------
While testing the fix for #2388, I noticed that FTP's "ls" command is
broken. Apparently it was broken in 1.10.0 too, so I'm marking this as a
release-blocking regression. I suspect it has to do with a change in
Twisted, though, so maybe it worked at one point and we just got caught by
an API change.
{{{
(ve)206:warner at brian-office-mini% ftp -P 8021 alice at localhost
Trying 127.0.0.1...
Connected to localhost.
220 Twisted 15.0.0 FTP Server
331 Password required for alice.
Password:
230 User logged in, proceed
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,220,56).
125 Data connection already open, starting transfer
<HANG>
}}}
twistd.log:
{{{
2015-03-24 10:16:13-0700 [-] Unexpected FTP error
2015-03-24 10:16:13-0700 [-] Unhandled Error
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-
packages/twisted/internet/base.py", line 824, in runUntilCurrent
call.func(*call.args, **call.kw)
File
"/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/site-packages/foolscap-0.7.0-py2.7.egg/foolscap/eventual.py", line 26, in
_turn
cb(*args, **kwargs)
File "/usr/local/lib/python2.7/site-
packages/twisted/internet/defer.py", line 383, in callback
self._startRunCallbacks(result)
File "/usr/local/lib/python2.7/site-
packages/twisted/internet/defer.py", line 491, in _startRunCallbacks
self._runCallbacks()
--- <exception caught here> ---
File "/usr/local/lib/python2.7/site-
packages/twisted/internet/defer.py", line 578, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/usr/local/lib/python2.7/site-
packages/twisted/protocols/ftp.py", line 996, in gotListing
self.dtpInstance.sendListResponse(name, attrs)
File "/usr/local/lib/python2.7/site-
packages/twisted/protocols/ftp.py", line 474, in sendListResponse
self.sendLine(self._formatOneListResponse(name, *response))
File "/usr/local/lib/python2.7/site-
packages/twisted/protocols/ftp.py", line 464, in _formatOneListResponse
'permissions': permissions.shorthand(),
exceptions.AttributeError: 'int' object has no attribute
'shorthand'
}}}
I'm guessing this involves
`allmydata.frontends.ftpd.Handler._populate_row`, where it returns a fake
(int) `0600` as the "permissions" key for all rows. I'm further guessing
that Twisted's changed the API to require some sort of Permissions object.
We need to check the range of Twisteds with which we claim compatibility,
look at the variety of `ftp.IFTPShell` interfaces required by that set,
and find a way to be compatible with all of them.
--
Ticket URL: <https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2394>
Tahoe-LAFS <https://Tahoe-LAFS.org>
secure decentralized storage
More information about the tahoe-lafs-trac-stream
mailing list