diff options
Diffstat (limited to 'ssh-keyscan.c')
-rw-r--r-- | ssh-keyscan.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/ssh-keyscan.c b/ssh-keyscan.c index fdcfc5b3c..7dffb8517 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c | |||
@@ -7,7 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "includes.h" | 9 | #include "includes.h" |
10 | RCSID("$OpenBSD: ssh-keyscan.c,v 1.53 2005/04/28 10:17:56 moritz Exp $"); | 10 | RCSID("$OpenBSD: ssh-keyscan.c,v 1.54 2005/05/24 17:32:44 avsm Exp $"); |
11 | 11 | ||
12 | #include "openbsd-compat/sys-queue.h" | 12 | #include "openbsd-compat/sys-queue.h" |
13 | 13 | ||
@@ -493,10 +493,10 @@ conrecycle(int s) | |||
493 | static void | 493 | static void |
494 | congreet(int s) | 494 | congreet(int s) |
495 | { | 495 | { |
496 | int remote_major = 0, remote_minor = 0, n = 0; | 496 | int remote_major = 0, remote_minor = 0; |
497 | char buf[256], *cp; | 497 | char buf[256], *cp; |
498 | char remote_version[sizeof buf]; | 498 | char remote_version[sizeof buf]; |
499 | size_t bufsiz; | 499 | size_t bufsiz, n = 0; |
500 | con *c = &fdcon[s]; | 500 | con *c = &fdcon[s]; |
501 | 501 | ||
502 | bufsiz = sizeof(buf); | 502 | bufsiz = sizeof(buf); |
@@ -506,14 +506,17 @@ congreet(int s) | |||
506 | *cp = '\n'; | 506 | *cp = '\n'; |
507 | cp++; | 507 | cp++; |
508 | } | 508 | } |
509 | if (n < 0) { | ||
510 | if (errno != ECONNREFUSED) | ||
511 | error("read (%s): %s", c->c_name, strerror(errno)); | ||
512 | conrecycle(s); | ||
513 | return; | ||
514 | } | ||
515 | if (n == 0) { | 509 | if (n == 0) { |
516 | error("%s: Connection closed by remote host", c->c_name); | 510 | switch (errno) { |
511 | case EPIPE: | ||
512 | error("%s: Connection closed by remote host", c->c_name); | ||
513 | break; | ||
514 | case ECONNREFUSED: | ||
515 | break; | ||
516 | default: | ||
517 | error("read (%s): %s", c->c_name, strerror(errno)); | ||
518 | break; | ||
519 | } | ||
517 | conrecycle(s); | 520 | conrecycle(s); |
518 | return; | 521 | return; |
519 | } | 522 | } |
@@ -566,14 +569,14 @@ static void | |||
566 | conread(int s) | 569 | conread(int s) |
567 | { | 570 | { |
568 | con *c = &fdcon[s]; | 571 | con *c = &fdcon[s]; |
569 | int n; | 572 | size_t n; |
570 | 573 | ||
571 | if (c->c_status == CS_CON) { | 574 | if (c->c_status == CS_CON) { |
572 | congreet(s); | 575 | congreet(s); |
573 | return; | 576 | return; |
574 | } | 577 | } |
575 | n = atomicio(read, s, c->c_data + c->c_off, c->c_len - c->c_off); | 578 | n = atomicio(read, s, c->c_data + c->c_off, c->c_len - c->c_off); |
576 | if (n < 0) { | 579 | if (n == 0) { |
577 | error("read (%s): %s", c->c_name, strerror(errno)); | 580 | error("read (%s): %s", c->c_name, strerror(errno)); |
578 | confree(s); | 581 | confree(s); |
579 | return; | 582 | return; |