Commit c6b97a82 authored by Kamil Dudka's avatar Kamil Dudka
Browse files

ftp: close connection as soon as ABOR has been sent

... and do not send ABOR unless really necessary.

Bug: https://bugzilla.redhat.com/649347
Reported by: Simon H.
parent f96a2641
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -3083,10 +3083,9 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
#endif

  if(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) {
    if(!result && ftpc->dont_check)
      /* prevent some FTP servers (namely Pure-ftpd) from hanging if we close
       * the data channel before transferring all data */
      result = Curl_pp_sendf(&ftpc->pp, "ABOR");
    if(!result && ftpc->dont_check && data->req.maxdownload > 0)
      /* partial download completed */
      result = Curl_pp_sendf(pp, "ABOR");

    if(conn->ssl[SECONDARYSOCKET].use) {
      /* The secondary socket is using SSL so we must close down that part
@@ -3128,6 +3127,14 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
    if(result)
      return result;

    if(ftpc->dont_check && data->req.maxdownload > 0) {
      /* we have just sent ABOR and there is no reliable way to check if it was
       * successful or not; we have to close the connection now */
      infof(data, "partial download completed, closing connection\n");
      conn->bits.close = TRUE; /* mark for closure */
      return result;
    }

    if(!ftpc->dont_check) {
      /* 226 Transfer complete, 250 Requested file action okay, completed. */
      if((ftpcode != 226) && (ftpcode != 250)) {
+0 −1
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ TYPE I
SIZE 1036
REST 20
RETR 1036
ABOR
QUIT
</protocol>
<file name="log/curl1036.out">
+0 −1
Original line number Diff line number Diff line
@@ -46,7 +46,6 @@ TYPE I
SIZE 110
REST 20
RETR 110
ABOR
QUIT
</protocol>
</verify>
+0 −1
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ EPSV
PASV
TYPE I
SIZE 122
ABOR
QUIT
</protocol>
</verify>