mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
Joe Halpin made the FTP code send 'QUIT' on the control connection before
it disconnects the TCP connection, like a good ftp client should!
This commit is contained in:
parent
1ceb77b4dc
commit
77268e0649
21
lib/ftp.c
21
lib/ftp.c
@ -2288,12 +2288,14 @@ CURLcode ftp_perform(struct connectdata *conn,
|
||||
* parts etc as a wrapper to the actual DO function (ftp_perform).
|
||||
*
|
||||
* The input argument is already checked for validity.
|
||||
*
|
||||
* ftp->ctl_valid starts out as FALSE, and gets set to TRUE if we reach the
|
||||
* end of the function.
|
||||
*/
|
||||
CURLcode Curl_ftp(struct connectdata *conn)
|
||||
{
|
||||
CURLcode retcode=CURLE_OK;
|
||||
bool connected=0;
|
||||
|
||||
struct SessionHandle *data = conn->data;
|
||||
struct FTP *ftp;
|
||||
|
||||
@ -2304,6 +2306,7 @@ CURLcode Curl_ftp(struct connectdata *conn)
|
||||
|
||||
/* the ftp struct is already inited in ftp_connect() */
|
||||
ftp = conn->proto.ftp;
|
||||
ftp->ctl_valid = FALSE;
|
||||
conn->size = -1; /* make sure this is unknown at this point */
|
||||
|
||||
Curl_pgrsSetUploadCounter(data, 0);
|
||||
@ -2386,6 +2389,7 @@ CURLcode Curl_ftp(struct connectdata *conn)
|
||||
else
|
||||
freedirs(ftp);
|
||||
|
||||
ftp->ctl_valid = TRUE;
|
||||
return retcode;
|
||||
}
|
||||
|
||||
@ -2452,11 +2456,13 @@ CURLcode Curl_ftp_quit(struct connectdata *conn)
|
||||
{
|
||||
ssize_t nread;
|
||||
int ftpcode;
|
||||
CURLcode ret;
|
||||
CURLcode ret = CURLE_OK;
|
||||
|
||||
ret = Curl_ftpsendf(conn, "%s", "QUIT");
|
||||
if(CURLE_OK == ret)
|
||||
ret = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||
if(conn->proto.ftp->ctl_valid) {
|
||||
ret = Curl_ftpsendf(conn, "%s", "QUIT");
|
||||
if(CURLE_OK == ret)
|
||||
ret = Curl_GetFTPResponse(&nread, conn, &ftpcode);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2472,15 +2478,14 @@ CURLcode Curl_ftp_disconnect(struct connectdata *conn)
|
||||
{
|
||||
struct FTP *ftp= conn->proto.ftp;
|
||||
|
||||
#if 0
|
||||
/* We cannot send quit unconditionally. If this connection is stale or
|
||||
bad in any way, sending quit and waiting around here will make the
|
||||
disconnect wait in vain and cause more problems than we need to.
|
||||
|
||||
Until fixed, we keep this #if 0'ed. To be fixed in 7.11.1. Stay tuned.
|
||||
Curl_ftp_quit() will check the state of ftp->ctl_valid. If it's ok it
|
||||
will try to send the QUIT command, otherwise it will just return.
|
||||
*/
|
||||
(void)Curl_ftp_quit(conn); /* ignore errors on the QUIT */
|
||||
#endif
|
||||
|
||||
/* The FTP session may or may not have been allocated/setup at this point! */
|
||||
if(ftp) {
|
||||
|
@ -258,6 +258,10 @@ struct FTP {
|
||||
long response_time; /* When no timeout is given, this is the amount of
|
||||
seconds we await for an FTP response. Initialized
|
||||
in Curl_ftp_connect() */
|
||||
bool ctl_valid; /* Tells Curl_ftp_quit() whether or not to do
|
||||
anything. If the connection has timed out or
|
||||
been closed, this should be FALSE when it gets
|
||||
to Curl_ftp_quit() */
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
|
@ -43,5 +43,6 @@ PWD
|
||||
EPSV
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -43,5 +43,6 @@ PWD
|
||||
PORT 127,0,0,1,243,212
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -38,5 +38,6 @@ PASV
|
||||
TYPE I
|
||||
SIZE 102
|
||||
RETR 102
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -40,5 +40,6 @@ PORT 127,0,0,1,246,33
|
||||
TYPE I
|
||||
SIZE 103
|
||||
RETR 103
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -30,5 +30,6 @@ MDTM 103
|
||||
TYPE I
|
||||
SIZE 103
|
||||
REST 0
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -38,5 +38,6 @@ PASV
|
||||
TYPE A
|
||||
SIZE 103
|
||||
RETR 103
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -35,5 +35,6 @@ EPSV
|
||||
TYPE A
|
||||
SIZE 106
|
||||
RETR 106
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -37,5 +37,6 @@ PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
STOR 107
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -38,6 +38,7 @@ CWD RETR
|
||||
PORT 127,0,0,1,5,109
|
||||
TYPE I
|
||||
STOR 108
|
||||
QUIT
|
||||
</protocol>
|
||||
<upload>
|
||||
Moooooooooooo
|
||||
|
@ -32,6 +32,7 @@ PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
APPE 109
|
||||
QUIT
|
||||
</protocol>
|
||||
<upload>
|
||||
Moooooooooooo
|
||||
|
@ -39,5 +39,6 @@ TYPE I
|
||||
SIZE 110
|
||||
REST 20
|
||||
RETR 110
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -32,5 +32,6 @@ PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
SIZE 111
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -31,6 +31,7 @@ PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
APPE 112
|
||||
QUIT
|
||||
</protocol>
|
||||
<upload>
|
||||
gonna upload
|
||||
|
@ -30,5 +30,6 @@ PASS curl_by_daniel@haxx.se
|
||||
PWD
|
||||
EPSV
|
||||
PASV
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -32,5 +32,6 @@ REPLY PORT 314 bluah you f00l!
|
||||
USER anonymous
|
||||
PASS curl_by_daniel@haxx.se
|
||||
PWD
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -31,5 +31,6 @@ PWD
|
||||
EPSV
|
||||
PASV
|
||||
TYPE I
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -33,5 +33,6 @@ PASV
|
||||
TYPE I
|
||||
SIZE 118
|
||||
RETR 118
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -35,5 +35,6 @@ PWD
|
||||
TYPE I
|
||||
SIZE 119
|
||||
RETR 119
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -38,5 +38,6 @@ TYPE I
|
||||
SIZE 120
|
||||
RETR 120
|
||||
DELE file
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -35,5 +35,6 @@ TYPE I
|
||||
SIZE 121
|
||||
RETR 121
|
||||
DELE after_transfer
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -31,5 +31,6 @@ EPSV
|
||||
PASV
|
||||
TYPE I
|
||||
SIZE 122
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -26,5 +26,6 @@ PASS curl_by_daniel@haxx.se
|
||||
PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -33,5 +33,6 @@ PASV
|
||||
TYPE I
|
||||
SIZE 124
|
||||
RETR 124
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -28,5 +28,6 @@ USER anonymous
|
||||
PASS curl_by_daniel@haxx.se
|
||||
PWD
|
||||
CWD path
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -33,5 +33,6 @@ EPSV
|
||||
TYPE I
|
||||
SIZE 126
|
||||
RETR 126
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -31,5 +31,6 @@ PASV
|
||||
TYPE I
|
||||
SIZE 127
|
||||
RETR 127
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -33,6 +33,7 @@ PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
STOR 128
|
||||
QUIT
|
||||
</protocol>
|
||||
<upload>
|
||||
file
|
||||
|
@ -51,5 +51,6 @@ PWD
|
||||
EPSV
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -51,5 +51,6 @@ PWD
|
||||
EPSV
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -51,5 +51,6 @@ PWD
|
||||
EPSV
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -51,5 +51,6 @@ PWD
|
||||
EPSV
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -51,5 +51,6 @@ PWD
|
||||
EPSV
|
||||
TYPE A
|
||||
LIST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -38,5 +38,6 @@ TYPE I
|
||||
SIZE 135
|
||||
REST 4
|
||||
RETR 135
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -28,5 +28,6 @@ EPSV
|
||||
TYPE I
|
||||
SIZE 136
|
||||
RETR 136
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -33,5 +33,6 @@ EPSV
|
||||
TYPE I
|
||||
SIZE 137
|
||||
RETR 137
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -36,5 +36,6 @@ EPSV
|
||||
TYPE I
|
||||
SIZE 138
|
||||
RETR 138
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -33,5 +33,6 @@ EPSV
|
||||
TYPE I
|
||||
SIZE 139
|
||||
RETR 139
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -28,5 +28,6 @@ PASS curl_by_daniel@haxx.se
|
||||
PWD
|
||||
CWD blalbla
|
||||
MDTM 140
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -31,6 +31,7 @@ MDTM 141
|
||||
TYPE I
|
||||
SIZE 141
|
||||
REST 0
|
||||
QUIT
|
||||
</protocol>
|
||||
<stdout>
|
||||
Last-Modified: Wed, 09 Apr 2003 10:26:59 GMT
|
||||
|
@ -30,5 +30,6 @@ EPSV
|
||||
TYPE A
|
||||
SIZE 143
|
||||
RETR 143
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -35,5 +35,6 @@ PWD
|
||||
PORT 127,0,0,1,243,212
|
||||
TYPE A
|
||||
NLST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -38,5 +38,6 @@ PWD
|
||||
PORT 127,0,0,1,243,212
|
||||
TYPE A
|
||||
NLST
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -42,5 +42,6 @@ EPSV
|
||||
TYPE I
|
||||
SIZE 146
|
||||
RETR 146
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -44,5 +44,6 @@ EPSV
|
||||
TYPE I
|
||||
SIZE 147
|
||||
RETR 147
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -37,5 +37,6 @@ PASS curl_by_daniel@haxx.se
|
||||
PWD
|
||||
CWD attempt
|
||||
MKD attempt
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
@ -39,6 +39,7 @@ CWD dir2
|
||||
EPSV
|
||||
TYPE I
|
||||
STOR 148
|
||||
QUIT
|
||||
</protocol>
|
||||
<file name="log/upload148">
|
||||
send away this contents
|
||||
|
@ -44,4 +44,15 @@ upload
|
||||
|
||||
works?
|
||||
</upload>
|
||||
<protocol>
|
||||
USER anonymous
|
||||
PASS curl_by_daniel@haxx.se
|
||||
PWD
|
||||
EPSV
|
||||
TYPE I
|
||||
STOR 505
|
||||
RNFR 505
|
||||
RNTO 505-forreal
|
||||
QUIT
|
||||
</protocol>
|
||||
</verify>
|
||||
|
Loading…
Reference in New Issue
Block a user