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