=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh-keyscan.c,v retrieving revision 1.52.2.2 retrieving revision 1.53 diff -u -r1.52.2.2 -r1.53 --- src/usr.bin/ssh/ssh-keyscan.c 2006/02/03 02:53:45 1.52.2.2 +++ src/usr.bin/ssh/ssh-keyscan.c 2005/04/28 10:17:56 1.53 @@ -7,7 +7,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh-keyscan.c,v 1.52.2.2 2006/02/03 02:53:45 brad Exp $"); +RCSID("$OpenBSD: ssh-keyscan.c,v 1.53 2005/04/28 10:17:56 moritz Exp $"); #include #include @@ -167,7 +167,7 @@ static char * Linebuf_getline(Linebuf * lb) { - size_t n = 0; + int n = 0; void *p; lb->lineno++; @@ -484,39 +484,30 @@ static void congreet(int s) { - int n = 0, remote_major = 0, remote_minor = 0; + int remote_major = 0, remote_minor = 0, n = 0; char buf[256], *cp; char remote_version[sizeof buf]; size_t bufsiz; con *c = &fdcon[s]; - for (;;) { - memset(buf, '\0', sizeof(buf)); - bufsiz = sizeof(buf); - cp = buf; - while (bufsiz-- && - (n = atomicio(read, s, cp, 1)) == 1 && *cp != '\n') { - if (*cp == '\r') - *cp = '\n'; - cp++; - } - if (n != 1 || strncmp(buf, "SSH-", 4) == 0) - break; + bufsiz = sizeof(buf); + cp = buf; + while (bufsiz-- && (n = atomicio(read, s, cp, 1)) == 1 && *cp != '\n') { + if (*cp == '\r') + *cp = '\n'; + cp++; } - if (n == 0) { - switch (errno) { - case EPIPE: - error("%s: Connection closed by remote host", c->c_name); - break; - case ECONNREFUSED: - break; - default: + if (n < 0) { + if (errno != ECONNREFUSED) error("read (%s): %s", c->c_name, strerror(errno)); - break; - } conrecycle(s); return; } + if (n == 0) { + error("%s: Connection closed by remote host", c->c_name); + conrecycle(s); + return; + } if (*cp != '\n' && *cp != '\r') { error("%s: bad greeting", c->c_name); confree(s); @@ -543,12 +534,12 @@ n = snprintf(buf, sizeof buf, "SSH-%d.%d-OpenSSH-keyscan\r\n", c->c_keytype == KT_RSA1? PROTOCOL_MAJOR_1 : PROTOCOL_MAJOR_2, c->c_keytype == KT_RSA1? PROTOCOL_MINOR_1 : PROTOCOL_MINOR_2); - if (n < 0 || (size_t)n >= sizeof(buf)) { + if (n == -1 || n >= sizeof buf) { error("snprintf: buffer too small"); confree(s); return; } - if (atomicio(vwrite, s, buf, n) != (size_t)n) { + if (atomicio(vwrite, s, buf, n) != n) { error("write (%s): %s", c->c_name, strerror(errno)); confree(s); return; @@ -566,14 +557,14 @@ conread(int s) { con *c = &fdcon[s]; - size_t n; + int n; if (c->c_status == CS_CON) { congreet(s); return; } n = atomicio(read, s, c->c_data + c->c_off, c->c_len - c->c_off); - if (n == 0) { + if (n < 0) { error("read (%s): %s", c->c_name, strerror(errno)); confree(s); return; @@ -705,9 +696,6 @@ extern char *optarg; TAILQ_INIT(&tq); - - /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ - sanitise_stdfd(); if (argc <= 1) usage();