diff options
| author | Eric Andersen <andersen@codepoet.org> | 2001-03-16 01:14:04 +0000 |
|---|---|---|
| committer | Eric Andersen <andersen@codepoet.org> | 2001-03-16 01:14:04 +0000 |
| commit | 7f1978570fb8f27c05d7b0cf2a964ded5db41ee7 (patch) | |
| tree | 7995a486b9aacb1afd7cc86004c5cd1f94881955 /init | |
| parent | 4aaefc2a50600f2b2247ec2d607c19896e9cc0df (diff) | |
| download | busybox-w32-7f1978570fb8f27c05d7b0cf2a964ded5db41ee7.tar.gz busybox-w32-7f1978570fb8f27c05d7b0cf2a964ded5db41ee7.tar.bz2 busybox-w32-7f1978570fb8f27c05d7b0cf2a964ded5db41ee7.zip | |
A patch from Andreas Neuhaus to be especially careful to not dup
any env variables when spawning child processes.
Diffstat (limited to 'init')
| -rw-r--r-- | init/init.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/init/init.c b/init/init.c index 64c7768d6..145452ff3 100644 --- a/init/init.c +++ b/init/init.c | |||
| @@ -396,11 +396,11 @@ static void console_init() | |||
| 396 | 396 | ||
| 397 | static pid_t run(char *command, char *terminal, int get_enter) | 397 | static pid_t run(char *command, char *terminal, int get_enter) |
| 398 | { | 398 | { |
| 399 | int i=0, j=0; | 399 | int i, j; |
| 400 | int fd; | 400 | int fd; |
| 401 | pid_t pid; | 401 | pid_t pid; |
| 402 | char *tmpCmd; | 402 | char *tmpCmd, *s; |
| 403 | char *cmd[255], *cmdpath; | 403 | char *cmd[255], *cmdpath; |
| 404 | char buf[255]; | 404 | char buf[255]; |
| 405 | static const char press_enter[] = | 405 | static const char press_enter[] = |
| 406 | 406 | ||
| @@ -410,18 +410,25 @@ static pid_t run(char *command, char *terminal, int get_enter) | |||
| 410 | 410 | ||
| 411 | "\nPlease press Enter to activate this console. "; | 411 | "\nPlease press Enter to activate this console. "; |
| 412 | char *environment[MAXENV+1] = { | 412 | char *environment[MAXENV+1] = { |
| 413 | termType, | ||
| 413 | "HOME=/", | 414 | "HOME=/", |
| 414 | "PATH=/usr/bin:/bin:/usr/sbin:/sbin", | 415 | "PATH=/usr/bin:/bin:/usr/sbin:/sbin", |
| 415 | "SHELL=/bin/sh", | 416 | "SHELL=/bin/sh", |
| 416 | termType, | 417 | "USER=root", |
| 417 | "USER=root" | 418 | NULL |
| 418 | }; | 419 | }; |
| 419 | 420 | ||
| 420 | while (environment[i]) i++; | 421 | /* inherit environment to the child, merging our values -andy */ |
| 421 | while ((environ[j]) && (i < MAXENV)) { | 422 | for (i=0; environ[i]; i++) { |
| 422 | if (strncmp(environ[j], "TERM=", 5)) | 423 | for (j=0; environment[j]; j++) { |
| 423 | environment[i++] = environ[j]; | 424 | s = strchr(environment[j], '='); |
| 424 | j++; | 425 | if (!strncmp(environ[i], environment[j], s - environment[j])) |
| 426 | break; | ||
| 427 | } | ||
| 428 | if (!environment[j]) { | ||
| 429 | environment[j++] = environ[i]; | ||
| 430 | environment[j] = NULL; | ||
| 431 | } | ||
| 425 | } | 432 | } |
| 426 | 433 | ||
| 427 | if ((pid = fork()) == 0) { | 434 | if ((pid = fork()) == 0) { |
