projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ensure our network layer is properly cleaned up before PuTTY exits.
[u/mdw/putty]
/
console.c
diff --git
a/console.c
b/console.c
index
2a7efdc
..
557c144
100644
(file)
--- a/
console.c
+++ b/
console.c
@@
-15,6
+15,27
@@
int console_batch_mode = FALSE;
int console_batch_mode = FALSE;
+/*
+ * Clean up and exit.
+ */
+void cleanup_exit(int code)
+{
+ /*
+ * Clean up.
+ */
+ sk_cleanup();
+ WSACleanup();
+
+ if (cfg.protocol == PROT_SSH) {
+ random_save_seed();
+#ifdef MSCRYPTOAPI
+ crypto_wrapup();
+#endif
+ }
+
+ exit(code);
+}
+
void verify_ssh_host_key(char *host, int port, char *keytype,
char *keystr, char *fingerprint)
{
void verify_ssh_host_key(char *host, int port, char *keytype,
char *keystr, char *fingerprint)
{
@@
-86,7
+107,7
@@
void verify_ssh_host_key(char *host, int port, char *keytype,
if (ret == 2) { /* key was different */
if (console_batch_mode) {
fprintf(stderr, wrongmsg_batch, fingerprint);
if (ret == 2) { /* key was different */
if (console_batch_mode) {
fprintf(stderr, wrongmsg_batch, fingerprint);
- exit(1);
+
cleanup_
exit(1);
}
fprintf(stderr, wrongmsg, fingerprint);
fflush(stderr);
}
fprintf(stderr, wrongmsg, fingerprint);
fflush(stderr);
@@
-94,7
+115,7
@@
void verify_ssh_host_key(char *host, int port, char *keytype,
if (ret == 1) { /* key was absent */
if (console_batch_mode) {
fprintf(stderr, absentmsg_batch, fingerprint);
if (ret == 1) { /* key was absent */
if (console_batch_mode) {
fprintf(stderr, absentmsg_batch, fingerprint);
- exit(1);
+
cleanup_
exit(1);
}
fprintf(stderr, absentmsg, fingerprint);
fflush(stderr);
}
fprintf(stderr, absentmsg, fingerprint);
fflush(stderr);
@@
-112,7
+133,7
@@
void verify_ssh_host_key(char *host, int port, char *keytype,
store_host_key(host, port, keytype, keystr);
} else {
fprintf(stderr, abandoned);
store_host_key(host, port, keytype, keystr);
} else {
fprintf(stderr, abandoned);
- exit(0);
+
cleanup_
exit(0);
}
}
}
}
@@
-143,7
+164,7
@@
void askcipher(char *ciphername, int cs)
(cs == 0) ? "" :
(cs == 1) ? "client-to-server " : "server-to-client ",
ciphername);
(cs == 0) ? "" :
(cs == 1) ? "client-to-server " : "server-to-client ",
ciphername);
- exit(1);
+
cleanup_
exit(1);
}
fprintf(stderr, msg,
}
fprintf(stderr, msg,
@@
-163,7
+184,7
@@
void askcipher(char *ciphername, int cs)
return;
} else {
fprintf(stderr, abandoned);
return;
} else {
fprintf(stderr, abandoned);
- exit(0);
+
cleanup_
exit(0);
}
}
}
}
@@
-266,7
+287,7
@@
int console_get_line(const char *prompt, char *str,
hout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hin == INVALID_HANDLE_VALUE || hout == INVALID_HANDLE_VALUE) {
fprintf(stderr, "Cannot get standard input/output handles\n");
hout = GetStdHandle(STD_OUTPUT_HANDLE);
if (hin == INVALID_HANDLE_VALUE || hout == INVALID_HANDLE_VALUE) {
fprintf(stderr, "Cannot get standard input/output handles\n");
- exit(1);
+
cleanup_
exit(1);
}
GetConsoleMode(hin, &savemode);
}
GetConsoleMode(hin, &savemode);