summaryrefslogtreecommitdiffstats
path: root/ssh-agent.c
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2001-07-18 17:58:08 +0200
committerBen Lindstrom <mouring@eviladmin.org>2001-07-18 17:58:08 +0200
commita3d5a4c2dbc4fa92333b76882b00e3811177eff6 (patch)
treeeca6b7f61890192e4d9e9174ef7a6d8759ed0266 /ssh-agent.c
parent - stevesk@cvs.openbsd.org 2001/07/15 16:58:29 (diff)
downloadopenssh-a3d5a4c2dbc4fa92333b76882b00e3811177eff6.tar.xz
openssh-a3d5a4c2dbc4fa92333b76882b00e3811177eff6.zip
- markus@cvs.openbsd.org 2001/07/17 20:48:42
[ssh-agent.c] update maxfd if maxfd is closed; report from jmcelroy@dtgnet.com
Diffstat (limited to 'ssh-agent.c')
-rw-r--r--ssh-agent.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/ssh-agent.c b/ssh-agent.c
index 4ddad9473..ad4cbf06d 100644
--- a/ssh-agent.c
+++ b/ssh-agent.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-agent.c,v 1.65 2001/07/15 16:58:29 stevesk Exp $ */
+/* $OpenBSD: ssh-agent.c,v 1.66 2001/07/17 20:48:42 markus Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -36,7 +36,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: ssh-agent.c,v 1.65 2001/07/15 16:58:29 stevesk Exp $");
+RCSID("$OpenBSD: ssh-agent.c,v 1.66 2001/07/17 20:48:42 markus Exp $");
#include <openssl/evp.h>
#include <openssl/md5.h>
@@ -656,7 +656,7 @@ new_socket(int type, int fd)
}
static int
-prepare_select(fd_set **fdrp, fd_set **fdwp, int *fdl)
+prepare_select(fd_set **fdrp, fd_set **fdwp, int *fdl, int *nallocp)
{
u_int i, sz;
int n = 0;
@@ -676,15 +676,18 @@ prepare_select(fd_set **fdrp, fd_set **fdwp, int *fdl)
}
sz = howmany(n+1, NFDBITS) * sizeof(fd_mask);
- if (*fdrp == NULL || n > *fdl) {
+ if (*fdrp == NULL || sz > *nallocp) {
if (*fdrp)
xfree(*fdrp);
if (*fdwp)
xfree(*fdwp);
*fdrp = xmalloc(sz);
*fdwp = xmalloc(sz);
- *fdl = n;
+ *nallocp = sz;
}
+ if (n < *fdl)
+ debug("XXX shrink: %d < %d", n, *fdl);
+ *fdl = n;
memset(*fdrp, 0, sz);
memset(*fdwp, 0, sz);
@@ -824,7 +827,7 @@ usage(void)
int
main(int ac, char **av)
{
- int sock, c_flag = 0, d_flag = 0, k_flag = 0, s_flag = 0, ch;
+ int sock, c_flag = 0, d_flag = 0, k_flag = 0, s_flag = 0, ch, nalloc;
struct sockaddr_un sunaddr;
#ifdef HAVE_SETRLIMIT
struct rlimit rlim;
@@ -1017,8 +1020,10 @@ skip:
signal(SIGPIPE, SIG_IGN);
signal(SIGHUP, cleanup_handler);
signal(SIGTERM, cleanup_handler);
+ nalloc = 0;
+
while (1) {
- prepare_select(&readsetp, &writesetp, &max_fd);
+ prepare_select(&readsetp, &writesetp, &max_fd, &nalloc);
if (select(max_fd + 1, readsetp, writesetp, NULL, NULL) < 0) {
if (errno == EINTR)
continue;