diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-03 02:17:41 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-02-03 02:17:41 +0000 |
| commit | 4921b54f37125a58d5ea1a8aac886ae781517bc1 (patch) | |
| tree | d8a989b6b3c29db835d3ec3084b908b6199d91dc /init | |
| parent | 0aa84906936bd99ea8627a24b8ad2fdeedc7e928 (diff) | |
| download | busybox-w32-4921b54f37125a58d5ea1a8aac886ae781517bc1.tar.gz busybox-w32-4921b54f37125a58d5ea1a8aac886ae781517bc1.tar.bz2 busybox-w32-4921b54f37125a58d5ea1a8aac886ae781517bc1.zip | |
Add BB_EXEC[LV]P() which encapsulate FEATURE_EXEC_PREFER_APPLETS
(patch from Gabriel L. Somlo <somlo@cmu.edu>)
Diffstat (limited to 'init')
| -rw-r--r-- | init/init.c | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/init/init.c b/init/init.c index cb314003e..110af8566 100644 --- a/init/init.c +++ b/init/init.c | |||
| @@ -389,7 +389,6 @@ static pid_t run(const struct init_action *a) | |||
| 389 | #include CUSTOMIZED_BANNER | 389 | #include CUSTOMIZED_BANNER |
| 390 | #endif | 390 | #endif |
| 391 | "\nPlease press Enter to activate this console. "; | 391 | "\nPlease press Enter to activate this console. "; |
| 392 | const char *prog; | ||
| 393 | 392 | ||
| 394 | /* Block sigchild while forking. */ | 393 | /* Block sigchild while forking. */ |
| 395 | sigemptyset(&nmask); | 394 | sigemptyset(&nmask); |
| @@ -561,10 +560,7 @@ static pid_t run(const struct init_action *a) | |||
| 561 | 560 | ||
| 562 | /* Now run it. The new program will take over this PID, | 561 | /* Now run it. The new program will take over this PID, |
| 563 | * so nothing further in init.c should be run. */ | 562 | * so nothing further in init.c should be run. */ |
| 564 | prog = cmdpath; | 563 | BB_EXECVP(cmdpath, cmd); |
| 565 | if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && find_applet_by_name(prog)) | ||
| 566 | prog = CONFIG_BUSYBOX_EXEC_PATH; | ||
| 567 | execvp(prog, cmd); | ||
| 568 | 564 | ||
| 569 | /* We're still here? Some error happened. */ | 565 | /* We're still here? Some error happened. */ |
| 570 | message(LOG | CONSOLE, "Bummer, cannot run '%s': %m", cmdpath); | 566 | message(LOG | CONSOLE, "Bummer, cannot run '%s': %m", cmdpath); |
| @@ -682,7 +678,6 @@ static void exec_signal(int sig ATTRIBUTE_UNUSED) | |||
| 682 | { | 678 | { |
| 683 | struct init_action *a, *tmp; | 679 | struct init_action *a, *tmp; |
| 684 | sigset_t unblock_signals; | 680 | sigset_t unblock_signals; |
| 685 | char *prog; | ||
| 686 | 681 | ||
| 687 | for (a = init_action_list; a; a = tmp) { | 682 | for (a = init_action_list; a; a = tmp) { |
| 688 | tmp = a->next; | 683 | tmp = a->next; |
| @@ -718,10 +713,7 @@ static void exec_signal(int sig ATTRIBUTE_UNUSED) | |||
| 718 | dup(0); | 713 | dup(0); |
| 719 | 714 | ||
| 720 | messageD(CONSOLE | LOG, "Trying to re-exec %s", a->command); | 715 | messageD(CONSOLE | LOG, "Trying to re-exec %s", a->command); |
| 721 | prog = a->command; | 716 | BB_EXECLP(a->command, a->command, NULL); |
| 722 | if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && find_applet_by_name(prog)) | ||
| 723 | prog = CONFIG_BUSYBOX_EXEC_PATH; | ||
| 724 | execlp(prog, a->command, NULL); | ||
| 725 | 717 | ||
| 726 | message(CONSOLE | LOG, "exec of '%s' failed: %m", | 718 | message(CONSOLE | LOG, "exec of '%s' failed: %m", |
| 727 | a->command); | 719 | a->command); |
| @@ -1076,10 +1068,7 @@ int init_main(int argc, char **argv) | |||
| 1076 | 1068 | ||
| 1077 | putenv("SELINUX_INIT=YES"); | 1069 | putenv("SELINUX_INIT=YES"); |
| 1078 | if (selinux_init_load_policy(&enforce) == 0) { | 1070 | if (selinux_init_load_policy(&enforce) == 0) { |
| 1079 | char *prog = argv[0]; | 1071 | BB_EXECVP(argv[0], argv); |
| 1080 | if (ENABLE_FEATURE_EXEC_PREFER_APPLETS && find_applet_by_name(prog)) | ||
| 1081 | prog = CONFIG_BUSYBOX_EXEC_PATH; | ||
| 1082 | execvp(prog, argv); | ||
| 1083 | } else if (enforce > 0) { | 1072 | } else if (enforce > 0) { |
| 1084 | /* SELinux in enforcing mode but load_policy failed */ | 1073 | /* SELinux in enforcing mode but load_policy failed */ |
| 1085 | /* At this point, we probably can't open /dev/console, so log() won't work */ | 1074 | /* At this point, we probably can't open /dev/console, so log() won't work */ |
