summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean Gressmann <jean@0x42.de>2017-02-19 11:02:15 +0100
committerDaniel Stenberg <daniel@haxx.se>2017-02-20 08:01:53 +0100
commitaf30f1152d43dcdb55978f0ee337775f43f2fd0b (patch)
tree9deb45f99d432222a152b0a830b9494d6f294fe7
parentf77dabefd80b05173e602de94865b5cdffb3495e (diff)
downloadgnurl-af30f1152d43dcdb55978f0ee337775f43f2fd0b.tar.gz
gnurl-af30f1152d43dcdb55978f0ee337775f43f2fd0b.tar.bz2
gnurl-af30f1152d43dcdb55978f0ee337775f43f2fd0b.zip
sftp: improved checks for create dir failures
Since negative values are errors and not only -1. This makes SFTP upload with --create-dirs work (again). Closes #1269
-rw-r--r--lib/ssh.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/ssh.c b/lib/ssh.c
index 5ed036a1e..086d40ecd 100644
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -918,6 +918,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
&err_msg, NULL, 0);
infof(data, "SSH public key authentication failed: %s\n", err_msg);
state(conn, SSH_AUTH_PASS_INIT);
+ rc = 0; /* clear rc and continue */
}
break;
@@ -928,6 +929,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
}
else {
state(conn, SSH_AUTH_HOST_INIT);
+ rc = 0; /* clear rc and continue */
}
break;
@@ -989,6 +991,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
if(rc < 0) {
infof(data, "Failure connecting to agent\n");
state(conn, SSH_AUTH_KEY_INIT);
+ rc = 0; /* clear rc and continue */
}
else {
state(conn, SSH_AUTH_AGENT_LIST);
@@ -1008,6 +1011,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
if(rc < 0) {
infof(data, "Failure requesting identities to agent\n");
state(conn, SSH_AUTH_KEY_INIT);
+ rc = 0; /* clear rc and continue */
}
else {
state(conn, SSH_AUTH_AGENT);
@@ -1800,6 +1804,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
(data->set.ftp_create_missing_dirs &&
(strlen(sftp_scp->path) > 1))) {
/* try to create the path remotely */
+ rc = 0; /* clear rc and continue */
sshc->secondCreateDirs = 1;
state(conn, SSH_SFTP_CREATE_DIRS_INIT);
break;
@@ -1936,7 +1941,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
}
*sshc->slash_pos = '/';
++sshc->slash_pos;
- if(rc == -1) {
+ if(rc < 0) {
/*
* Abort if failure wasn't that the dir already exists or the
* permission was denied (creation might succeed further down the
@@ -1951,6 +1956,9 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
sshc->actualcode = result?result:CURLE_SSH;
break;
}
+ else {
+ rc = 0; /* clear rc and continue */
+ }
}
state(conn, SSH_SFTP_CREATE_DIRS);
break;