From 247308b5cf8a51eba882abf13c5572ba8f83d0ea Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 23 Mar 2002 18:04:27 +0000 Subject: [PATCH] Attempt to ensure that everything passed to connection_fatal() is also logged to the Event Log, so that it's easy to cut-and-paste the error message afterwards. git-svn-id: svn://svn.tartarus.org/sgt/putty@1599 cda61777-01e9-0310-a592-d414129be87e --- raw.c | 3 ++- rlogin.c | 3 ++- ssh.c | 21 ++++++++++++++++++--- telnet.c | 3 ++- winnet.c | 9 ++++++--- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/raw.c b/raw.c index 58b060c5..20732dd2 100644 --- a/raw.c +++ b/raw.c @@ -33,7 +33,8 @@ static int raw_closing(Plug plug, char *error_msg, int error_code, } if (error_msg) { /* A socket error has occurred. */ - connection_fatal(error_msg); + logevent(error_msg); + connection_fatal("%s", error_msg); } /* Otherwise, the remote side closed the connection normally. */ return 0; } diff --git a/rlogin.c b/rlogin.c index 4038a2ff..2ef2d717 100644 --- a/rlogin.c +++ b/rlogin.c @@ -34,7 +34,8 @@ static int rlogin_closing(Plug plug, char *error_msg, int error_code, } if (error_msg) { /* A socket error has occurred. */ - connection_fatal(error_msg); + logevent(error_msg); + connection_fatal("%s", error_msg); } /* Otherwise, the remote side closed the connection normally. */ return 0; } diff --git a/ssh.c b/ssh.c index 6cc79bff..51bbf44e 100644 --- a/ssh.c +++ b/ssh.c @@ -19,9 +19,21 @@ if ((flags & FLAG_STDERR) && (flags & FLAG_VERBOSE)) \ { fprintf(stderr, "%s\n", s); fflush(stderr); } } +/* logevent, only printf-formatted. */ +void logeventf(char *fmt, ...) +{ + va_list ap; + char stuff[200]; + + va_start(ap, fmt); + vsprintf(stuff, fmt, ap); + va_end(ap); + logevent(stuff); +} + #define bombout(msg) ( ssh_state = SSH_STATE_CLOSED, \ (s ? sk_close(s), s = NULL : 0), \ - connection_fatal msg ) + logeventf msg, connection_fatal msg ) #define SSH1_MSG_DISCONNECT 1 /* 0x1 */ #define SSH1_SMSG_PUBLIC_KEY 2 /* 0x2 */ @@ -817,7 +829,7 @@ static int ssh1_rdpkt(unsigned char **data, int *datalen) msglen = sizeof(buf) - nowlen - 1; memcpy(buf + nowlen, pktin.body + 4, msglen); buf[nowlen + msglen] = '\0'; - logevent(buf); + /* logevent(buf); (this is now done within the bombout macro) */ bombout(("Server sent disconnect message:\n\"%s\"", buf+nowlen)); crReturn(0); } @@ -1779,6 +1791,7 @@ static int ssh_closing(Plug plug, char *error_msg, int error_code, } if (error_msg) { /* A socket error has occurred. */ + logevent(error_msg); connection_fatal(error_msg); } else { /* Otherwise, the remote side closed the connection normally. */ @@ -2443,6 +2456,7 @@ static int do_ssh1_login(unsigned char *in, int inlen, int ispkt) send_packet(SSH1_MSG_DISCONNECT, PKT_STR, "No more passwords available to try", PKT_END); + logevent("Unable to authenticate"); connection_fatal("Unable to authenticate"); ssh_state = SSH_STATE_CLOSED; crReturn(1); @@ -4420,6 +4434,7 @@ static void do_ssh2_authconn(unsigned char *in, int inlen, int ispkt) ("No more passwords available to try"); ssh2_pkt_addstring("en"); /* language tag */ ssh2_pkt_send(); + logevent("Unable to authenticate"); connection_fatal("Unable to authenticate"); ssh_state = SSH_STATE_CLOSED; crReturnV; @@ -5200,7 +5215,7 @@ static void do_ssh2_authconn(unsigned char *in, int inlen, int ispkt) ssh2_pkt_addstring(buf); ssh2_pkt_addstring("en"); /* language tag */ ssh2_pkt_send(); - connection_fatal(buf); + connection_fatal("%s", buf); ssh_state = SSH_STATE_CLOSED; crReturnV; } diff --git a/telnet.c b/telnet.c index 8b3de1e5..8ce3cf4f 100644 --- a/telnet.c +++ b/telnet.c @@ -575,7 +575,8 @@ static int telnet_closing(Plug plug, char *error_msg, int error_code, } if (error_msg) { /* A socket error has occurred. */ - connection_fatal(error_msg); + logevent(error_msg); + connection_fatal("%s", error_msg); } /* Otherwise, the remote side closed the connection normally. */ return 0; } diff --git a/winnet.c b/winnet.c index 068b9b49..73369f74 100644 --- a/winnet.c +++ b/winnet.c @@ -813,7 +813,8 @@ void try_send(Actual_Socket s) s->pending_error = err; return; } else { - fatalbox(winsock_error_string(err)); + logevent(winsock_error_string(err)); + fatalbox("%s", winsock_error_string(err)); } } else { if (s->sending_oob) { @@ -949,8 +950,10 @@ int select_result(WPARAM wParam, LPARAM lParam) ret = recv(s->s, buf, sizeof(buf), MSG_OOB); noise_ultralight(ret); if (ret <= 0) { - fatalbox(ret == 0 ? "Internal networking trouble" : - winsock_error_string(WSAGetLastError())); + char *str = (ret == 0 ? "Internal networking trouble" : + winsock_error_string(WSAGetLastError())); + logevent(str); + fatalbox("%s", str); } else { return plug_receive(s->plug, 2, buf, ret); } -- 2.11.0