Last active 3 weeks ago

dch's Avatar dch revised this gist 1 year ago. Go to revision

1 file changed, 80 insertions

jail_set_iovec.md(file created)

@@ -0,0 +1,80 @@
1 +
2 + ```
3 + /* clang-format off */
4 + struct iovec iov[] = {
5 + { .iov_base = "path" , .iov_len = sizeof("path") },
6 + { .iov_base = jail_path , .iov_len = sizeof(jail_path) },
7 +
8 + { .iov_base = "name" , .iov_len = sizeof("name") },
9 + { .iov_base = jail_name , .iov_len = sizeof(jail_name) },
10 +
11 + { .iov_base = "host.hostname", .iov_len = sizeof("host.hostname") },
12 + { .iov_base = config->agent , .iov_len = SIZEOF0(config->agent) },
13 +
14 + { .iov_base = "ip4.addr" , .iov_len = sizeof("ip4.addr") },
15 + { .iov_base = &inet4_addr , .iov_len = sizeof(inet4_addr) },
16 +
17 + { .iov_base = "ip6.addr" , .iov_len = sizeof("ip6.addr") },
18 + { .iov_base = &inet6_addr , .iov_len = sizeof(inet6_addr) },
19 +
20 + { .iov_base = "allow.raw_sockets", .iov_len = sizeof("allow.raw_sockets") },
21 + { .iov_base = &raw_sockets, .iov_len = sizeof(raw_sockets) },
22 +
23 + { .iov_base = "persist" , .iov_len = sizeof("persist") },
24 + { .iov_base = &persist , .iov_len = sizeof(persist) },
25 +
26 + { .iov_base = "jid" , .iov_len = sizeof("jid") },
27 + { .iov_base = &jid , .iov_len = sizeof(jid) },
28 +
29 + { .iov_base = "osrelease" , .iov_len = sizeof("osrelease") },
30 + { .iov_base = jail_release , .iov_len = sizeof(jail_release) },
31 +
32 + { .iov_base = "osreldate" , .iov_len = sizeof("osreldate") },
33 + { .iov_base = &jail_reldate , .iov_len = sizeof(jail_reldate) },
34 +
35 + { .iov_base = "host.hostuuid", .iov_len = sizeof("host.hostuuid") },
36 + { .iov_base = jail_uuid , .iov_len = sizeof(jail_uuid) },
37 +
38 + { .iov_base = "errmsg" , .iov_len = sizeof("errmsg") },
39 + { .iov_base = jail_errmsg , .iov_len = JAIL_ERRMSGLEN }
40 + };
41 + /* clang-format on */
42 +
43 + jid = jail_set(iov, sizeof(iov) / sizeof(*iov), JAIL_CREATE);
44 +
45 + if (jid < 0) {
46 + /* provide additional information via iovec errmsg */
47 + if (jail_errmsg[0]) {
48 + err(1, "child: jail_set err: %s", strerror(errno));
49 + } else {
50 + err(1, "child: jail_set msg: %s", jail_errmsg);
51 + }
52 + printf("FAILED\n");
53 + exit(EXIT_FAILURE);
54 + }
55 +
56 + /* from outside the jail, we can use jail_getid(), inside it will fail
57 + */
58 + jid = jail_getid(jail_name);
59 +
60 + if (jid > 0) {
61 + log_info("outside: jid=%d", jid);
62 + } else {
63 + log_error("inside: jid=%d", jid);
64 + exit(EXIT_FAILURE);
65 + }
66 +
67 + /* attach and check jail_getid() again */
68 + if (jail_attach(jid) < 0) {
69 + err(1, "jail_attach");
70 + }
71 +
72 + jid = jail_getid(jail_name);
73 +
74 + if (jid > 0) {
75 + log_error("outside: jid=%d", jid);
76 + exit(EXIT_FAILURE);
77 + } else {
78 + log_info("inside: jid=%d", jid);
79 + }
80 + ```
Newer Older