Attempt to report the error condition right when an SCP connection
[u/mdw/putty] / ssh.c
diff --git a/ssh.c b/ssh.c
index 9f0fe61..881919c 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -1505,7 +1505,8 @@ static int ssh_receive(Plug plug, int urgent, char *data, int len)
 /*
  * Connect to specified host and port.
  * Returns an error message, or NULL on success.
- * Also places the canonical host name into `realhost'.
+ * Also places the canonical host name into `realhost'. It must be
+ * freed by the caller.
  */
 static char *connect_to_host(char *host, int port, char **realhost)
 {
@@ -1545,7 +1546,7 @@ static char *connect_to_host(char *host, int port, char **realhost)
        return err;
 
 #ifdef FWHACK
-    *realhost = FWhost;
+    *realhost = strdup(FWhost);
 #endif
 
     /*
@@ -2017,7 +2018,10 @@ static int do_ssh1_login(unsigned char *in, int inlen, int ispkt)
                 * because one was supplied on the command line
                 * which has already failed to work). Terminate.
                 */
-               logevent("No more passwords to try");
+               send_packet(SSH1_MSG_DISCONNECT,
+                           PKT_STR, "No more passwords available to try",
+                           PKT_END);
+               connection_fatal("Unable to authenticate");
                ssh_state = SSH_STATE_CLOSED;
                crReturn(1);
            }
@@ -3536,7 +3540,13 @@ static void do_ssh2_authconn(unsigned char *in, int inlen, int ispkt)
                         * command line which has already failed to
                         * work). Terminate.
                         */
-                       logevent("No more passwords to try");
+                       ssh2_pkt_init(SSH2_MSG_DISCONNECT);
+                       ssh2_pkt_adduint32(SSH2_DISCONNECT_BY_APPLICATION);
+                       ssh2_pkt_addstring
+                           ("No more passwords available to try");
+                       ssh2_pkt_addstring("en");       /* language tag */
+                       ssh2_pkt_send();
+                       connection_fatal("Unable to authenticate");
                        ssh_state = SSH_STATE_CLOSED;
                        crReturnV;
                    }