make busybox --install work even if /proc/self/exe doesn't exist
# size busybox_old busybox_unstripped text data bss dec hex filename 680095 2704 15648 698447 aa84f busybox_old 680099 2704 15648 698451 aa853 busybox_unstripped
This commit is contained in:
parent
c14d39e83a
commit
bdbbb7ec49
@ -577,21 +577,13 @@ static int busybox_main(char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ENABLE_FEATURE_INSTALLER && strcmp(argv[1], "--install") == 0) {
|
if (ENABLE_FEATURE_INSTALLER && strcmp(argv[1], "--install") == 0) {
|
||||||
int use_symbolic_links = 0;
|
const char *busybox;
|
||||||
char *busybox;
|
busybox = xmalloc_readlink_or_warn(bb_busybox_exec_path);
|
||||||
|
|
||||||
/* to use symlinks, or not to use symlinks... */
|
|
||||||
if (argv[2])
|
|
||||||
if (strcmp(argv[2], "-s") == 0)
|
|
||||||
use_symbolic_links = 1;
|
|
||||||
|
|
||||||
/* link */
|
|
||||||
busybox = xmalloc_readlink_or_warn("/proc/self/exe");
|
|
||||||
if (!busybox)
|
if (!busybox)
|
||||||
return 1;
|
busybox = bb_busybox_exec_path;
|
||||||
install_links(busybox, use_symbolic_links);
|
/* -s makes symlinks */
|
||||||
if (ENABLE_FEATURE_CLEAN_UP)
|
install_links(busybox,
|
||||||
free(busybox);
|
argv[2] && strcmp(argv[2], "-s") == 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -952,6 +952,7 @@ extern const char bb_path_securetty_file[];
|
|||||||
extern const char bb_path_motd_file[];
|
extern const char bb_path_motd_file[];
|
||||||
extern const char bb_path_wtmp_file[];
|
extern const char bb_path_wtmp_file[];
|
||||||
extern const char bb_dev_null[];
|
extern const char bb_dev_null[];
|
||||||
|
extern const char bb_busybox_exec_path[];
|
||||||
|
|
||||||
extern const int const_int_0;
|
extern const int const_int_0;
|
||||||
extern const int const_int_1;
|
extern const int const_int_1;
|
||||||
|
@ -65,7 +65,7 @@ int exists_execable(const char *filename)
|
|||||||
*/
|
*/
|
||||||
int bb_execvp(const char *file, char *const argv[])
|
int bb_execvp(const char *file, char *const argv[])
|
||||||
{
|
{
|
||||||
return execvp(find_applet_by_name(file) ? CONFIG_BUSYBOX_EXEC_PATH : file,
|
return execvp(find_applet_by_name(file) ? bb_busybox_exec_path : file,
|
||||||
argv);
|
argv);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -37,8 +37,9 @@ const char bb_path_gshadow_file[] = "/etc/gshadow";
|
|||||||
const char bb_path_nologin_file[] = "/etc/nologin";
|
const char bb_path_nologin_file[] = "/etc/nologin";
|
||||||
const char bb_path_securetty_file[] = "/etc/securetty";
|
const char bb_path_securetty_file[] = "/etc/securetty";
|
||||||
const char bb_path_motd_file[] = "/etc/motd";
|
const char bb_path_motd_file[] = "/etc/motd";
|
||||||
const char bb_default_login_shell[] = LIBBB_DEFAULT_LOGIN_SHELL;
|
|
||||||
const char bb_dev_null[] = "/dev/null";
|
const char bb_dev_null[] = "/dev/null";
|
||||||
|
const char bb_busybox_exec_path[] = CONFIG_BUSYBOX_EXEC_PATH;
|
||||||
|
const char bb_default_login_shell[] = LIBBB_DEFAULT_LOGIN_SHELL;
|
||||||
|
|
||||||
const int const_int_0;
|
const int const_int_0;
|
||||||
const int const_int_1 = 1;
|
const int const_int_1 = 1;
|
||||||
|
@ -220,8 +220,8 @@ void forkexit_or_rexec(char **argv)
|
|||||||
/* high-order bit of first char in argv[0] is a hidden
|
/* high-order bit of first char in argv[0] is a hidden
|
||||||
* "we have (alrealy) re-execed, don't do it again" flag */
|
* "we have (alrealy) re-execed, don't do it again" flag */
|
||||||
argv[0][0] |= 0x80;
|
argv[0][0] |= 0x80;
|
||||||
execv(CONFIG_BUSYBOX_EXEC_PATH, argv);
|
execv(bb_busybox_exec_path, argv);
|
||||||
bb_perror_msg_and_die("exec %s", CONFIG_BUSYBOX_EXEC_PATH);
|
bb_perror_msg_and_die("exec %s", bb_busybox_exec_path);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
/* Dance around (void)...*/
|
/* Dance around (void)...*/
|
||||||
|
@ -6471,7 +6471,7 @@ tryexec(char *cmd, char **argv, char **envp)
|
|||||||
run_current_applet_and_exit(argv);
|
run_current_applet_and_exit(argv);
|
||||||
}
|
}
|
||||||
/* re-exec ourselves with the new arguments */
|
/* re-exec ourselves with the new arguments */
|
||||||
execve(CONFIG_BUSYBOX_EXEC_PATH, argv, envp);
|
execve(bb_busybox_exec_path, argv, envp);
|
||||||
/* If they called chroot or otherwise made the binary no longer
|
/* If they called chroot or otherwise made the binary no longer
|
||||||
* executable, fall through */
|
* executable, fall through */
|
||||||
}
|
}
|
||||||
|
@ -1392,7 +1392,7 @@ static void pseudo_exec_argv(char **argv)
|
|||||||
}
|
}
|
||||||
/* re-exec ourselves with the new arguments */
|
/* re-exec ourselves with the new arguments */
|
||||||
debug_printf_exec("re-execing applet '%s'\n", argv[0]);
|
debug_printf_exec("re-execing applet '%s'\n", argv[0]);
|
||||||
execvp(CONFIG_BUSYBOX_EXEC_PATH, argv);
|
execvp(bb_busybox_exec_path, argv);
|
||||||
/* If they called chroot or otherwise made the binary no longer
|
/* If they called chroot or otherwise made the binary no longer
|
||||||
* executable, fall through */
|
* executable, fall through */
|
||||||
}
|
}
|
||||||
|
@ -3062,7 +3062,7 @@ static const char *rexecve(char *c, char **v, char **envp)
|
|||||||
/* We have to exec here since we vforked. Running
|
/* We have to exec here since we vforked. Running
|
||||||
* run_applet_and_exit() won't work and bad things
|
* run_applet_and_exit() won't work and bad things
|
||||||
* will happen. */
|
* will happen. */
|
||||||
execve(CONFIG_BUSYBOX_EXEC_PATH, v, envp);
|
execve(bb_busybox_exec_path, v, envp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user