Commit 42cabc14 authored by Dan Fandrich's avatar Dan Fandrich
Browse files

Added support for --append on SFTP uploads. Unfortunately, OpenSSH doesn't

support this so it goes untested.
parent a948ca16
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -6,6 +6,10 @@


                                  Changelog
                                  Changelog


Daniel Fandrich (1 Aug 2008)
- Added support for --append on SFTP uploads. Unfortunately, OpenSSH doesn't
  support this so it goes untested.

Yang Tse (1 Aug 2008)
Yang Tse (1 Aug 2008)
- Configure process now checks if the preprocessor _REENTRANT symbol is already
- Configure process now checks if the preprocessor _REENTRANT symbol is already
  defined. If it isn't currently defined a set of checks are performed to test
  defined. If it isn't currently defined a set of checks are performed to test
+1 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ This release includes the following changes:
 o Added test selection by key word in runtests.pl
 o Added test selection by key word in runtests.pl
 o the curl tool's -w option support the %{ssl_verify_result} variable
 o the curl tool's -w option support the %{ssl_verify_result} variable
 o Added CURLOPT_SCOPE and scope parsing of the URL according to RFC4007
 o Added CURLOPT_SCOPE and scope parsing of the URL according to RFC4007
 o Support --append on SFTP uploads (not with OpenSSH, though)


This release includes the following bugfixes:
This release includes the following bugfixes:


+24 −5
Original line number Original line Diff line number Diff line
@@ -48,6 +48,9 @@ SIMPLE USAGE
        curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \
        curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \
        	scp://shell.example.com/~/personal.txt
        	scp://shell.example.com/~/personal.txt


  Get the main page from an IPv6 web server:

        curl -g "http://[2001:1890:1112:1::20]/"


DOWNLOAD TO A FILE
DOWNLOAD TO A FILE


@@ -86,6 +89,13 @@ USING PASSWORDS
   standards while the recommended "explicit" way is done by using FTP:// and
   standards while the recommended "explicit" way is done by using FTP:// and
   the --ftp-ssl option.
   the --ftp-ssl option.


 SFTP / SCP

   This is similar to FTP, but you can specify a private key to use instead of
   a password. Note that the private key may itself be protected by a password
   that is unrelated to the login password of the remote system.  If you
   provide a private key file you must also provide a public key file.

 HTTP
 HTTP


   Curl also supports user and password in HTTP URLs, thus you can pick a file
   Curl also supports user and password in HTTP URLs, thus you can pick a file
@@ -154,9 +164,9 @@ RANGES


UPLOADING
UPLOADING


 FTP
 FTP / FTPS / SFTP / SCP


  Upload all data on stdin to a specified ftp site:
  Upload all data on stdin to a specified server:


        curl -T - ftp://ftp.upload.com/myfile
        curl -T - ftp://ftp.upload.com/myfile


@@ -169,7 +179,7 @@ UPLOADING
 
 
        curl -T uploadfile -u user:passwd ftp://ftp.upload.com/
        curl -T uploadfile -u user:passwd ftp://ftp.upload.com/


  Upload a local file to get appended to the remote file using ftp:
  Upload a local file to get appended to the remote file:


        curl -T localfile -a ftp://ftp.upload.com/remotefile
        curl -T localfile -a ftp://ftp.upload.com/remotefile


@@ -331,7 +341,7 @@ REFERRER


        curl -e www.coolsite.com http://www.showme.com/
        curl -e www.coolsite.com http://www.showme.com/


  NOTE: The referer field is defined in the HTTP spec to be a full URL.
  NOTE: The Referer: [sic] field is defined in the HTTP spec to be a full URL.


USER AGENT
USER AGENT


@@ -564,6 +574,14 @@ FTP and PATH NAMES


  (I.e with an extra slash in front of the file name.)
  (I.e with an extra slash in front of the file name.)


SFTP and SCP and PATH NAMES

  With sftp: and scp: URLs, the path name given is the absolute name on the
  server. To access a file relative to the remote user's home directory,
  prefix the file with /~/ , such as:

        curl -u $USER sftp://home.example.com/~/.bashrc

