From 60bd4098f64fd0fbbd9b6b4de2562623318141a0 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 25 Jun 2004 14:03:34 +1000 Subject: - (dtucker) [configure.ac openbsd-compat/misc.c [openbsd-compat/misc.h] Add closefrom() for platforms that don't have it. (might need some tuning later, but I want to be able to test reexec). --- openbsd-compat/bsd-misc.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'openbsd-compat/bsd-misc.c') diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c index 7b06786f5..c58cce0f4 100644 --- a/openbsd-compat/bsd-misc.c +++ b/openbsd-compat/bsd-misc.c @@ -17,7 +17,7 @@ #include "includes.h" #include "xmalloc.h" -RCSID("$Id: bsd-misc.c,v 1.21 2004/02/17 05:49:55 djm Exp $"); +RCSID("$Id: bsd-misc.c,v 1.22 2004/06/25 04:03:34 dtucker Exp $"); /* * NB. duplicate __progname in case it is an alias for argv[0] @@ -192,6 +192,22 @@ tcsendbreak(int fd, int duration) } #endif /* HAVE_TCSENDBREAK */ +#ifndef HAVE_CLOSEFROM +int +closefrom(int fd) +{ + int i, result = 0, err = 0; + + for (i = fd; i < 128; i++) + if (close(i) != 0) { + err = errno; + result = -1; + } + errno = err; + return result; +} +#endif /* HAVE_CLOSEFROM */ + mysig_t mysignal(int sig, mysig_t act) { -- cgit v1.2.3 From ba6de952a00558e6d93b8c9edd81806a99716411 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Sat, 17 Jul 2004 14:07:42 +1000 Subject: - (dtucker) [logintest.c scp.c sftp-server.c sftp.c ssh-add.c ssh-agent.c ssh-keygen.c ssh-keyscan.c ssh-keysign.c ssh-rand-helper.c ssh.c sshd.c openbsd-compat/bsd-misc.c] Move "char *__progname" to bsd-misc.c. Reduces diff vs OpenBSD; ok mouring@, tested by tim@ too. --- ChangeLog | 8 +++++++- logintest.c | 6 +----- openbsd-compat/bsd-misc.c | 6 +++++- scp.c | 4 ---- sftp-server.c | 4 ---- sftp.c | 4 ---- ssh-add.c | 6 ------ ssh-agent.c | 4 ---- ssh-keygen.c | 4 ---- ssh-keyscan.c | 4 ---- ssh-keysign.c | 4 ---- ssh-rand-helper.c | 6 +----- ssh.c | 4 ---- sshd.c | 4 ---- 14 files changed, 14 insertions(+), 54 deletions(-) (limited to 'openbsd-compat/bsd-misc.c') diff --git a/ChangeLog b/ChangeLog index f6447bb86..a36c1dd22 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +20040717 + - (dtucker) [logintest.c scp.c sftp-server.c sftp.c ssh-add.c ssh-agent.c + ssh-keygen.c ssh-keyscan.c ssh-keysign.c ssh-rand-helper.c ssh.c sshd.c + openbsd-compat/bsd-misc.c] Move "char *__progname" to bsd-misc.c. Reduces + diff vs OpenBSD; ok mouring@, tested by tim@ too. + 20040711 - (dtucker) [auth-pam.c] Check for zero from waitpid() too, which allows the monitor to properly clean up the PAM thread (Debian bug #252676). @@ -1503,4 +1509,4 @@ - (djm) Trim deprecated options from INSTALL. Mention UsePAM - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu -$Id: ChangeLog,v 1.3473 2004/07/11 06:54:08 dtucker Exp $ +$Id: ChangeLog,v 1.3474 2004/07/17 04:07:42 dtucker Exp $ diff --git a/logintest.c b/logintest.c index 3f3997d10..95cce5a3a 100644 --- a/logintest.c +++ b/logintest.c @@ -43,13 +43,9 @@ #include "loginrec.h" -RCSID("$Id: logintest.c,v 1.10 2003/08/21 23:34:41 djm Exp $"); +RCSID("$Id: logintest.c,v 1.11 2004/07/17 04:07:42 dtucker Exp $"); -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif #define PAUSE_BEFORE_LOGOUT 3 diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c index c58cce0f4..07b7c0755 100644 --- a/openbsd-compat/bsd-misc.c +++ b/openbsd-compat/bsd-misc.c @@ -17,7 +17,11 @@ #include "includes.h" #include "xmalloc.h" -RCSID("$Id: bsd-misc.c,v 1.22 2004/06/25 04:03:34 dtucker Exp $"); +RCSID("$Id: bsd-misc.c,v 1.23 2004/07/17 04:07:42 dtucker Exp $"); + +#ifndef HAVE__PROGNAME +char *__progname; +#endif /* * NB. duplicate __progname in case it is an alias for argv[0] diff --git a/scp.c b/scp.c index e559122a1..33c5891f2 100644 --- a/scp.c +++ b/scp.c @@ -80,11 +80,7 @@ RCSID("$OpenBSD: scp.c,v 1.116 2004/07/08 12:47:21 dtucker Exp $"); #include "misc.h" #include "progressmeter.h" -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif void bwlimit(int); diff --git a/sftp-server.c b/sftp-server.c index 1ff4750ea..e82280057 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -31,11 +31,7 @@ RCSID("$OpenBSD: sftp-server.c,v 1.47 2004/06/25 05:38:48 dtucker Exp $"); #define get_string(lenp) buffer_get_string(&iqueue, lenp); #define TRACE debug -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif /* input and output queue */ Buffer iqueue; diff --git a/sftp.c b/sftp.c index 1bc91a16e..4002304ec 100644 --- a/sftp.c +++ b/sftp.c @@ -55,11 +55,7 @@ int sort_flag; int remote_glob(struct sftp_conn *, const char *, int, int (*)(const char *, int), glob_t *); /* proto for sftp-glob.c */ -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif /* Separators for interactive commands */ #define WHITESPACE " \t\r\n" diff --git a/ssh-add.c b/ssh-add.c index 709a36bc1..06a52464e 100644 --- a/ssh-add.c +++ b/ssh-add.c @@ -49,12 +49,6 @@ RCSID("$OpenBSD: ssh-add.c,v 1.70 2004/05/08 00:21:31 djm Exp $"); #include "pathnames.h" #include "misc.h" -#ifdef HAVE___PROGNAME -extern char *__progname; -#else -char *__progname; -#endif - /* argv0 */ extern char *__progname; diff --git a/ssh-agent.c b/ssh-agent.c index ea84f2196..54ab4d7a2 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -106,11 +106,7 @@ char socket_dir[1024]; int locked = 0; char *lock_passwd = NULL; -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif /* Default lifetime (0 == forever) */ static int lifetime = 0; diff --git a/ssh-keygen.c b/ssh-keygen.c index d4d19d3a1..e8e579b5d 100644 --- a/ssh-keygen.c +++ b/ssh-keygen.c @@ -76,11 +76,7 @@ int print_generic = 0; char *key_type_name = NULL; /* argv0 */ -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif char hostname[MAXHOSTNAMELEN]; diff --git a/ssh-keyscan.c b/ssh-keyscan.c index 01615b5c3..fd3185adf 100644 --- a/ssh-keyscan.c +++ b/ssh-keyscan.c @@ -49,11 +49,7 @@ int timeout = 5; int maxfd; #define MAXCON (maxfd - 10) -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif fd_set *read_wait; size_t read_wait_size; int ncon; diff --git a/ssh-keysign.c b/ssh-keysign.c index e642948a0..cf8b0c2d2 100644 --- a/ssh-keysign.c +++ b/ssh-keysign.c @@ -45,11 +45,7 @@ RCSID("$OpenBSD: ssh-keysign.c,v 1.16 2004/04/18 23:10:26 djm Exp $"); /* XXX readconf.c needs these */ uid_t original_real_uid; -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif static int valid_request(struct passwd *pw, char *host, Key **ret, u_char *data, diff --git a/ssh-rand-helper.c b/ssh-rand-helper.c index 471e7295b..86af3893d 100644 --- a/ssh-rand-helper.c +++ b/ssh-rand-helper.c @@ -39,7 +39,7 @@ #include "pathnames.h" #include "log.h" -RCSID("$Id: ssh-rand-helper.c,v 1.17 2004/06/15 00:34:08 djm Exp $"); +RCSID("$Id: ssh-rand-helper.c,v 1.18 2004/07/17 04:07:42 dtucker Exp $"); /* Number of bytes we write out */ #define OUTPUT_SEED_SIZE 48 @@ -63,11 +63,7 @@ RCSID("$Id: ssh-rand-helper.c,v 1.17 2004/06/15 00:34:08 djm Exp $"); # define SSH_PRNG_COMMAND_FILE SSHDIR "/ssh_prng_cmds" #endif -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif #define WHITESPACE " \t\n" diff --git a/ssh.c b/ssh.c index 767d99ca9..f0c284df0 100644 --- a/ssh.c +++ b/ssh.c @@ -76,11 +76,7 @@ RCSID("$OpenBSD: ssh.c,v 1.222 2004/06/23 14:31:01 dtucker Exp $"); #include "scard.h" #endif -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif /* Flag indicating whether debug mode is on. This can be set on the command line. */ int debug_flag = 0; diff --git a/sshd.c b/sshd.c index 101419bed..6df8f252a 100644 --- a/sshd.c +++ b/sshd.c @@ -103,11 +103,7 @@ int deny_severity = LOG_WARNING; #define REEXEC_CONFIG_PASS_FD (STDERR_FILENO + 3) #define REEXEC_MIN_FREE_FD (STDERR_FILENO + 4) -#ifdef HAVE___PROGNAME extern char *__progname; -#else -char *__progname; -#endif /* Server configuration options. */ ServerOptions options; -- cgit v1.2.3 From 03669a363eb8c76f460a75adc11d0eb933e4af49 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Fri, 13 Aug 2004 18:37:21 +1000 Subject: - (dtucker) [openbsd-compat/bsd-misc.c] Typo in #ifdef; from vinschen at redhat.com --- ChangeLog | 6 +++++- openbsd-compat/bsd-misc.c | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'openbsd-compat/bsd-misc.c') diff --git a/ChangeLog b/ChangeLog index 3a661ec69..fe0ff0099 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +20040813 + - (dtucker) [openbsd-compat/bsd-misc.c] Typo in #ifdef; from vinschen at + redhat.com + 20040812 - (dtucker) [sshd.c] Remove duplicate variable imported during sync. - (dtucker) OpenBSD CVS Sync @@ -1594,4 +1598,4 @@ - (djm) Trim deprecated options from INSTALL. Mention UsePAM - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu -$Id: ChangeLog,v 1.3497 2004/08/12 13:08:14 dtucker Exp $ +$Id: ChangeLog,v 1.3498 2004/08/13 08:37:21 dtucker Exp $ diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c index 07b7c0755..3a30b6e4f 100644 --- a/openbsd-compat/bsd-misc.c +++ b/openbsd-compat/bsd-misc.c @@ -17,9 +17,9 @@ #include "includes.h" #include "xmalloc.h" -RCSID("$Id: bsd-misc.c,v 1.23 2004/07/17 04:07:42 dtucker Exp $"); +RCSID("$Id: bsd-misc.c,v 1.24 2004/08/13 08:37:21 dtucker Exp $"); -#ifndef HAVE__PROGNAME +#ifndef HAVE___PROGNAME char *__progname; #endif -- cgit v1.2.3 From 36f496502072d82dbb202b41a199eb6032557710 Mon Sep 17 00:00:00 2001 From: Damien Miller Date: Sun, 15 Aug 2004 18:40:59 +1000 Subject: - (djm) [acconfig.h configure.ac openbsd-compat/Makefile.in openbsd-compat/bsd-closefrom.c openbsd-compat/bsd-misc.c openbsd-compat/bsd-misc.h openbsd-compat/openbsd-compat.h] Use smarter closefrom() replacement from sudo; ok dtucker@ --- ChangeLog | 6 ++- acconfig.h | 5 +- configure.ac | 30 +++++++----- openbsd-compat/Makefile.in | 4 +- openbsd-compat/bsd-closefrom.c | 100 ++++++++++++++++++++++++++++++++++++++++ openbsd-compat/bsd-misc.c | 19 +------- openbsd-compat/bsd-misc.h | 6 +-- openbsd-compat/openbsd-compat.h | 6 ++- 8 files changed, 138 insertions(+), 38 deletions(-) create mode 100644 openbsd-compat/bsd-closefrom.c (limited to 'openbsd-compat/bsd-misc.c') diff --git a/ChangeLog b/ChangeLog index d1936ac1d..841c9e68f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,10 @@ 20040815 - (dtucker) [Makefile.in ssh-keysign.c ssh.c] Use permanently_set_uid() since it does the right thing on all platforms. ok djm@ + - (djm) [acconfig.h configure.ac openbsd-compat/Makefile.in + openbsd-compat/bsd-closefrom.c openbsd-compat/bsd-misc.c + openbsd-compat/bsd-misc.h openbsd-compat/openbsd-compat.h] Use smarter + closefrom() replacement from sudo; ok dtucker@ 20040814 - (dtucker) [auth-krb5.c gss-serv-krb5.c openbsd-compat/xmmap.c] @@ -1635,4 +1639,4 @@ - (djm) Trim deprecated options from INSTALL. Mention UsePAM - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu -$Id: ChangeLog,v 1.3509 2004/08/15 07:23:34 dtucker Exp $ +$Id: ChangeLog,v 1.3510 2004/08/15 08:40:59 djm Exp $ diff --git a/acconfig.h b/acconfig.h index 4c655823f..bb069630d 100644 --- a/acconfig.h +++ b/acconfig.h @@ -1,4 +1,4 @@ -/* $Id: acconfig.h,v 1.178 2004/06/28 06:01:20 dtucker Exp $ */ +/* $Id: acconfig.h,v 1.179 2004/08/15 08:40:59 djm Exp $ */ /* * Copyright (c) 1999-2003 Damien Miller. All rights reserved. @@ -454,6 +454,9 @@ /* Define if your resolver libs need this for getrrsetbyname */ #undef BIND_8_COMPAT +/* Define if you have /proc/$pid/fd */ +#undef HAVE_PROC_PID + @BOTTOM@ /* ******************* Shouldn't need to edit below this line ************** */ diff --git a/configure.ac b/configure.ac index 1579c8dd3..6954fb47e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -# $Id: configure.ac,v 1.224 2004/07/19 17:19:27 tim Exp $ +# $Id: configure.ac,v 1.225 2004/08/15 08:40:59 djm Exp $ # # Copyright (c) 1999-2004 Damien Miller # @@ -517,16 +517,16 @@ int main(){exit(0);} ) # Checks for header files. -AC_CHECK_HEADERS(bstring.h crypt.h endian.h features.h floatingpoint.h \ - getopt.h glob.h ia.h lastlog.h limits.h login.h \ - login_cap.h maillock.h netdb.h netgroup.h \ +AC_CHECK_HEADERS(bstring.h crypt.h dirent.h endian.h features.h \ + floatingpoint.h getopt.h glob.h ia.h lastlog.h limits.h login.h \ + login_cap.h maillock.h ndir.h netdb.h netgroup.h \ netinet/in_systm.h pam/pam_appl.h paths.h pty.h readpassphrase.h \ rpc/types.h security/pam_appl.h shadow.h stddef.h stdint.h \ - strings.h sys/strtio.h sys/audit.h sys/bitypes.h sys/bsdtty.h \ - sys/cdefs.h sys/mman.h sys/prctl.h sys/pstat.h sys/ptms.h \ - sys/select.h sys/stat.h sys/stream.h sys/stropts.h \ - sys/sysmacros.h sys/time.h sys/timers.h sys/un.h time.h tmpdir.h \ - ttyent.h usersec.h util.h utime.h utmp.h utmpx.h vis.h) + strings.h sys/dir.h sys/strtio.h sys/audit.h sys/bitypes.h \ + sys/bsdtty.h sys/cdefs.h sys/mman.h sys/ndir.h sys/prctl.h \ + sys/pstat.h sys/ptms.h sys/select.h sys/stat.h sys/stream.h \ + sys/stropts.h sys/sysmacros.h sys/time.h sys/timers.h sys/un.h \ + time.h tmpdir.h ttyent.h usersec.h util.h utime.h utmp.h utmpx.h vis.h) # Checks for libraries. AC_CHECK_FUNC(yp_match, , AC_CHECK_LIB(nsl, yp_match)) @@ -731,6 +731,14 @@ int main(void){struct dirent d;exit(sizeof(d.d_name)<=sizeof(char));} ] ) +AC_MSG_CHECKING([for /proc/pid/fd directory]) +if test -d "/proc/$$/fd" ; then + AC_DEFINE(HAVE_PROC_PID) + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + # Check whether user wants S/Key support SKEY_MSG="no" AC_ARG_WITH(skey, @@ -833,8 +841,8 @@ AC_ARG_WITH(tcp-wrappers, dnl Checks for library functions. Please keep in alphabetical order AC_CHECK_FUNCS(\ arc4random __b64_ntop b64_ntop __b64_pton b64_pton bcopy \ - bindresvport_sa clock closefrom fchmod fchown freeaddrinfo futimes \ - getaddrinfo getcwd getgrouplist getnameinfo getopt \ + bindresvport_sa clock closefrom dirfd fchmod fchown freeaddrinfo \ + futimes getaddrinfo getcwd getgrouplist getnameinfo getopt \ getpeereid _getpty getrlimit getttyent glob inet_aton \ inet_ntoa inet_ntop innetgr login_getcapbool md5_crypt memmove \ mkdtemp mmap ngetaddrinfo nsleep ogetaddrinfo openlog_r openpty \ diff --git a/openbsd-compat/Makefile.in b/openbsd-compat/Makefile.in index 5de20abbc..0f34f2240 100644 --- a/openbsd-compat/Makefile.in +++ b/openbsd-compat/Makefile.in @@ -1,4 +1,4 @@ -# $Id: Makefile.in,v 1.30 2004/01/21 06:07:23 djm Exp $ +# $Id: Makefile.in,v 1.31 2004/08/15 08:41:00 djm Exp $ sysconfdir=@sysconfdir@ piddir=@piddir@ @@ -18,7 +18,7 @@ LDFLAGS=-L. @LDFLAGS@ OPENBSD=base64.o basename.o bindresvport.o daemon.o dirname.o getcwd.o getgrouplist.o getopt.o getrrsetbyname.o glob.o inet_aton.o inet_ntoa.o inet_ntop.o mktemp.o readpassphrase.o realpath.o rresvport.o setenv.o setproctitle.o sigact.o strlcat.o strlcpy.o strmode.o strsep.o strtoul.o vis.o -COMPAT=bsd-arc4random.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-snprintf.o bsd-waitpid.o fake-rfc2553.o xmmap.o xcrypt.o +COMPAT=bsd-arc4random.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-snprintf.o bsd-waitpid.o fake-rfc2553.o xmmap.o xcrypt.o PORTS=port-irix.o port-aix.o diff --git a/openbsd-compat/bsd-closefrom.c b/openbsd-compat/bsd-closefrom.c new file mode 100644 index 000000000..61a9fa391 --- /dev/null +++ b/openbsd-compat/bsd-closefrom.c @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2004 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "includes.h" + +#ifndef HAVE_CLOSEFROM + +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_DIRENT_H +# include +# define NAMLEN(dirent) strlen((dirent)->d_name) +#else +# define dirent direct +# define NAMLEN(dirent) (dirent)->d_namlen +# ifdef HAVE_SYS_NDIR_H +# include +# endif +# ifdef HAVE_SYS_DIR_H +# include +# endif +# ifdef HAVE_NDIR_H +# include +# endif +#endif + +#ifndef OPEN_MAX +# define OPEN_MAX 256 +#endif + +RCSID("$Id: bsd-closefrom.c,v 1.1 2004/08/15 08:41:00 djm Exp $"); + +#ifndef lint +static const char sudorcsid[] = "$Sudo: closefrom.c,v 1.6 2004/06/01 20:51:56 millert Exp $"; +#endif /* lint */ + +/* + * Close all file descriptors greater than or equal to lowfd. + */ +void +closefrom(int lowfd) +{ + long fd, maxfd; +#if defined(HAVE_DIRFD) && defined(HAVE_PROC_PID) + char fdpath[PATH_MAX], *endp; + struct dirent *dent; + DIR *dirp; + int len; + + /* Check for a /proc/$$/fd directory. */ + len = snprintf(fdpath, sizeof(fdpath), "/proc/%ld/fd", (long)getpid()); + if (len != -1 && len <= sizeof(fdpath) && (dirp = opendir(fdpath))) { + while ((dent = readdir(dirp)) != NULL) { + fd = strtol(dent->d_name, &endp, 10); + if (dent->d_name != endp && *endp == '\0' && + fd >= 0 && fd < INT_MAX && fd >= lowfd && fd != dirfd(dirp)) + (void) close((int) fd); + } + (void) closedir(dirp); + } else +#endif + { + /* + * Fall back on sysconf() or getdtablesize(). We avoid checking + * resource limits since it is possible to open a file descriptor + * and then drop the rlimit such that it is below the open fd. + */ +#ifdef HAVE_SYSCONF + maxfd = sysconf(_SC_OPEN_MAX); +#else + maxfd = getdtablesize(); +#endif /* HAVE_SYSCONF */ + if (maxfd < 0) + maxfd = OPEN_MAX; + + for (fd = lowfd; fd < maxfd; fd++) + (void) close((int) fd); + } +} + +#endif /* HAVE_CLOSEFROM */ + diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c index 3a30b6e4f..1b276b4f4 100644 --- a/openbsd-compat/bsd-misc.c +++ b/openbsd-compat/bsd-misc.c @@ -1,3 +1,4 @@ + /* * Copyright (c) 1999-2004 Damien Miller * @@ -17,7 +18,7 @@ #include "includes.h" #include "xmalloc.h" -RCSID("$Id: bsd-misc.c,v 1.24 2004/08/13 08:37:21 dtucker Exp $"); +RCSID("$Id: bsd-misc.c,v 1.25 2004/08/15 08:41:00 djm Exp $"); #ifndef HAVE___PROGNAME char *__progname; @@ -196,22 +197,6 @@ tcsendbreak(int fd, int duration) } #endif /* HAVE_TCSENDBREAK */ -#ifndef HAVE_CLOSEFROM -int -closefrom(int fd) -{ - int i, result = 0, err = 0; - - for (i = fd; i < 128; i++) - if (close(i) != 0) { - err = errno; - result = -1; - } - errno = err; - return result; -} -#endif /* HAVE_CLOSEFROM */ - mysig_t mysignal(int sig, mysig_t act) { diff --git a/openbsd-compat/bsd-misc.h b/openbsd-compat/bsd-misc.h index 7027815d6..33a1d707f 100644 --- a/openbsd-compat/bsd-misc.h +++ b/openbsd-compat/bsd-misc.h @@ -1,4 +1,4 @@ -/* $Id: bsd-misc.h,v 1.16 2004/06/25 04:03:34 dtucker Exp $ */ +/* $Id: bsd-misc.h,v 1.17 2004/08/15 08:41:00 djm Exp $ */ /* * Copyright (c) 1999-2004 Damien Miller @@ -93,10 +93,6 @@ int tcsendbreak(int, int); void unsetenv(const char *); #endif -#ifndef HAVE_CLOSEFROM -int closefrom(int); -#endif - /* wrapper for signal interface */ typedef void (*mysig_t)(int); mysig_t mysignal(int sig, mysig_t act); diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h index 6be1bcda4..89d1454e0 100644 --- a/openbsd-compat/openbsd-compat.h +++ b/openbsd-compat/openbsd-compat.h @@ -1,4 +1,4 @@ -/* $Id: openbsd-compat.h,v 1.25 2004/01/21 06:07:23 djm Exp $ */ +/* $Id: openbsd-compat.h,v 1.26 2004/08/15 08:41:00 djm Exp $ */ /* * Copyright (c) 1999-2003 Damien Miller. All rights reserved. @@ -48,6 +48,10 @@ char *basename(const char *path); int bindresvport_sa(int sd, struct sockaddr *sa); #endif +#ifndef HAVE_CLOSEFROM +void closefrom(int); +#endif + #ifndef HAVE_GETCWD char *getcwd(char *pt, size_t size); #endif -- cgit v1.2.3