]> andersk Git - openssh.git/commitdiff
- millert@cvs.openbsd.org 2001/03/06 01:06:03
authormouring <mouring>
Tue, 6 Mar 2001 03:33:04 +0000 (03:33 +0000)
committermouring <mouring>
Tue, 6 Mar 2001 03:33:04 +0000 (03:33 +0000)
     [ssh-keyscan.c]
     Don't assume we wil get the version string all in one read().
     deraadt@ OK'd

ChangeLog
ssh-keyscan.c

index 443e9784b07dd6845c07409a40e6f6bbb1f935e7..78ec8693943efeb2c6286ac3bebb0051ab7700e2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
    - 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]
index ab7f33d04fb2777e8bd9c05f07e6caeaddbf09e5..1b4f3a1bb143362ace91a231e8f97a2bd7458c48 100644 (file)
@@ -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 <sys/queue.h>
@@ -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) {
This page took 0.098218 seconds and 5 git commands to generate.