OpenCoverage

bsd-closefrom.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssh/src/openbsd-compat/bsd-closefrom.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright (c) 2004-2005 Todd C. Miller <Todd.Miller@courtesan.com>-
3 *-
4 * Permission to use, copy, modify, and distribute this software for any-
5 * purpose with or without fee is hereby granted, provided that the above-
6 * copyright notice and this permission notice appear in all copies.-
7 *-
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES-
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF-
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR-
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES-
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN-
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF-
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.-
15 */-
16-
17#include "includes.h"-
18-
19#ifndef HAVE_CLOSEFROM-
20-
21#include <sys/types.h>-
22#include <sys/param.h>-
23#include <unistd.h>-
24#include <stdio.h>-
25#ifdef HAVE_FCNTL_H-
26# include <fcntl.h>-
27#endif-
28#include <limits.h>-
29#include <stdlib.h>-
30#include <stddef.h>-
31#include <string.h>-
32#include <unistd.h>-
33#ifdef HAVE_DIRENT_H-
34# include <dirent.h>-
35# define NAMLEN(dirent) strlen((dirent)->d_name)-
36#else-
37# define dirent direct-
38# define NAMLEN(dirent) (dirent)->d_namlen-
39# ifdef HAVE_SYS_NDIR_H-
40# include <sys/ndir.h>-
41# endif-
42# ifdef HAVE_SYS_DIR_H-
43# include <sys/dir.h>-
44# endif-
45# ifdef HAVE_NDIR_H-
46# include <ndir.h>-
47# endif-
48#endif-
49-
50#ifndef OPEN_MAX-
51# define OPEN_MAX 256-
52#endif-
53-
54#if 0-
55__unused static const char rcsid[] = "$Sudo: closefrom.c,v 1.11 2006/08/17 15:26:54 millert Exp $";-
56#endif /* lint */-
57-
58/*-
59 * Close all file descriptors greater than or equal to lowfd.-
60 */-
61#ifdef HAVE_FCNTL_CLOSEM-
62void-
63closefrom(int lowfd)-
64{-
65 (void) fcntl(lowfd, F_CLOSEM, 0);-
66}-
67#else-
68void-
69closefrom(int lowfd)-
70{-
71 long fd, maxfd;-
72#if defined(HAVE_DIRFD) && defined(HAVE_PROC_PID)-
73 char fdpath[PATH_MAX], *endp;-
74 struct dirent *dent;-
75 DIR *dirp;-
76 int len;-
77-
78 /* Check for a /proc/$$/fd directory. */-
79 len = snprintf(fdpath, sizeof(fdpath), "/proc/%ld/fd", (long)getpid());-
80 if (len > 0 && (size_t)len < sizeof(fdpath) && (dirp = opendir(fdpath))) {
len > 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
(size_t)len < sizeof(fdpath)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
(dirp = opendir(fdpath))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
0-2
81 while ((dent = readdir(dirp)) != NULL) {
(dent = readdi...!= ((void *)0)Description
TRUEevaluated 12 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
2-12
82 fd = strtol(dent->d_name, &endp, 10);-
83 if (dent->d_name != endp && *endp == '\0' &&
dent->d_name != endpDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 4 times by 1 test
Evaluated by:
  • sshd
*endp == '\0'Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
0-8
84 fd >= 0 && fd < INT_MAX && fd >= lowfd && fd != dirfd(dirp))
fd >= 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
fd < 0x7fffffffDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • sshd
FALSEnever evaluated
fd >= lowfdDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • sshd
FALSEevaluated 6 times by 1 test
Evaluated by:
  • sshd
fd != dirfd(dirp)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • sshd
0-8
85 (void) close((int) fd);
never executed: (void) close((int) fd);
0
86 }
executed 12 times by 1 test: end of block
Executed by:
  • sshd
12
87 (void) closedir(dirp);-
88 } else
executed 2 times by 1 test: end of block
Executed by:
  • sshd
2
89#endif-
90 {-
91 /*-
92 * Fall back on sysconf() or getdtablesize(). We avoid checking-
93 * resource limits since it is possible to open a file descriptor-
94 * and then drop the rlimit such that it is below the open fd.-
95 */-
96#ifdef HAVE_SYSCONF-
97 maxfd = sysconf(_SC_OPEN_MAX);-
98#else-
99 maxfd = getdtablesize();-
100#endif /* HAVE_SYSCONF */-
101 if (maxfd < 0)
maxfd < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
102 maxfd = OPEN_MAX;
never executed: maxfd = 256;
0
103-
104 for (fd = lowfd; fd < maxfd; fd++)
fd < maxfdDescription
TRUEnever evaluated
FALSEnever evaluated
0
105 (void) close((int) fd);
never executed: (void) close((int) fd);
0
106 }
never executed: end of block
0
107}-
108#endif /* !HAVE_FCNTL_CLOSEM */-
109#endif /* HAVE_CLOSEFROM */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2