Commit af30f115 authored by Jean Gressmann's avatar Jean Gressmann Committed by Daniel Stenberg
Browse files

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
parent f77dabef
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -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;