FTP and firewalls
FTP and firewalls


  The FTP protocol requires one of the involved parties to open a second
  The FTP protocol requires one of the involved parties to open a second
@@ -875,7 +893,8 @@ MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE
  As is mentioned above, you can download multiple files with one command line
  As is mentioned above, you can download multiple files with one command line
  by simply adding more URLs. If you want those to get saved to a local file
  by simply adding more URLs. If you want those to get saved to a local file
  instead of just printed to stdout, you need to add one save option for each
  instead of just printed to stdout, you need to add one save option for each
  URL you specify. Note that this also goes for the -O option.
  URL you specify. Note that this also goes for the -O option (but not
  --remote-name-all).


  For example: get two files and use -O for the first and a custom file
  For example: get two files and use -O for the first and a custom file
  name for the second:
  name for the second:
+2 −1
Original line number Original line Diff line number Diff line
@@ -106,8 +106,9 @@ the --option version of them. (This concept with --no options was added in
7.19.0. Previously most options were toggled on/off on repeated use of the
7.19.0. Previously most options were toggled on/off on repeated use of the
same command line option.)
same command line option.)
.IP "-a/--append"
.IP "-a/--append"
(FTP) When used in an FTP upload, this will tell curl to append to the target
(FTP/SFTP) When used in an upload, this will tell curl to append to the target
file instead of overwriting it. If the file doesn't exist, it will be created.
file instead of overwriting it. If the file doesn't exist, it will be created.
Note that this flag is ignored by some SSH servers (including OpenSSH).
.IP "-A/--user-agent <agent string>"
.IP "-A/--user-agent <agent string>"
(HTTP) Specify the User-Agent string to send to the HTTP server. Some badly
(HTTP) Specify the User-Agent string to send to the HTTP server. Some badly
done CGIs fail if this field isn't set to "Mozilla/4.0". To encode blanks in
done CGIs fail if this field isn't set to "Mozilla/4.0". To encode blanks in
+14 −5
Original line number Original line Diff line number Diff line
@@ -1198,6 +1198,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
    break;
    break;


  case SSH_SFTP_UPLOAD_INIT:
  case SSH_SFTP_UPLOAD_INIT:
  {
    unsigned long flags;
    /*
    /*
     * NOTE!!!  libssh2 requires that the destination path is a full path
     * NOTE!!!  libssh2 requires that the destination path is a full path
     *          that includes the destination file and name OR ends in a "/"
     *          that includes the destination file and name OR ends in a "/"
@@ -1221,13 +1223,19 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
      }
      }
    }
    }


    if(data->set.ftp_append)
      /* Try to open for append, but create if nonexisting */
      flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_APPEND;
    else if (data->state.resume_from > 0)
      /* If we have restart position then open for append */
      flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_APPEND;
    else
      /* Clear file before writing (normal behaviour) */
      flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC;

    sshc->sftp_handle =
    sshc->sftp_handle =
      libssh2_sftp_open(sshc->sftp_session, sftp_scp->path,
      libssh2_sftp_open(sshc->sftp_session, sftp_scp->path,
                        /* If we have restart position then open for append */
                        flags, data->set.new_file_perms);
                        (data->state.resume_from > 0)?
                        LIBSSH2_FXF_WRITE|LIBSSH2_FXF_APPEND:
                        LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC,
                        data->set.new_file_perms);


    if(!sshc->sftp_handle) {
    if(!sshc->sftp_handle) {
      if(libssh2_session_last_errno(sshc->ssh_session) ==
      if(libssh2_session_last_errno(sshc->ssh_session) ==
@@ -1322,6 +1330,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
      state(conn, SSH_STOP);
      state(conn, SSH_STOP);
    }
    }
    break;
    break;
  }


  case SSH_SFTP_CREATE_DIRS_INIT:
  case SSH_SFTP_CREATE_DIRS_INIT:
    if(strlen(sftp_scp->path) > 1) {
    if(strlen(sftp_scp->path) > 1) {
Loading