Attempt to report the error condition right when an SCP connection
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 13 May 2001 11:15:16 +0000 (11:15 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 13 May 2001 11:15:16 +0000 (11:15 +0000)
with a pre-supplied password fails to authenticate.

git-svn-id: svn://svn.tartarus.org/sgt/putty@1114 cda61777-01e9-0310-a592-d414129be87e

scp.c
ssh.c

diff --git a/scp.c b/scp.c
index 9a2624a..191f6a7 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -46,6 +46,7 @@
 #define   WM_RET_ERR_CNT       ( WM_APP_BASE+406 )
 #define   WM_LS_RET_ERR_CNT    ( WM_APP_BASE+407 )
 
+static int list = 0;
 static int verbose = 0;
 static int recursive = 0;
 static int preserve = 0;
@@ -239,6 +240,16 @@ void fatalbox(char *fmt, ...)
     va_end(ap);
     strcat(str, "\n");
     tell_str(stderr, str);
+    errs++;
+
+    if (gui_mode) {
+       unsigned int msg_id = WM_RET_ERR_CNT;
+       if (list)
+           msg_id = WM_LS_RET_ERR_CNT;
+       while (!PostMessage
+              ((HWND) atoi(gui_hwnd), msg_id, (WPARAM) errs,
+               0 /*lParam */ ))SleepEx(1000, TRUE);
+    }
 
     exit(1);
 }
@@ -252,6 +263,16 @@ void connection_fatal(char *fmt, ...)
     va_end(ap);
     strcat(str, "\n");
     tell_str(stderr, str);
+    errs++;
+
+    if (gui_mode) {
+       unsigned int msg_id = WM_RET_ERR_CNT;
+       if (list)
+           msg_id = WM_LS_RET_ERR_CNT;
+       while (!PostMessage
+              ((HWND) atoi(gui_hwnd), msg_id, (WPARAM) errs,
+               0 /*lParam */ ))SleepEx(1000, TRUE);
+    }
 
     exit(1);
 }
@@ -398,12 +419,23 @@ static void bump(char *fmt, ...)
     va_end(ap);
     strcat(str, "\n");
     tell_str(stderr, str);
+    errs++;
 
     if (back != NULL && back->socket() != NULL) {
        char ch;
        back->special(TS_EOF);
        ssh_scp_recv(&ch, 1);
     }
+
+    if (gui_mode) {
+       unsigned int msg_id = WM_RET_ERR_CNT;
+       if (list)
+           msg_id = WM_LS_RET_ERR_CNT;
+       while (!PostMessage
+              ((HWND) atoi(gui_hwnd), msg_id, (WPARAM) errs,
+               0 /*lParam */ ))SleepEx(1000, TRUE);
+    }
+
     exit(1);
 }
 
@@ -1236,7 +1268,6 @@ static void usage(void)
 int main(int argc, char *argv[])
 {
     int i;
-    int list = 0;
 
     default_protocol = PROT_TELNET;
 
diff --git a/ssh.c b/ssh.c
index e120c15..881919c 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -2018,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);
            }
@@ -3537,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;
                    }