summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorThomas Guyot-Sionnest <dermoth@aei.ca>2010-07-02 16:55:19 (GMT)
committerThomas Guyot-Sionnest <dermoth@aei.ca>2010-07-02 16:55:19 (GMT)
commitcf2bcf6c7afa8eb7a54e01f98a9998a7e1ac0852 (patch)
tree3739ed79238c65567ad1001a4f80856af652f660 /lib
parent6b6051606175d870bb45bbe67866c1643d4d964a (diff)
downloadmonitoring-plugins-cf2bcf6c7afa8eb7a54e01f98a9998a7e1ac0852.tar.gz
Fix cmd_run overwriting the environment
Some commands need the environment to function properly. One such example is check_ssh and check_by_ssh when a SOCKS proxy is required. This patch use setenv and extern char **environ to alter and pass the new environment to the child process Those modules have been added to Gnulib for portability.
Diffstat (limited to 'lib')
-rw-r--r--lib/utils_cmd.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/utils_cmd.c b/lib/utils_cmd.c
index e10ab91..0c853dc 100644
--- a/lib/utils_cmd.c
+++ b/lib/utils_cmd.c
@@ -48,6 +48,9 @@
48# include <sys/wait.h> 48# include <sys/wait.h>
49#endif 49#endif
50 50
51/* used in _cmd_open to pass the environment to commands */
52extern char **environ;
53
51/** macros **/ 54/** macros **/
52#ifndef WEXITSTATUS 55#ifndef WEXITSTATUS
53# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) 56# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
@@ -122,7 +125,6 @@ cmd_init (void)
122static int 125static int
123_cmd_open (char *const *argv, int *pfd, int *pfderr) 126_cmd_open (char *const *argv, int *pfd, int *pfderr)
124{ 127{
125 char *env[2];
126 pid_t pid; 128 pid_t pid;
127#ifdef RLIMIT_CORE 129#ifdef RLIMIT_CORE
128 struct rlimit limit; 130 struct rlimit limit;
@@ -137,8 +139,7 @@ _cmd_open (char *const *argv, int *pfd, int *pfderr)
137 if (!_cmd_pids) 139 if (!_cmd_pids)
138 CMD_INIT; 140 CMD_INIT;
139 141
140 env[0] = strdup ("LC_ALL=C"); 142 setenv("LC_ALL", "C", 1);
141 env[1] = '\0';
142 143
143 if (pipe (pfd) < 0 || pipe (pfderr) < 0 || (pid = fork ()) < 0) 144 if (pipe (pfd) < 0 || pipe (pfderr) < 0 || (pid = fork ()) < 0)
144 return -1; /* errno set by the failing function */ 145 return -1; /* errno set by the failing function */
@@ -169,7 +170,7 @@ _cmd_open (char *const *argv, int *pfd, int *pfderr)
169 if (_cmd_pids[i] > 0) 170 if (_cmd_pids[i] > 0)
170 close (i); 171 close (i);
171 172
172 execve (argv[0], argv, env); 173 execve (argv[0], argv, environ);
173 _exit (STATE_UNKNOWN); 174 _exit (STATE_UNKNOWN);
174 } 175 }
175 176