Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/PSCP.C
diff options
context:
space:
mode:
authorKaim, Sean M <Sean.Kaim@ca.com>2015-11-04 23:46:18 +0300
committerKaim, Sean M <Sean.Kaim@ca.com>2015-11-04 23:46:18 +0300
commit1d0c3e474a4e2a935ae25932e731ac48c1a9ad1c (patch)
tree5242fb83e6a94100b5817e045c70904d4f9fb22e /PSCP.C
parentb19b2a07ed187eda1315fe3a16986dab7cbba663 (diff)
Merge upstream 0.65 tag
http://tartarus.org/~simon-git/gitweb/?p=putty.git;a=commit;h=7cfe83f7915907ea7cc2643468558e5bd83d4b51
Diffstat (limited to 'PSCP.C')
-rw-r--r--PSCP.C41
1 files changed, 18 insertions, 23 deletions
diff --git a/PSCP.C b/PSCP.C
index 6f38a201..e56d760f 100644
--- a/PSCP.C
+++ b/PSCP.C
@@ -41,6 +41,7 @@ static int try_sftp = 1;
static int main_cmd_is_sftp = 0;
static int fallback_cmd_is_sftp = 0;
static int using_sftp = 0;
+static int uploading = 0;
static Backend *back;
static void *backhandle;
@@ -231,11 +232,12 @@ int from_backend_untrusted(void *frontend_handle, const char *data, int len)
int from_backend_eof(void *frontend)
{
/*
- * We expect to be the party deciding when to close the
+ * We usually expect to be the party deciding when to close the
* connection, so if we see EOF before we sent it ourselves, we
- * should panic.
+ * should panic. The exception is if we're using old-style scp and
+ * downloading rather than uploading.
*/
- if (!sent_eof) {
+ if ((using_sftp || uploading) && !sent_eof) {
connection_fatal(frontend,
"Received unexpected end-of-file from server");
}
@@ -368,15 +370,9 @@ static void do_cmd(char *host, char *user, char *cmd)
bump("Empty host name");
/*
- * Remove fiddly bits of address: remove a colon suffix, and
- * the square brackets around an IPv6 literal address.
+ * Remove a colon suffix.
*/
- if (host[0] == '[') {
- host++;
- host[strcspn(host, "]")] = '\0';
- } else {
- host[strcspn(host, ":")] = '\0';
- }
+ host[host_strcspn(host, ":")] = '\0';
/*
* If we haven't loaded session details already (e.g., from -load),
@@ -611,17 +607,7 @@ static char *colon(char *str)
if (str[0] == '\0' || str[0] == ':' ||
(str[0] != '[' && str[1] == ':'))
return (NULL);
- while (*str != '\0' && *str != ':' && *str != '/' && *str != '\\') {
- if (*str == '[') {
- /* Skip over IPv6 literal addresses
- * (eg: 'jeroen@[2001:db8::1]:myfile.txt') */
- char *ipv6_end = strchr(str, ']');
- if (ipv6_end) {
- str = ipv6_end;
- }
- }
- str++;
- }
+ str += host_strcspn(str, ":/\\");
if (*str == ':')
return (str);
else
@@ -2047,6 +2033,8 @@ static void toremote(int argc, char *argv[])
char *cmd;
int i, wc_type;
+ uploading = 1;
+
targ = argv[argc - 1];
/* Separate host from filename */
@@ -2136,6 +2124,8 @@ static void tolocal(int argc, char *argv[])
char *src, *targ, *host, *user;
char *cmd;
+ uploading = 0;
+
if (argc != 2)
bump("More than one remote source not supported");
@@ -2263,9 +2253,11 @@ static void usage(void)
printf(" -1 -2 force use of particular SSH protocol version\n");
printf(" -4 -6 force use of IPv4 or IPv6\n");
printf(" -C enable compression\n");
- printf(" -i key private key file for authentication\n");
+ printf(" -i key private key file for user authentication\n");
printf(" -noagent disable use of Pageant\n");
printf(" -agent enable use of Pageant\n");
+ printf(" -hostkey aa:bb:cc:...\n");
+ printf(" manually specify a host key (may be repeated)\n");
printf(" -batch disable all interactive prompts\n");
printf(" -unsafe allow server-side wildcards (DANGEROUS)\n");
printf(" -sftp force use of SFTP protocol\n");
@@ -2301,6 +2293,9 @@ void cmdline_error(char *p, ...)
exit(1);
}
+const int share_can_be_downstream = TRUE;
+const int share_can_be_upstream = FALSE;
+
/*
* Main program. (Called `psftp_main' because it gets called from
* *sftp.c; bit silly, I know, but it had to be called _something_.)