In a NixOS-like system, it doesn't make sense to hardcode these absolute paths. They even already use execvp! diff --git a/usr.sbin/jail/command.c b/usr.sbin/jail/command.c index 9004b4729fec..669e85ed847e 100644 --- a/usr.sbin/jail/command.c +++ b/usr.sbin/jail/command.c @@ -363,7 +363,7 @@ run_command(struct cfjail *j) } argv = alloca((8 + argc) * sizeof(char *)); - argv[0] = _PATH_IFCONFIG; + argv[0] = "ifconfig"; if ((cs = strchr(val, '|'))) { argv[1] = acs = alloca(cs - val + 1); strlcpy(acs, val, cs - val + 1); @@ -420,7 +420,7 @@ run_command(struct cfjail *j) } argv = alloca((8 + argc) * sizeof(char *)); - argv[0] = _PATH_IFCONFIG; + argv[0] = "ifconfig"; if ((cs = strchr(val, '|'))) { argv[1] = acs = alloca(cs - val + 1); strlcpy(acs, val, cs - val + 1); @@ -454,7 +454,7 @@ run_command(struct cfjail *j) case IP_VNET_INTERFACE: argv = alloca(5 * sizeof(char *)); - argv[0] = _PATH_IFCONFIG; + argv[0] = "ifconfig"; argv[1] = comstring->s; argv[2] = down ? "-vnet" : "vnet"; jidstr = string_param(j->intparams[KP_JID]); @@ -490,7 +490,7 @@ run_command(struct cfjail *j) if (down) { argv[4] = NULL; argv[3] = argv[1]; - argv[0] = "/sbin/umount"; + argv[0] = "umount"; } else { if (argc == 4) { argv[7] = NULL; @@ -503,7 +503,7 @@ run_command(struct cfjail *j) argv[4] = argv[1]; argv[3] = argv[0]; } - argv[0] = _PATH_MOUNT; + argv[0] = "mount"; } argv[1] = "-t"; break; @@ -521,11 +521,11 @@ run_command(struct cfjail *j) down ? "devfs" : NULL) < 0) return -1; if (down) { - argv[0] = "/sbin/umount"; + argv[0] = "umount"; argv[1] = devpath; argv[2] = NULL; } else { - argv[0] = _PATH_MOUNT; + argv[0] = "mount"; argv[1] = "-t"; argv[2] = "devfs"; ruleset = string_param(j->intparams[KP_DEVFS_RULESET]); @@ -552,11 +552,11 @@ run_command(struct cfjail *j) down ? "fdescfs" : NULL) < 0) return -1; if (down) { - argv[0] = "/sbin/umount"; + argv[0] = "umount"; argv[1] = devpath; argv[2] = NULL; } else { - argv[0] = _PATH_MOUNT; + argv[0] = "mount"; argv[1] = "-t"; argv[2] = "fdescfs"; argv[3] = "."; @@ -578,11 +578,11 @@ run_command(struct cfjail *j) down ? "procfs" : NULL) < 0) return -1; if (down) { - argv[0] = "/sbin/umount"; + argv[0] = "umount"; argv[1] = devpath; argv[2] = NULL; } else { - argv[0] = _PATH_MOUNT; + argv[0] = "mount"; argv[1] = "-t"; argv[2] = "procfs"; argv[3] = "."; @@ -610,7 +610,7 @@ run_command(struct cfjail *j) if ((cs = strpbrk(comstring->s, "!\"$&'()*;<>?[\\]`{|}~")) && !(cs[0] == '&' && cs[1] == '\0')) { argv = alloca(4 * sizeof(char *)); - argv[0] = _PATH_BSHELL; + argv[0] = "sh"; argv[1] = "-c"; argv[2] = comstring->s; argv[3] = NULL; @@ -763,7 +763,7 @@ run_command(struct cfjail *j) setenv("USER", pwd->pw_name, 1); setenv("HOME", pwd->pw_dir, 1); setenv("SHELL", - *pwd->pw_shell ? pwd->pw_shell : _PATH_BSHELL, 1); + *pwd->pw_shell ? pwd->pw_shell : "sh", 1); if (clean && username && chdir(pwd->pw_dir) < 0) { jail_warnx(j, "chdir %s: %s", pwd->pw_dir, strerror(errno));