When giving authorisation errors from the proxy code in x11fwd.c,
[u/mdw/putty] / pscp.c
diff --git a/pscp.c b/pscp.c
index a906303..ab3077b 100644 (file)
--- a/pscp.c
+++ b/pscp.c
@@ -50,6 +50,8 @@ static void source(char *src);
 static void rsource(char *src);
 static void sink(char *targ, char *src);
 
+const char *const appname = "PSCP";
+
 /*
  * The maximum amount of queued data we accept before we stop and
  * wait for the server to process some.
@@ -180,12 +182,6 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen)
        return 0;
     }
 
-    /*
-     * If this is before the real session begins, just return.
-     */
-    if (!outptr)
-       return 0;
-
     if ((outlen > 0) && (len > 0)) {
        unsigned used = outlen;
        if (used > len)
@@ -245,7 +241,7 @@ static int ssh_scp_recv(unsigned char *buf, int len)
     }
 
     while (outlen > 0) {
-       if (ssh_sftp_loop_iteration() < 0)
+       if (back->exitcode(backhandle) >= 0 || ssh_sftp_loop_iteration() < 0)
            return 0;                  /* doom */
     }
 
@@ -258,8 +254,14 @@ static int ssh_scp_recv(unsigned char *buf, int len)
 static void ssh_scp_init(void)
 {
     while (!back->sendok(backhandle)) {
-       if (ssh_sftp_loop_iteration() < 0)
+        if (back->exitcode(backhandle) >= 0) {
+            errs++;
+            return;
+        }
+       if (ssh_sftp_loop_iteration() < 0) {
+            errs++;
            return;                    /* doom */
+        }
     }
 
     /* Work out which backend we ended up using. */
@@ -292,7 +294,7 @@ static void bump(char *fmt, ...)
     sfree(str2);
     errs++;
 
-    if (back != NULL && back->socket(backhandle) != NULL) {
+    if (back != NULL && back->connected(backhandle)) {
        char ch;
        back->special(backhandle, TS_EOF);
        ssh_scp_recv((unsigned char *) &ch, 1);
@@ -424,6 +426,7 @@ static void do_cmd(char *host, char *user, char *cmd)
     cfg.x11_forward = 0;
     cfg.agentfwd = 0;
     cfg.portfwd[0] = cfg.portfwd[1] = '\0';
+    cfg.ssh_simple = TRUE;
 
     /*
      * Set up main and possibly fallback command depending on
@@ -472,7 +475,7 @@ static void do_cmd(char *host, char *user, char *cmd)
     back->provide_logctx(backhandle, logctx);
     console_provide_logctx(logctx);
     ssh_scp_init();
-    if (verbose && realhost != NULL)
+    if (verbose && realhost != NULL && errs == 0)
        tell_user(stderr, "Connected to %s\n", realhost);
     sfree(realhost);
 }
@@ -2090,7 +2093,7 @@ static void get_dir_list(int argc, char *argv[])
     host = src;
     src = colon(src);
     if (src == NULL)
-       bump("Local to local copy not supported");
+       bump("Local file listing not supported");
     *src++ = '\0';
     if (*src == '\0')
        src = ".";
@@ -2285,7 +2288,7 @@ int psftp_main(int argc, char *argv[])
            tolocal(argc, argv);
     }
 
-    if (back != NULL && back->socket(backhandle) != NULL) {
+    if (back != NULL && back->connected(backhandle)) {
        char ch;
        back->special(backhandle, TS_EOF);
        ssh_scp_recv((unsigned char *) &ch, 1);