if only one applet is enabled, make "busybox applet [params]" work as expected
No binary (build failed)
—
(log yok)
| @@ -227,7 +227,7 @@ bool re_execed; | |
| IF_FEATURE_SUID(static uid_t ruid;) /* real uid */ | |
| - | #if ENABLE_FEATURE_SUID_CONFIG |
| + | # if ENABLE_FEATURE_SUID_CONFIG |
| /* applets[] is const, so we have to define this "override" structure */ | |
| static struct BB_suid_config { | |
| @@ -498,15 +498,15 @@ static void parse_config_file(void) | |
| sct_head = sct; | |
| } | |
| } | |
| - | #else |
| + | # else |
| static inline void parse_config_file(void) | |
| { | |
| IF_FEATURE_SUID(ruid = getuid();) | |
| } | |
| - | #endif /* FEATURE_SUID_CONFIG */ |
| + | # endif /* FEATURE_SUID_CONFIG */ |
| - | #if ENABLE_FEATURE_SUID |
| + | # if ENABLE_FEATURE_SUID |
| static void check_suid(int applet_no) | |
| { | |
| gid_t rgid; /* real gid */ | |
| @@ -515,7 +515,7 @@ static void check_suid(int applet_no) | |
| return; /* run by root - no need to check more */ | |
| rgid = getgid(); | |
| - | #if ENABLE_FEATURE_SUID_CONFIG |
| + | # if ENABLE_FEATURE_SUID_CONFIG |
| if (suid_cfg_readable) { | |
| uid_t uid; | |
| struct BB_suid_config *sct; | |
| @@ -558,7 +558,7 @@ static void check_suid(int applet_no) | |
| bb_perror_msg_and_die("setresuid"); | |
| return; | |
| } | |
| - | #if !ENABLE_FEATURE_SUID_CONFIG_QUIET |
| + | # if !ENABLE_FEATURE_SUID_CONFIG_QUIET |
| { | |
| static bool onetime = 0; | |
| @@ -567,9 +567,9 @@ static void check_suid(int applet_no) | |
| fprintf(stderr, "Using fallback suid method\n"); | |
| } | |
| } | |
| - | #endif |
| + | # endif |
| check_need_suid: | |
| - | #endif |
| + | # endif |
| if (APPLET_SUID(applet_no) == _BB_SUID_REQUIRE) { | |
| /* Real uid is not 0. If euid isn't 0 too, suid bit | |
| * is most probably not set on our executable */ | |
| @@ -580,25 +580,24 @@ static void check_suid(int applet_no) | |
| xsetuid(ruid); | |
| } | |
| } | |
| - | #else |
| - | #define check_suid(x) ((void)0) |
| - | #endif /* FEATURE_SUID */ |
| + | # else |
| + | # define check_suid(x) ((void)0) |
| + | # endif /* FEATURE_SUID */ |
| - | #if ENABLE_FEATURE_INSTALLER |
| + | # if ENABLE_FEATURE_INSTALLER |
| static const char usr_bin [] ALIGN1 = "/usr/bin/"; | |
| static const char usr_sbin[] ALIGN1 = "/usr/sbin/"; | |
| static const char *const install_dir[] = { | |
| &usr_bin [8], /* "/" */ | |
| &usr_bin [4], /* "/bin/" */ | |
| &usr_sbin[4] /* "/sbin/" */ | |
| - | # if !ENABLE_INSTALL_NO_USR |
| + | # if !ENABLE_INSTALL_NO_USR |
| ,usr_bin | |
| ,usr_sbin | |
| - | # endif |
| + | # endif |
| }; | |
| - | |
| /* create (sym)links for each applet */ | |
| static void install_links(const char *busybox, int use_symbolic_links, | |
| char *custom_install_dir) | |
| @@ -628,9 +627,9 @@ static void install_links(const char *busybox, int use_symbolic_links, | |
| free(fpc); | |
| } | |
| } | |
| - | #else |
| - | # define install_links(x,y,z) ((void)0) |
| - | #endif |
| + | # else |
| + | # define install_links(x,y,z) ((void)0) |
| + | # endif |
| /* If we were called as "busybox..." */ | |
| static int busybox_main(char **argv) | |
| @@ -695,10 +694,10 @@ static int busybox_main(char **argv) | |
| const char *a = applet_names; | |
| dup2(1, 2); | |
| while (*a) { | |
| - | #if ENABLE_FEATURE_INSTALLER |
| + | # if ENABLE_FEATURE_INSTALLER |
| if (argv[1][6]) /* --list-path? */ | |
| full_write2_str(install_dir[APPLET_INSTALL_LOC(i)] + 1); | |
| - | #endif |
| + | # endif |
| full_write2_str(a); | |
| full_write2_str("\n"); | |
| i++; | |
| @@ -771,7 +770,7 @@ void FAST_FUNC run_applet_and_exit(const char *name, char **argv) | |
| int applet = find_applet_by_name(name); | |
| if (applet >= 0) | |
| run_applet_no_and_exit(applet, argv); | |
| - | if (!strncmp(name, "busybox", 7)) |
| + | if (strncmp(name, "busybox", 7) == 0) |
| exit(busybox_main(argv)); | |
| } | |
| @@ -803,14 +802,6 @@ int main(int argc UNUSED_PARAM, char **argv) | |
| mallopt(M_MMAP_THRESHOLD, 8 * PAGE_SIZE - 256); | |
| #endif | |
| - | #if defined(SINGLE_APPLET_MAIN) |
| - | /* Only one applet is selected by the user! */ |
| - | /* applet_names in this case is just "applet\0\0" */ |
| - | lbb_prepare(applet_names IF_FEATURE_INDIVIDUAL(, argv)); |
| - | return SINGLE_APPLET_MAIN(argc, argv); |
| - | #else |
| - | lbb_prepare("busybox" IF_FEATURE_INDIVIDUAL(, argv)); |
| - | |
| #if !BB_MMU | |
| /* NOMMU re-exec trick sets high-order bit in first byte of name */ | |
| if (argv[0][0] & 0x80) { | |
| @@ -818,6 +809,19 @@ int main(int argc UNUSED_PARAM, char **argv) | |
| argv[0][0] &= 0x7f; | |
| } | |
| #endif | |
| + | |
| + | #if defined(SINGLE_APPLET_MAIN) |
| + | /* Only one applet is selected in .config */ |
| + | if (strncmp(argv[0], "busybox", 7) == 0) { |
| + | /* "busybox <applet> <params>" should still work as expected */ |
| + | argv++; |
| + | } |
| + | /* applet_names in this case is just "applet\0\0" */ |
| + | lbb_prepare(applet_names IF_FEATURE_INDIVIDUAL(, argv)); |
| + | return SINGLE_APPLET_MAIN(argc, argv); |
| + | #else |
| + | lbb_prepare("busybox" IF_FEATURE_INDIVIDUAL(, argv)); |
| + | |
| applet_name = argv[0]; | |
| if (applet_name[0] == '-') | |
| applet_name++; | |