aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-03-13 21:43:30 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-03-13 21:43:30 +0000
commitad4a9955c5f62d164a78b9847fe9e8207aadb617 (patch)
tree6d4df323042c9ae7098166a47d69141d370f325f /lib
parent553ed99e3b5fce75e02167bb291b214576573ea9 (diff)
- Brian Ulm figured out that if you did an SFTP upload with
CURLOPT_FTP_CREATE_MISSING_DIRS to create a directory, and then re-used the handle and uploaded another file to another directory that needed to be created, the second upload would fail. Another case of a state variable that wasn't properly reset between requests.
Diffstat (limited to 'lib')
-rw-r--r--lib/ssh.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/ssh.c b/lib/ssh.c
index 22d3ecb27..f8b0f7643 100644
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -1226,10 +1226,11 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
}
else {
err = libssh2_sftp_last_error(sshc->sftp_session);
- failf(data, "Upload failed: %s", sftp_libssh2_strerror(err));
if(sshc->secondCreateDirs) {
state(conn, SSH_SFTP_CLOSE);
sshc->actualcode = sftp_libssh2_error_to_CURLE(err);
+ failf(data, "Creating the dir/file failed: %s",
+ sftp_libssh2_strerror(err));
break;
}
else if(((err == LIBSSH2_FX_NO_SUCH_FILE) ||
@@ -1244,6 +1245,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
}
state(conn, SSH_SFTP_CLOSE);
sshc->actualcode = sftp_libssh2_error_to_CURLE(err);
+ failf(data, "Upload failed: %s", sftp_libssh2_strerror(err));
break;
}
}
@@ -1966,8 +1968,10 @@ static CURLcode ssh_init(struct connectdata *conn)
{
struct SessionHandle *data = conn->data;
struct SSHPROTO *ssh;
+ struct ssh_conn *sshc = &conn->proto.sshc;
- conn->proto.sshc.actualcode = CURLE_OK; /* reset error code */
+ sshc->actualcode = CURLE_OK; /* reset error code */
+ sshc->secondCreateDirs =0; /* reset the create dir attempt state variable */
if(data->state.proto.ssh)
return CURLE_OK;