This one's from me. Fix ash "standalone shell".

If we exec /proc/self/exe and only fall back to /bin/busybox if /proc isn't
there, then we have a reasonable chance of having the standalone shell work
even if busybox isn't installed in /bin on the system in question.

Still won't work in a chroot environment, but it's an improvement.
This commit is contained in:
Rob Landley 2005-05-07 08:27:34 +00:00
parent cce1ae2ce5
commit 0fcd9430ce

View File

@ -3722,27 +3722,13 @@ tryexec(char *cmd, char **argv, char **envp)
{
int repeated = 0;
#ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL
int flg_bb = 0;
char *name = cmd;
if(strchr(name, '/') == NULL && find_applet_by_name(name) != NULL) {
flg_bb = 1;
}
if(flg_bb) {
char **ap;
char **new;
*argv = name;
if(strcmp(name, "busybox")) {
for (ap = argv; *ap; ap++);
ap = new = xmalloc((ap - argv + 2) * sizeof(char *));
*ap++ = cmd = "/bin/busybox";
while ((*ap++ = *argv++));
argv = new;
repeated++;
} else {
cmd = "/bin/busybox";
}
if(find_applet_by_name(cmd) != NULL) {
/* re-exec ourselves with the new arguments */
execve("/proc/self/exe",argv,envp);
/* If proc isn't mounted, try hardcoded path to busybox binary*/
execve("/bin/busybox",argv,envp);
/* If they called chroot or otherwise made the binary no longer
* executable, fall through */
}
#endif