1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 15:48:49 -05:00

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

support this so it goes untested.
This commit is contained in:
Dan Fandrich 2008-08-01 18:41:14 +00:00
parent a948ca1669
commit 42cabc14d4
6 changed files with 46 additions and 12 deletions

View File

@ -6,6 +6,10 @@
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)
- 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

View File

@ -20,6 +20,7 @@ This release includes the following changes:
o Added test selection by key word in runtests.pl
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 Support --append on SFTP uploads (not with OpenSSH, though)
This release includes the following bugfixes:

View File

@ -48,6 +48,9 @@ SIMPLE USAGE
curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \
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
@ -86,6 +89,13 @@ USING PASSWORDS
standards while the recommended "explicit" way is done by using FTP:// and
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
Curl also supports user and password in HTTP URLs, thus you can pick a file
@ -154,9 +164,9 @@ RANGES
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
@ -169,7 +179,7 @@ UPLOADING
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
@ -331,7 +341,7 @@ REFERRER
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
@ -564,6 +574,14 @@ FTP and PATH NAMES
(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
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
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
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
name for the second:

View File

@ -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
same command line option.)
.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.
Note that this flag is ignored by some SSH servers (including OpenSSH).
.IP "-A/--user-agent <agent string>"
(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

View File

@ -1198,6 +1198,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
break;
case SSH_SFTP_UPLOAD_INIT:
{
unsigned long flags;
/*
* NOTE!!! libssh2 requires that the destination path is a full path
* 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 =
libssh2_sftp_open(sshc->sftp_session, sftp_scp->path,
/* If we have restart position then open for append */
(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);
flags, data->set.new_file_perms);
if(!sshc->sftp_handle) {
if(libssh2_session_last_errno(sshc->ssh_session) ==
@ -1322,6 +1330,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn)
state(conn, SSH_STOP);
}
break;
}
case SSH_SFTP_CREATE_DIRS_INIT:
if(strlen(sftp_scp->path) > 1) {

View File

@ -651,7 +651,7 @@ static void help(void)
"Usage: curl [options...] <url>",
"Options: (H) means HTTP/HTTPS only, (F) means FTP only",
" --anyauth Pick \"any\" authentication method (H)",
" -a/--append Append to target file when uploading (F)",
" -a/--append Append to target file when uploading (F/SFTP)",
" --basic Use HTTP Basic Authentication (H)",
" --cacert <file> CA certificate to verify peer against (SSL)",
" --capath <directory> CA directory to verify peer against (SSL)",