From c16c7f2013fccb806dba367d2b45a6ec103259d2 Mon Sep 17 00:00:00 2001 From: mouring Date: Tue, 6 Mar 2001 03:33:04 +0000 Subject: [PATCH] - millert@cvs.openbsd.org 2001/03/06 01:06:03 [ssh-keyscan.c] Don't assume we wil get the version string all in one read(). deraadt@ OK'd --- ChangeLog | 4 ++++ ssh-keyscan.c | 14 +++++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 443e9784..78ec8693 100644 --- a/ChangeLog +++ b/ChangeLog @@ -33,6 +33,10 @@ - deraadt@cvs.openbsd.org 2001/03/06 00:33:04 [authfd.c cli.c ssh-agent.c] EINTR/EAGAIN handling is required in more cases + - millert@cvs.openbsd.org 2001/03/06 01:06:03 + [ssh-keyscan.c] + Don't assume we wil get the version string all in one read(). + deraadt@ OK'd 20010305 - (bal) CVS ID touch up on sshpty.[ch] and sshlogin.[ch] diff --git a/ssh-keyscan.c b/ssh-keyscan.c index ab7f33d0..1b4f3a1b 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -8,7 +8,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh-keyscan.c,v 1.20 2001/03/05 15:37:27 deraadt Exp $"); +RCSID("$OpenBSD: ssh-keyscan.c,v 1.21 2001/03/06 01:06:03 millert Exp $"); #if defined(HAVE_SYS_QUEUE_H) && !defined(HAVE_BOGUS_SYS_QUEUE_H) #include @@ -411,23 +411,27 @@ conrecycle(int s) void congreet(int s) { - char buf[80]; + char buf[80], *cp; + size_t bufsiz; int n; con *c = &fdcon[s]; - n = read(s, buf, sizeof(buf)); + bufsiz = sizeof(buf); + cp = buf; + while (bufsiz-- && (n = read(s, cp, 1)) == 1 && *cp != '\n' && *cp != '\r') + cp++; if (n < 0) { if (errno != ECONNREFUSED) error("read (%s): %s", c->c_name, strerror(errno)); conrecycle(s); return; } - if (buf[n - 1] != '\n') { + if (*cp != '\n' && *cp != '\r') { error("%s: bad greeting", c->c_name); confree(s); return; } - buf[n - 1] = '\0'; + *cp = '\0'; fprintf(stderr, "# %s %s\n", c->c_name, buf); n = snprintf(buf, sizeof buf, "SSH-1.5-OpenSSH-keyscan\r\n"); if (atomicio(write, s, buf, n) != n) { -- 2.45.1