Mercurial > gftp.yaz
changeset 858:10e2ce91e26c
2006-11-30 Brian Masney <masneyb@gftp.org>
* lib/rfc959.c lib/sshv2.c src/uicommon/gftpui.c - don't abort the
entire file transfer if there is a permission denied at some point
during the file transfer. Give the user an error at the very end if
there were any errors. (closes #328550)
author | masneyb |
---|---|
date | Fri, 01 Dec 2006 00:57:50 +0000 |
parents | 5ba7622df358 |
children | ecfff1bfa4b5 |
files | ChangeLog lib/rfc959.c lib/sshv2.c src/uicommon/gftpui.c |
diffstat | 4 files changed, 38 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Sun Nov 26 18:31:17 2006 +0000 +++ b/ChangeLog Fri Dec 01 00:57:50 2006 +0000 @@ -1,3 +1,9 @@ +2006-11-30 Brian Masney <masneyb@gftp.org> + * lib/rfc959.c lib/sshv2.c src/uicommon/gftpui.c - don't abort the + entire file transfer if there is a permission denied at some point + during the file transfer. Give the user an error at the very end if + there were any errors. (closes #328550) + 2006-11-16 Brian Masney <masneyb@gftp.org> * lib/protocols.c (gftp_get_all_subdirs) - don't return if there was a problem running gftp_stat_filename(). Only return if there was a fatal @@ -3739,7 +3745,7 @@ * cvsclean - added this script - * *.[ch] - added $Id: ChangeLog,v 1.504 2006/11/17 03:04:50 masneyb Exp $ tags + * *.[ch] - added $Id: ChangeLog,v 1.505 2006/12/01 00:57:49 masneyb Exp $ tags * debian/* - updated files from Debian maintainer
--- a/lib/rfc959.c Sun Nov 26 18:31:17 2006 +0000 +++ b/lib/rfc959.c Fri Dec 01 00:57:50 2006 +0000 @@ -1207,7 +1207,11 @@ else if (ret != '1') { rfc959_close_data_connection (request); - return (GFTP_ERETRYABLE); + + if (ret == '5') + return (GFTP_EFATAL); + else + return (GFTP_ERETRYABLE); } gftp_lookup_request_option (request, "passive_transfer", &passive_transfer); @@ -1276,7 +1280,11 @@ else if (ret != '1') { rfc959_close_data_connection (request); - return (GFTP_ERETRYABLE); + + if (ret == '5') + return (GFTP_EFATAL); + else + return (GFTP_ERETRYABLE); } gftp_lookup_request_option (request, "passive_transfer", &passive_transfer);
--- a/lib/sshv2.c Sun Nov 26 18:31:17 2006 +0000 +++ b/lib/sshv2.c Fri Dec 01 00:57:50 2006 +0000 @@ -896,6 +896,7 @@ sshv2_read_status_response (gftp_request * request, sshv2_message * message, int fd, int fxp_is_retryable, int fxp_is_wrong) { + guint32 num; int ret; memset (message, 0, sizeof (*message)); @@ -904,8 +905,15 @@ return (ret); else if (fxp_is_retryable > 0 && ret == fxp_is_retryable) { + memcpy (&num, message->buffer + 4, 4); + num = ntohl (num); + sshv2_message_free (message); - return (GFTP_ERETRYABLE); + + if (num == SSH_FX_PERMISSION_DENIED) + return (GFTP_EFATAL); + else + return (GFTP_ERETRYABLE); } else if (fxp_is_wrong > 0 && ret != fxp_is_wrong) return (sshv2_wrong_response (request, message)); @@ -923,10 +931,11 @@ case SSH_FX_OK: case SSH_FX_EOF: case SSH_FX_NO_SUCH_FILE: - case SSH_FX_PERMISSION_DENIED: case SSH_FX_FAILURE: case SSH_FX_OP_UNSUPPORTED: return (GFTP_ERETRYABLE); + case SSH_FX_PERMISSION_DENIED: + return (GFTP_EFATAL); default: return (sshv2_wrong_response (request, message)); }
--- a/src/uicommon/gftpui.c Sun Nov 26 18:31:17 2006 +0000 +++ b/src/uicommon/gftpui.c Fri Dec 01 00:57:50 2006 +0000 @@ -1462,9 +1462,8 @@ static int _gftpui_common_trans_file_or_dir (gftp_transfer * tdata) { + int tofd, fromfd, ret; gftp_file * curfle; - int tofd, fromfd; - int ret; if (g_thread_supported ()) g_static_mutex_lock (&tdata->structmutex); @@ -1552,12 +1551,13 @@ int gftpui_common_transfer_files (gftp_transfer * tdata) { - int ret; + int ret, skipped_files; tdata->curfle = tdata->files; gettimeofday (&tdata->starttime, NULL); memcpy (&tdata->lasttime, &tdata->starttime, sizeof (tdata->lasttime)); + skipped_files = 0; while (tdata->curfle != NULL) { ret = _gftpui_common_trans_file_or_dir (tdata); @@ -1569,6 +1569,8 @@ if (gftp_abort_transfer (tdata->fromreq) != 0) gftp_disconnect (tdata->fromreq); } + else if (ret == GFTP_EFATAL) + skipped_files++; else if (ret < 0) { if (gftp_get_transfer_status (tdata, ret) == GFTP_ERETRYABLE) @@ -1590,6 +1592,11 @@ } } + if (skipped_files) + tdata->fromreq->logging_function (gftp_logging_error, tdata->fromreq, + _("There were %d files or directories that could not be transferred. Check the log for which items were not properly transferred."), + skipped_files); + tdata->done = 1; return (1); }