From ad4a9955c5f62d164a78b9847fe9e8207aadb617 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 13 Mar 2008 21:43:30 +0000 Subject: - 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. --- lib/ssh.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib') 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; -- cgit v1.2.3