mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58: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:
parent
a948ca1669
commit
42cabc14d4
4
CHANGES
4
CHANGES
@ -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
|
||||||
|
@ -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:
|
||||||
|
|
||||||
|
29
docs/MANUAL
29
docs/MANUAL
@ -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:
|
||||||
|
@ -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
|
||||||
|
19
lib/ssh.c
19
lib/ssh.c
@ -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) {
|
||||||
|
@ -651,7 +651,7 @@ static void help(void)
|
|||||||
"Usage: curl [options...] <url>",
|
"Usage: curl [options...] <url>",
|
||||||
"Options: (H) means HTTP/HTTPS only, (F) means FTP only",
|
"Options: (H) means HTTP/HTTPS only, (F) means FTP only",
|
||||||
" --anyauth Pick \"any\" authentication method (H)",
|
" --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)",
|
" --basic Use HTTP Basic Authentication (H)",
|
||||||
" --cacert <file> CA certificate to verify peer against (SSL)",
|
" --cacert <file> CA certificate to verify peer against (SSL)",
|
||||||
" --capath <directory> CA directory to verify peer against (SSL)",
|
" --capath <directory> CA directory to verify peer against (SSL)",
|
||||||
|
Loading…
Reference in New Issue
Block a user