diff options
| author | P. Christeas <p_christ@hol.gr> | 2010-07-09 01:52:13 +0300 |
|---|---|---|
| committer | P. Christeas <p_christ@hol.gr> | 2010-07-09 01:52:13 +0300 |
| commit | e7d01ae1e35d3c7431ce430714ab878fe1fd8d0d (patch) | |
| tree | ce0b53204b6bbe8977139d195271be7758c6aefd /addons/document_ftp/ftpserver/ftpserver.py | |
| parent | 819eed88a2f5ca3f633a955f55b0bec5c6bef2eb (diff) | |
Document FTP: fix walking utf8 paths.
Also fix the error message when rename fails for utf8 filenames.
bzr revid: p_christ@hol.gr-20100708225213-fcq2nbgectztjycq
Diffstat (limited to 'addons/document_ftp/ftpserver/ftpserver.py')
| -rw-r--r-- | addons/document_ftp/ftpserver/ftpserver.py | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/addons/document_ftp/ftpserver/ftpserver.py b/addons/document_ftp/ftpserver/ftpserver.py index 75ad5b00883..8d3fa4b0531 100644 --- a/addons/document_ftp/ftpserver/ftpserver.py +++ b/addons/document_ftp/ftpserver/ftpserver.py @@ -221,6 +221,17 @@ def _strerror(err): else: return err.strerror +def _to_unicode(s): + try: + return s.decode('utf-8') + except UnicodeError: + try: + return s.decode('latin') + except UnicodeError: + try: + return s.encode('ascii') + except UnicodeError: + return s # --- library defined exceptions @@ -2650,15 +2661,18 @@ class FTPHandler(asynchat.async_chat): try: try: datacr = self.fs.get_crdata(line,'create') - oldname = '/'.join(self.fs.rnfr.path) + oldname = self.fs.rnfr.path + if isinstance(oldname, (list, tuple)): + oldname = '/'.join(oldname) self.run_as_current_user(self.fs.rename, self.fs.rnfr, datacr) self.fs.rnfr = None - self.log('OK RNFR/RNTO "%s ==> %s".' %(oldname, line)) + self.log('OK RNFR/RNTO "%s ==> %s".' % \ + (_to_unicode(oldname), _to_unicode(line))) self.respond("250 Renaming ok.") except EnvironmentError, err: why = _strerror(err) self.log('FAIL RNFR/RNTO "%s ==> %s". %s.' \ - %(self.fs.ftpnorm(self.fs.rnfr), line, why)) + % (_to_unicode(oldname), _to_unicode(line), why)) self.respond('550 %s.' %why) finally: self.fs.rnfr = None |
