- deraadt@cvs.openbsd.org 2001/02/12 22:56:09
[clientloop.c packet.c ssh-keyscan.c] deal with EAGAIN/EINTR selects which were skipped
This commit is contained in:
parent
d8a9021f36
commit
f9452513fc
|
@ -20,6 +20,9 @@
|
||||||
ssh-keygen.c sshd.8]
|
ssh-keygen.c sshd.8]
|
||||||
PermitRootLogin={yes,without-password,forced-commands-only,no}
|
PermitRootLogin={yes,without-password,forced-commands-only,no}
|
||||||
(before this change, root could login even if PermitRootLogin==no)
|
(before this change, root could login even if PermitRootLogin==no)
|
||||||
|
- deraadt@cvs.openbsd.org 2001/02/12 22:56:09
|
||||||
|
[clientloop.c packet.c ssh-keyscan.c]
|
||||||
|
deal with EAGAIN/EINTR selects which were skipped
|
||||||
|
|
||||||
20010214
|
20010214
|
||||||
- (djm) Don't try to close PAM session or delete credentials if the
|
- (djm) Don't try to close PAM session or delete credentials if the
|
||||||
|
@ -3948,4 +3951,4 @@
|
||||||
- Wrote replacements for strlcpy and mkdtemp
|
- Wrote replacements for strlcpy and mkdtemp
|
||||||
- Released 1.0pre1
|
- Released 1.0pre1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.764 2001/02/15 03:08:27 mouring Exp $
|
$Id: ChangeLog,v 1.765 2001/02/15 03:12:08 mouring Exp $
|
||||||
|
|
11
clientloop.c
11
clientloop.c
|
@ -59,7 +59,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: clientloop.c,v 1.49 2001/02/08 19:30:51 itojun Exp $");
|
RCSID("$OpenBSD: clientloop.c,v 1.51 2001/02/13 21:51:09 markus Exp $");
|
||||||
|
|
||||||
#include "ssh.h"
|
#include "ssh.h"
|
||||||
#include "ssh1.h"
|
#include "ssh1.h"
|
||||||
|
@ -406,6 +406,15 @@ client_wait_until_can_do_something(fd_set **readsetp, fd_set **writesetp,
|
||||||
|
|
||||||
if (select((*maxfdp)+1, *readsetp, *writesetp, NULL, NULL) < 0) {
|
if (select((*maxfdp)+1, *readsetp, *writesetp, NULL, NULL) < 0) {
|
||||||
char buf[100];
|
char buf[100];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have to clear the select masks, because we return.
|
||||||
|
* We have to return, because the mainloop checks for the flags
|
||||||
|
* set by the signal handlers.
|
||||||
|
*/
|
||||||
|
memset(*readsetp, 0, *maxfdp);
|
||||||
|
memset(*writesetp, 0, *maxfdp);
|
||||||
|
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
return;
|
return;
|
||||||
/* Note: we might still have data in the buffers. */
|
/* Note: we might still have data in the buffers. */
|
||||||
|
|
11
packet.c
11
packet.c
|
@ -37,7 +37,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: packet.c,v 1.50 2001/02/11 12:59:25 markus Exp $");
|
RCSID("$OpenBSD: packet.c,v 1.51 2001/02/12 22:56:09 deraadt Exp $");
|
||||||
|
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
|
@ -688,7 +688,9 @@ packet_read(int *payload_len_ptr)
|
||||||
FD_SET(connection_in, &set);
|
FD_SET(connection_in, &set);
|
||||||
|
|
||||||
/* Wait for some data to arrive. */
|
/* Wait for some data to arrive. */
|
||||||
select(connection_in + 1, &set, NULL, NULL, NULL);
|
while (select(connection_in + 1, &set, NULL, NULL, NULL) == -1 &&
|
||||||
|
(errno == EAGAIN || errno == EINTR))
|
||||||
|
;
|
||||||
|
|
||||||
/* Read data from the socket. */
|
/* Read data from the socket. */
|
||||||
len = read(connection_in, buf, sizeof(buf));
|
len = read(connection_in, buf, sizeof(buf));
|
||||||
|
@ -1195,9 +1197,12 @@ packet_write_wait()
|
||||||
packet_write_poll();
|
packet_write_poll();
|
||||||
while (packet_have_data_to_write()) {
|
while (packet_have_data_to_write()) {
|
||||||
fd_set set;
|
fd_set set;
|
||||||
|
|
||||||
FD_ZERO(&set);
|
FD_ZERO(&set);
|
||||||
FD_SET(connection_out, &set);
|
FD_SET(connection_out, &set);
|
||||||
select(connection_out + 1, NULL, &set, NULL, NULL);
|
while (select(connection_out + 1, NULL, &set, NULL, NULL) == -1 &&
|
||||||
|
(errno == EAGAIN || errno == EINTR))
|
||||||
|
;
|
||||||
packet_write_poll();
|
packet_write_poll();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: ssh-keyscan.c,v 1.15 2001/02/09 09:04:59 itojun Exp $");
|
RCSID("$OpenBSD: ssh-keyscan.c,v 1.16 2001/02/12 22:56:10 deraadt Exp $");
|
||||||
|
|
||||||
#if defined(HAVE_SYS_QUEUE_H) && !defined(HAVE_BOGUS_SYS_QUEUE_H)
|
#if defined(HAVE_SYS_QUEUE_H) && !defined(HAVE_BOGUS_SYS_QUEUE_H)
|
||||||
#include <sys/queue.h>
|
#include <sys/queue.h>
|
||||||
|
@ -498,7 +498,10 @@ conloop(void)
|
||||||
seltime.tv_sec = seltime.tv_usec = 0;
|
seltime.tv_sec = seltime.tv_usec = 0;
|
||||||
|
|
||||||
r = e = read_wait;
|
r = e = read_wait;
|
||||||
select(maxfd, &r, NULL, &e, &seltime);
|
while (select(maxfd, &r, NULL, &e, &seltime) == -1 &&
|
||||||
|
(errno == EAGAIN || errno == EINTR))
|
||||||
|
;
|
||||||
|
|
||||||
for (i = 0; i < maxfd; i++)
|
for (i = 0; i < maxfd; i++)
|
||||||
if (FD_ISSET(i, &e)) {
|
if (FD_ISSET(i, &e)) {
|
||||||
error("%s: exception!", fdcon[i].c_name);
|
error("%s: exception!", fdcon[i].c_name);
|
||||||
|
|
Loading…
Reference in New Issue