summaryrefslogtreecommitdiff
path: root/addons/document_ftp/ftpserver
diff options
context:
space:
mode:
authorP. Christeas <p_christ@hol.gr>2010-07-13 23:54:18 +0300
committerP. Christeas <p_christ@hol.gr>2010-07-13 23:54:18 +0300
commita47be2ef0d72c5de183b9af1d44f33055c6c2dcc (patch)
tree03d0c54e54ed454858e56980e247d579ab16cd3e /addons/document_ftp/ftpserver
parent766fd336d4f8f0e17a05741542bf0a6e440e06bc (diff)
Document ftp: improve exception handling, size may return 404
bzr revid: p_christ@hol.gr-20100713205418-8oe6svsdvw2yy4jn
Diffstat (limited to 'addons/document_ftp/ftpserver')
-rw-r--r--addons/document_ftp/ftpserver/abstracted_fs.py4
-rw-r--r--addons/document_ftp/ftpserver/ftpserver.py16
2 files changed, 14 insertions, 6 deletions
diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py
index 5e7c8c1b31c..ddd34e2a04d 100644
--- a/addons/document_ftp/ftpserver/abstracted_fs.py
+++ b/addons/document_ftp/ftpserver/abstracted_fs.py
@@ -163,6 +163,8 @@ class abstracted_fs(object):
ret = child.open_data(cr, mode)
cr.commit()
return ret
+ except EnvironmentError:
+ raise
except Exception,e:
self._log.exception('Cannot create item %s at node %s', objname, repr(node))
raise OSError(1, 'Operation not permited.')
@@ -432,7 +434,7 @@ class abstracted_fs(object):
def getsize(self, datacr):
"""Return the size of the specified file in bytes."""
if not (datacr and datacr[1]):
- return 0L
+ raise IOError(errno.ENOENT, "No such file or directory")
if datacr[1].type in ('file', 'content'):
return datacr[1].get_data_len(datacr[0]) or 0L
return 0L
diff --git a/addons/document_ftp/ftpserver/ftpserver.py b/addons/document_ftp/ftpserver/ftpserver.py
index e267216ddec..528ce057ff9 100644
--- a/addons/document_ftp/ftpserver/ftpserver.py
+++ b/addons/document_ftp/ftpserver/ftpserver.py
@@ -2565,9 +2565,12 @@ class FTPHandler(asynchat.async_chat):
# return
size = self.run_as_current_user(self.fs.getsize, datacr)
except EnvironmentError, err:
- why = _strerror(err)
+ why = err.strerror
self.log('FAIL SIZE "%s". %s.' %(line, why))
- self.respond('550 %s.' %why)
+ if err.errno == errno.ENOENT:
+ self.respond("404 %s." % why)
+ else:
+ self.respond('550 %s.' % why)
else:
self.respond("213 %s" %size)
self.log('OK SIZE "%s".' %line)
@@ -2640,10 +2643,13 @@ class FTPHandler(asynchat.async_chat):
try:
datacr = self.fs.get_crdata(line, mode='delete')
self.run_as_current_user(self.fs.remove, datacr)
- except OSError, err:
- why = _strerror(err)
+ except EnvironmentError, err:
+ why = err.strerror
self.log('FAIL DELE "%s". %s.' %(line, why))
- self.respond('550 %s.' %why)
+ if err.errno == errno.ENOENT:
+ self.respond('404 %s.' % why)
+ else:
+ self.respond('550 %s.' %why)
else:
self.log('OK DELE "%s".' %line)
self.respond("250 File removed.")