Skip to content

Commit

Permalink
ftp: EPSV-disable fix over SOCKS
Browse files Browse the repository at this point in the history
  • Loading branch information
sapien2 authored and bagder committed Nov 12, 2012
1 parent cd5261e commit 076e1fa
Showing 1 changed file with 25 additions and 13 deletions.
38 changes: 25 additions & 13 deletions lib/ftp.c
Expand Up @@ -1800,6 +1800,23 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
return result;
}

/* called from ftp_state_pasv_resp to switch to PASV in case of EPSV
problems */
static CURLcode ftp_epsv_disable(struct connectdata *conn)
{
CURLcode result = CURLE_OK;
infof(conn->data, "got positive EPSV response, but can't connect. "
"Disabling EPSV\n");
/* disable it for next transfer */
conn->bits.ftp_use_epsv = FALSE;
conn->data->state.errorbuf = FALSE; /* allow error message to get
rewritten */
PPSENDF(&conn->proto.ftpc.pp, "PASV", NULL);
conn->proto.ftpc.count1++;
/* remain in the FTP_PASV state */
return result;
}

static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
int ftpcode)
{
Expand Down Expand Up @@ -1982,20 +1999,12 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,

Curl_resolv_unlock(data, addr); /* we're done using this address */

if(result && ftpc->count1 == 0 && ftpcode == 229) {
infof(data, "got positive EPSV response, but can't connect. "
"Disabling EPSV\n");
/* disable it for next transfer */
conn->bits.ftp_use_epsv = FALSE;
data->state.errorbuf = FALSE; /* allow error message to get rewritten */
PPSENDF(&ftpc->pp, "PASV", NULL);
ftpc->count1++;
/* remain in the FTP_PASV state */
return result;
}
if(result) {
if(ftpc->count1 == 0 && ftpcode == 229)
return ftp_epsv_disable(conn);

if(result)
return result;
}

conn->bits.tcpconnect[SECONDARYSOCKET] = connected;

Expand Down Expand Up @@ -2035,8 +2044,11 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
break;
}

if(result)
if(result) {
if(ftpc->count1 == 0 && ftpcode == 229)
return ftp_epsv_disable(conn);
return result;
}

if(conn->bits.tunnel_proxy && conn->bits.httpproxy) {
/* FIX: this MUST wait for a proper connect first if 'connected' is
Expand Down

0 comments on commit 076e1fa

Please sign in to comment.