]> andersk Git - openssh.git/commitdiff
- deraadt@cvs.openbsd.org 2001/03/06 00:33:04
authormouring <mouring>
Tue, 6 Mar 2001 03:31:34 +0000 (03:31 +0000)
committermouring <mouring>
Tue, 6 Mar 2001 03:31:34 +0000 (03:31 +0000)
     [authfd.c cli.c ssh-agent.c]
     EINTR/EAGAIN handling is required in more cases

ChangeLog
authfd.c
cli.c
ssh-agent.c

index 758afaf7d8d59b244cc5a8bdab5576cb8cfe3e0d..443e9784b07dd6845c07409a40e6f6bbb1f935e7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -30,6 +30,9 @@
    - stevesk@cvs.openbsd.org 2001/03/05 17:58:22
      [dh.c]
      spelling
+   - 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
 
 20010305
  - (bal) CVS ID touch up on sshpty.[ch] and sshlogin.[ch]
index 76e917755eb6cfc56bd0a1f0de4de27642c5f9ae..8613b9a525730640572127fefcb1c9f2bd9c90ee 100644 (file)
--- a/authfd.c
+++ b/authfd.c
@@ -35,7 +35,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: authfd.c,v 1.37 2001/03/04 17:42:27 millert Exp $");
+RCSID("$OpenBSD: authfd.c,v 1.38 2001/03/06 00:33:03 deraadt Exp $");
 
 #include <openssl/evp.h>
 
@@ -120,6 +120,8 @@ ssh_request_reply(AuthenticationConnection *auth, Buffer *request, Buffer *reply
        len = 4;
        while (len > 0) {
                l = read(auth->fd, buf + 4 - len, len);
+               if (l == -1 && (errno == EAGAIN || errno == EINTR))
+                       continue; 
                if (l <= 0) {
                        error("Error reading response length from authentication socket.");
                        return 0;
@@ -139,6 +141,8 @@ ssh_request_reply(AuthenticationConnection *auth, Buffer *request, Buffer *reply
                if (l > sizeof(buf))
                        l = sizeof(buf);
                l = read(auth->fd, buf, l);
+               if (l == -1 && (errno == EAGAIN || errno == EINTR))
+                       continue; 
                if (l <= 0) {
                        error("Error reading response from authentication socket.");
                        return 0;
diff --git a/cli.c b/cli.c
index 915b34b14344fef8e7a04d77941075b2b7e302cb..d0f0cf3ffaeb1fc19c46e3341363ed2ebdc896e7 100644 (file)
--- a/cli.c
+++ b/cli.c
@@ -1,4 +1,4 @@
-/*     $OpenBSD: cli.c,v 1.10 2001/03/01 03:38:33 deraadt Exp $        */
+/*     $OpenBSD: cli.c,v 1.11 2001/03/06 00:33:04 deraadt Exp $        */
 
 /*
  * Copyright (c) 2000 Markus Friedl.  All rights reserved.
@@ -25,7 +25,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: cli.c,v 1.10 2001/03/01 03:38:33 deraadt Exp $");
+RCSID("$OpenBSD: cli.c,v 1.11 2001/03/06 00:33:04 deraadt Exp $");
 
 #include "xmalloc.h"
 #include "log.h"
@@ -134,12 +134,16 @@ cli_read(char* buf, int size, int echo)
 {
        char ch = 0;
        int i = 0;
+       int n;
 
        if (!echo)
                cli_echo_disable();
 
        while (ch != '\n') {
-               if (read(cli_input, &ch, 1) != 1)
+               n = read(cli_input, &ch, 1);
+               if (n == -1 && (errno == EAGAIN || errno == EINTR))
+                       continue;
+               if (n != 1)
                        break;
                if (ch == '\n' || intr != 0)
                        break;
index a558ecef7d6b9776176962aaf41a21af5ca044ec..5a774d57029aa97d8ed6f336de0ef3e2086b2bbb 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ssh-agent.c,v 1.51 2001/03/02 18:54:31 deraadt Exp $  */
+/*     $OpenBSD: ssh-agent.c,v 1.52 2001/03/06 00:33:04 deraadt Exp $  */
 
 /*
  * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -37,7 +37,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: ssh-agent.c,v 1.51 2001/03/02 18:54:31 deraadt Exp $");
+RCSID("$OpenBSD: ssh-agent.c,v 1.52 2001/03/06 00:33:04 deraadt Exp $");
 
 #include <openssl/evp.h>
 #include <openssl/md5.h>
@@ -635,9 +635,15 @@ after_select(fd_set *readset, fd_set *writeset)
                case AUTH_CONNECTION:
                        if (buffer_len(&sockets[i].output) > 0 &&
                            FD_ISSET(sockets[i].fd, writeset)) {
-                               len = write(sockets[i].fd,
-                                   buffer_ptr(&sockets[i].output),
-                                   buffer_len(&sockets[i].output));
+                               do {
+                                       len = write(sockets[i].fd,
+                                           buffer_ptr(&sockets[i].output),
+                                           buffer_len(&sockets[i].output));
+                                       if (len == -1 && (errno == EAGAIN ||
+                                           errno == EINTR))
+                                               continue;
+                                       break;
+                               } while (1);
                                if (len <= 0) {
                                        shutdown(sockets[i].fd, SHUT_RDWR);
                                        close(sockets[i].fd);
@@ -649,7 +655,13 @@ after_select(fd_set *readset, fd_set *writeset)
                                buffer_consume(&sockets[i].output, len);
                        }
                        if (FD_ISSET(sockets[i].fd, readset)) {
-                               len = read(sockets[i].fd, buf, sizeof(buf));
+                               do {
+                                       len = read(sockets[i].fd, buf, sizeof(buf));
+                                       if (len == -1 && (errno == EAGAIN ||
+                                           errno == EINTR))
+                                               continue;
+                                       break;
+                               } while (1);
                                if (len <= 0) {
                                        shutdown(sockets[i].fd, SHUT_RDWR);
                                        close(sockets[i].fd);
This page took 0.051615 seconds and 5 git commands to generate.