mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
- SCP and SFTP with the multi interface had the same flaw: the 'DONE'
operation didn't complete properly if the EAGAIN equivalent was returned but libcurl would simply continue with a half-completed close operation performed. This ruined persistent connection re-use and cause some SSH-protocol errors in general. The correction is unfortunately adding a blocking function - doing it entirely non-blocking should be considered for a better fix.
This commit is contained in:
parent
abb74a1203
commit
03ca98b0df
9
CHANGES
9
CHANGES
@ -6,6 +6,15 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
Daniel Stenberg (17 Dec 2008)
|
||||||
|
- SCP and SFTP with the multi interface had the same flaw: the 'DONE'
|
||||||
|
operation didn't complete properly if the EAGAIN equivalent was returned but
|
||||||
|
libcurl would simply continue with a half-completed close operation
|
||||||
|
performed. This ruined persistent connection re-use and cause some
|
||||||
|
SSH-protocol errors in general. The correction is unfortunately adding a
|
||||||
|
blocking function - doing it entirely non-blocking should be considered for
|
||||||
|
a better fix.
|
||||||
|
|
||||||
Gisle Vanem (16 Dec 2008)
|
Gisle Vanem (16 Dec 2008)
|
||||||
- Added the possibility to use the Watt-32 tcp/ip stack under Windows.
|
- Added the possibility to use the Watt-32 tcp/ip stack under Windows.
|
||||||
The change simply involved adding a USE_WATT32 section in the
|
The change simply involved adding a USE_WATT32 section in the
|
||||||
|
@ -31,6 +31,7 @@ This release includes the following bugfixes:
|
|||||||
o curl_easy_duphandle() doesn't try to duplicate the connection cache pointer
|
o curl_easy_duphandle() doesn't try to duplicate the connection cache pointer
|
||||||
o build failure on OS/400 when enabling IPv6
|
o build failure on OS/400 when enabling IPv6
|
||||||
o better detection of SFTP failures
|
o better detection of SFTP failures
|
||||||
|
o improved connection re-use for subsequent SCP and SFTP trnasfers
|
||||||
|
|
||||||
This release includes the following known bugs:
|
This release includes the following known bugs:
|
||||||
|
|
||||||
|
32
lib/ssh.c
32
lib/ssh.c
@ -2309,30 +2309,24 @@ static CURLcode scp_disconnect(struct connectdata *conn)
|
|||||||
static CURLcode ssh_done(struct connectdata *conn, CURLcode status)
|
static CURLcode ssh_done(struct connectdata *conn, CURLcode status)
|
||||||
{
|
{
|
||||||
CURLcode result = CURLE_OK;
|
CURLcode result = CURLE_OK;
|
||||||
bool done = FALSE;
|
struct SSHPROTO *sftp_scp = conn->data->state.proto.ssh;
|
||||||
|
|
||||||
if(status == CURLE_OK) {
|
if(status == CURLE_OK) {
|
||||||
/* run the state-machine */
|
/* run the state-machine
|
||||||
if(conn->data->state.used_interface == Curl_if_multi) {
|
|
||||||
result = ssh_multi_statemach(conn, &done);
|
TODO: when the multi interface this _really_ should be using the
|
||||||
}
|
ssh_multi_statemach function but we have no general support for
|
||||||
else {
|
non-blocking DONE operations, not in the multi state machine and with
|
||||||
result = ssh_easy_statemach(conn);
|
Curl_done() invokes on several places in the code!
|
||||||
done = TRUE;
|
*/
|
||||||
}
|
result = ssh_easy_statemach(conn);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
result = status;
|
result = status;
|
||||||
done = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(done) {
|
Curl_safefree(sftp_scp->path);
|
||||||
struct SSHPROTO *sftp_scp = conn->data->state.proto.ssh;
|
sftp_scp->path = NULL;
|
||||||
|
Curl_pgrsDone(conn);
|
||||||
Curl_safefree(sftp_scp->path);
|
|
||||||
sftp_scp->path = NULL;
|
|
||||||
Curl_pgrsDone(conn);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user