summaryrefslogtreecommitdiffstats
path: root/dispatch.c
diff options
context:
space:
mode:
authordjm@openbsd.org <djm@openbsd.org>2015-01-28 22:05:31 +0000
committerDamien Miller <djm@mindrot.org>2015-01-29 09:08:07 +1100
commit9125525c37bf73ad3ee4025520889d2ce9d10f29 (patch)
treeaf26728c760d9de8306bebbe7af633146b659cfe /dispatch.c
parentfae7bbe544cba7a9e5e4ab47ff6faa3d978646eb (diff)
upstream commit
avoid fatal() calls in packet code makes ssh-keyscan more reliable against server failures ok dtucker@ markus@
Diffstat (limited to 'dispatch.c')
-rw-r--r--dispatch.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/dispatch.c b/dispatch.c
index 70fa84f7..9ff5e3da 100644
--- a/dispatch.c
+++ b/dispatch.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dispatch.c,v 1.23 2015/01/19 20:07:45 markus Exp $ */
+/* $OpenBSD: dispatch.c,v 1.24 2015/01/28 22:05:31 djm Exp $ */
/*
* Copyright (c) 2000 Markus Friedl. All rights reserved.
*
@@ -137,6 +137,18 @@ ssh_dispatch_run_fatal(struct ssh *ssh, int mode, volatile sig_atomic_t *done,
{
int r;
- if ((r = ssh_dispatch_run(ssh, mode, done, ctxt)) != 0)
- fatal("%s: %s", __func__, ssh_err(r));
+ if ((r = ssh_dispatch_run(ssh, mode, done, ctxt)) != 0) {
+ switch (r) {
+ case SSH_ERR_CONN_CLOSED:
+ logit("Connection closed by %.200s",
+ ssh_remote_ipaddr(ssh));
+ cleanup_exit(255);
+ case SSH_ERR_CONN_TIMEOUT:
+ logit("Connection to %.200s timed out while "
+ "waiting to read", ssh_remote_ipaddr(ssh));
+ cleanup_exit(255);
+ default:
+ fatal("%s: %s", __func__, ssh_err(r));
+ }
+ }
}