summaryrefslogtreecommitdiffstats
path: root/lib/utils_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/utils_cmd.c')
-rw-r--r--lib/utils_cmd.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/utils_cmd.c b/lib/utils_cmd.c
index 34fb3909..71da9d24 100644
--- a/lib/utils_cmd.c
+++ b/lib/utils_cmd.c
@@ -43,6 +43,9 @@
43#include "utils.h" 43#include "utils.h"
44#include "utils_cmd.h" 44#include "utils_cmd.h"
45#include "utils_base.h" 45#include "utils_base.h"
46
47#include "./maxfd.h"
48
46#include <fcntl.h> 49#include <fcntl.h>
47 50
48#ifdef HAVE_SYS_WAIT_H 51#ifdef HAVE_SYS_WAIT_H
@@ -86,13 +89,7 @@ extern void die (int, const char *, ...)
86void 89void
87cmd_init (void) 90cmd_init (void)
88{ 91{
89#ifndef maxfd 92 long maxfd = open_max();
90 if (!maxfd && (maxfd = sysconf (_SC_OPEN_MAX)) < 0) {
91 /* possibly log or emit a warning here, since there's no
92 * guarantee that our guess at maxfd will be adequate */
93 maxfd = DEFAULT_MAXFD;
94 }
95#endif
96 93
97 /* if maxfd is unnaturally high, we force it to a lower value 94 /* if maxfd is unnaturally high, we force it to a lower value
98 * ( e.g. on SunOS, when ulimit is set to unlimited: 2147483647 this would cause 95 * ( e.g. on SunOS, when ulimit is set to unlimited: 2147483647 this would cause
@@ -148,6 +145,7 @@ _cmd_open (char *const *argv, int *pfd, int *pfderr)
148 /* close all descriptors in _cmd_pids[] 145 /* close all descriptors in _cmd_pids[]
149 * This is executed in a separate address space (pure child), 146 * This is executed in a separate address space (pure child),
150 * so we don't have to worry about async safety */ 147 * so we don't have to worry about async safety */
148 long maxfd = open_max();
151 for (i = 0; i < maxfd; i++) 149 for (i = 0; i < maxfd; i++)
152 if (_cmd_pids[i] > 0) 150 if (_cmd_pids[i] > 0)
153 close (i); 151 close (i);
@@ -174,6 +172,7 @@ _cmd_close (int fd)
174 pid_t pid; 172 pid_t pid;
175 173
176 /* make sure the provided fd was opened */ 174 /* make sure the provided fd was opened */
175 long maxfd = open_max();
177 if (fd < 0 || fd > maxfd || !_cmd_pids || (pid = _cmd_pids[fd]) == 0) 176 if (fd < 0 || fd > maxfd || !_cmd_pids || (pid = _cmd_pids[fd]) == 0)
178 return -1; 177 return -1;
179 178
@@ -265,7 +264,6 @@ _cmd_fetch_output (int fd, output * op, int flags)
265int 264int
266cmd_run (const char *cmdstring, output * out, output * err, int flags) 265cmd_run (const char *cmdstring, output * out, output * err, int flags)
267{ 266{
268 int fd, pfd_out[2], pfd_err[2];
269 int i = 0, argc; 267 int i = 0, argc;
270 size_t cmdlen; 268 size_t cmdlen;
271 char **argv = NULL; 269 char **argv = NULL;
@@ -387,6 +385,7 @@ timeout_alarm_handler (int signo)
387 printf (_("%s - Plugin timed out after %d seconds\n"), 385 printf (_("%s - Plugin timed out after %d seconds\n"),
388 state_text(timeout_state), timeout_interval); 386 state_text(timeout_state), timeout_interval);
389 387
388 long maxfd = open_max();
390 if(_cmd_pids) for(i = 0; i < maxfd; i++) { 389 if(_cmd_pids) for(i = 0; i < maxfd; i++) {
391 if(_cmd_pids[i] != 0) kill(_cmd_pids[i], SIGKILL); 390 if(_cmd_pids[i] != 0) kill(_cmd_pids[i], SIGKILL);
392 } 391 }