Skip to content

Commit 16cd634

Browse files
authored
freebsd.{jail,jls,jexec}: init (#384017)
2 parents 798e8fc + 480101e commit 16cd634

File tree

4 files changed

+160
-0
lines changed

4 files changed

+160
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
In a NixOS-like system, it doesn't make sense to hardcode these absolute paths.
2+
They even already use execvp!
3+
4+
diff --git a/usr.sbin/jail/command.c b/usr.sbin/jail/command.c
5+
index 9eabcc5ff53c..2024f6bfb97a 100644
6+
--- a/usr.sbin/jail/command.c
7+
+++ b/usr.sbin/jail/command.c
8+
@@ -363,7 +363,7 @@ run_command(struct cfjail *j)
9+
}
10+
11+
argv = alloca((8 + argc) * sizeof(char *));
12+
- argv[0] = _PATH_IFCONFIG;
13+
+ argv[0] = "ifconfig";
14+
if ((cs = strchr(val, '|'))) {
15+
argv[1] = acs = alloca(cs - val + 1);
16+
strlcpy(acs, val, cs - val + 1);
17+
@@ -420,7 +420,7 @@ run_command(struct cfjail *j)
18+
}
19+
20+
argv = alloca((8 + argc) * sizeof(char *));
21+
- argv[0] = _PATH_IFCONFIG;
22+
+ argv[0] = "ifconfig";
23+
if ((cs = strchr(val, '|'))) {
24+
argv[1] = acs = alloca(cs - val + 1);
25+
strlcpy(acs, val, cs - val + 1);
26+
@@ -454,7 +454,7 @@ run_command(struct cfjail *j)
27+
28+
case IP_VNET_INTERFACE:
29+
argv = alloca(5 * sizeof(char *));
30+
- argv[0] = _PATH_IFCONFIG;
31+
+ argv[0] = "ifconfig";
32+
argv[1] = comstring->s;
33+
argv[2] = down ? "-vnet" : "vnet";
34+
jidstr = string_param(j->intparams[KP_JID]);
35+
@@ -490,7 +490,7 @@ run_command(struct cfjail *j)
36+
if (down) {
37+
argv[4] = NULL;
38+
argv[3] = argv[1];
39+
- argv[0] = "/sbin/umount";
40+
+ argv[0] = "umount";
41+
} else {
42+
if (argc == 4) {
43+
argv[7] = NULL;
44+
@@ -503,7 +503,7 @@ run_command(struct cfjail *j)
45+
argv[4] = argv[1];
46+
argv[3] = argv[0];
47+
}
48+
- argv[0] = _PATH_MOUNT;
49+
+ argv[0] = "mount";
50+
}
51+
argv[1] = "-t";
52+
break;
53+
@@ -521,11 +521,11 @@ run_command(struct cfjail *j)
54+
down ? "devfs" : NULL) < 0)
55+
return -1;
56+
if (down) {
57+
- argv[0] = "/sbin/umount";
58+
+ argv[0] = "umount";
59+
argv[1] = devpath;
60+
argv[2] = NULL;
61+
} else {
62+
- argv[0] = _PATH_MOUNT;
63+
+ argv[0] = "mount";
64+
argv[1] = "-t";
65+
argv[2] = "devfs";
66+
ruleset = string_param(j->intparams[KP_DEVFS_RULESET]);
67+
@@ -552,11 +552,11 @@ run_command(struct cfjail *j)
68+
down ? "fdescfs" : NULL) < 0)
69+
return -1;
70+
if (down) {
71+
- argv[0] = "/sbin/umount";
72+
+ argv[0] = "umount";
73+
argv[1] = devpath;
74+
argv[2] = NULL;
75+
} else {
76+
- argv[0] = _PATH_MOUNT;
77+
+ argv[0] = "mount";
78+
argv[1] = "-t";
79+
argv[2] = "fdescfs";
80+
argv[3] = ".";
81+
@@ -578,11 +578,11 @@ run_command(struct cfjail *j)
82+
down ? "procfs" : NULL) < 0)
83+
return -1;
84+
if (down) {
85+
- argv[0] = "/sbin/umount";
86+
+ argv[0] = "umount";
87+
argv[1] = devpath;
88+
argv[2] = NULL;
89+
} else {
90+
- argv[0] = _PATH_MOUNT;
91+
+ argv[0] = "mount";
92+
argv[1] = "-t";
93+
argv[2] = "procfs";
94+
argv[3] = ".";
95+
@@ -610,7 +610,7 @@ run_command(struct cfjail *j)
96+
if ((cs = strpbrk(comstring->s, "!\"$&'()*;<>?[\\]`{|}~")) &&
97+
!(cs[0] == '&' && cs[1] == '\0')) {
98+
argv = alloca(4 * sizeof(char *));
99+
- argv[0] = _PATH_BSHELL;
100+
+ argv[0] = "sh";
101+
argv[1] = "-c";
102+
argv[2] = comstring->s;
103+
argv[3] = NULL;
104+
@@ -763,7 +763,7 @@ run_command(struct cfjail *j)
105+
setenv("USER", pwd->pw_name, 1);
106+
setenv("HOME", pwd->pw_dir, 1);
107+
setenv("SHELL",
108+
- *pwd->pw_shell ? pwd->pw_shell : _PATH_BSHELL, 1);
109+
+ *pwd->pw_shell ? pwd->pw_shell : "sh", 1);
110+
if (clean && chdir(pwd->pw_dir) < 0) {
111+
jail_warnx(j, "chdir %s: %s",
112+
pwd->pw_dir, strerror(errno));
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
lib,
3+
mkDerivation,
4+
flex,
5+
byacc,
6+
libjail,
7+
}:
8+
mkDerivation {
9+
path = "usr.sbin/jail";
10+
extraNativeBuildInputs = [
11+
flex
12+
byacc
13+
];
14+
buildInputs = [
15+
libjail
16+
];
17+
MK_TESTS = "no";
18+
meta.mainProgram = "jail";
19+
meta.platforms = lib.platforms.freebsd;
20+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
lib,
3+
mkDerivation,
4+
libjail,
5+
}:
6+
mkDerivation {
7+
path = "usr.sbin/jexec";
8+
buildInputs = [
9+
libjail
10+
];
11+
meta.mainProgram = "jexec";
12+
meta.platforms = lib.platforms.freebsd;
13+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
lib,
3+
mkDerivation,
4+
libjail,
5+
libxo,
6+
}:
7+
mkDerivation {
8+
path = "usr.sbin/jls";
9+
buildInputs = [
10+
libjail
11+
libxo
12+
];
13+
meta.mainProgram = "jls";
14+
meta.platforms = lib.platforms.freebsd;
15+
}

0 commit comments

Comments
 (0)