static int print_jail(int pflags, int jflags) { char *nname, *xo_nname; char **param_values; int i, jid, n, spc; jid = jailparam_get(params, nparams, jflags); if (jid < 0) return jid; xo_open_instance("jail"); if (pflags & PRINT_VERBOSE) { xo_emit("{:jid/%6d}{P: }{:hostname/%-29.29s/%s}{P: }" "{:path/%.74s/%s}\n", *(int *)params[0].jp_value, (char *)params[1].jp_value, (char *)params[2].jp_value); xo_emit("{P: }{:name/%-29.29s/%s}{P: }{:state/%.74s}\n", (char *)params[3].jp_value, *(int *)params[4].jp_value ? "DYING" : "ACTIVE"); xo_emit("{P: }{:cpusetid/%d}\n", *(int *)params[5].jp_value); n = 6; #ifdef INET if (ip4_ok && !strcmp(params[n].jp_name, "ip4.addr")) { emit_ip_addr_list(AF_INET, "ipv4_addrs", params + n); n++; } #endif #ifdef INET6 if (ip6_ok && !strcmp(params[n].jp_name, "ip6.addr")) { emit_ip_addr_list(AF_INET6, "ipv6_addrs", params + n); n++; } #endif } else if (pflags & PRINT_DEFAULT) { if (pflags & PRINT_JAIL_NAME) xo_emit("{P: }{:name/%-15s/%s}{P: }", (char *)params[0].jp_value); else xo_emit("{:jid/%6d}{P: }", *(int *)params[0].jp_value); xo_emit("{:ipv4/%-15.15s/%s}{P: }{:hostname/%-29.29s/%s}{P: }{:path/%.74s/%s}\n", #ifdef INET (!ip4_ok || params[1].jp_valuelen == 0) ? "" : inet_ntoa(*(struct in_addr *)params[1].jp_value), (char *)params[2-!ip4_ok].jp_value, (char *)params[3-!ip4_ok].jp_value); #else "-", (char *)params[1].jp_value, (char *)params[2].jp_value); #endif } else {
static int getjail(vstat_t *vs, int lastjid, int verbose) { struct jailparam params[32]; /* Must be > max(psize). */ int psize = 0; bzero(params, sizeof(params)); bzero(vs, sizeof(*vs)); jailparam_init(¶ms[psize], "lastjid"); jailparam_import_raw(¶ms[psize++], &lastjid, sizeof lastjid); jailparam_init(¶ms[psize], "vnet"); jailparam_import_raw(¶ms[psize++], &vs->vnet, sizeof(vs->vnet)); jailparam_init(¶ms[psize], "name"); jailparam_import_raw(¶ms[psize++], &vs->name, sizeof(vs->name)); if (verbose == 0) goto done; jailparam_init(¶ms[psize], "path"); jailparam_import_raw(¶ms[psize++], &vs->path, sizeof(vs->path)); jailparam_init(¶ms[psize], "host.hostname"); jailparam_import_raw(¶ms[psize++], &vs->hostname, sizeof(vs->hostname)); jailparam_init(¶ms[psize], "host.domainname"); jailparam_import_raw(¶ms[psize++], &vs->domainname, sizeof(vs->domainname)); jailparam_init(¶ms[psize], "children.cur"); jailparam_import_raw(¶ms[psize++], &vs->childcnt, sizeof(vs->childcnt)); if (verbose == 1) goto done; jailparam_init(¶ms[psize], "children.max"); jailparam_import_raw(¶ms[psize++], &vs->childmax, sizeof(vs->childmax)); jailparam_init(¶ms[psize], "cpuset.id"); jailparam_import_raw(¶ms[psize++], &vs->cpuset, sizeof(vs->cpuset)); jailparam_init(¶ms[psize], "parent"); jailparam_import_raw(¶ms[psize++], &vs->parentjid, sizeof(vs->parentjid)); jailparam_init(¶ms[psize], "allow.raw_sockets"); jailparam_import_raw(¶ms[psize++], &vs->rawsock, sizeof(vs->rawsock)); jailparam_init(¶ms[psize], "allow.socket_af"); jailparam_import_raw(¶ms[psize++], &vs->socket_af, sizeof(vs->socket_af)); jailparam_init(¶ms[psize], "allow.mount"); jailparam_import_raw(¶ms[psize++], &vs->mount, sizeof(vs->mount)); done: vs->jid = jailparam_get(params, psize, 0); jailparam_free(params, psize); return (vs->jid); }
static int print_jail(int pflags, int jflags) { char *nname; char **param_values; int i, ai, jid, count, n, spc; char ipbuf[INET6_ADDRSTRLEN]; jid = jailparam_get(params, nparams, jflags); if (jid < 0) return jid; if (pflags & PRINT_VERBOSE) { printf("%6d %-29.29s %.74s\n" "%6s %-29.29s %.74s\n" "%6s %-6d\n", *(int *)params[0].jp_value, (char *)params[1].jp_value, (char *)params[2].jp_value, "", (char *)params[3].jp_value, *(int *)params[4].jp_value ? "DYING" : "ACTIVE", "", *(int *)params[5].jp_value); n = 6; #ifdef INET if (ip4_ok && !strcmp(params[n].jp_name, "ip4.addr")) { count = params[n].jp_valuelen / sizeof(struct in_addr); for (ai = 0; ai < count; ai++) if (inet_ntop(AF_INET, &((struct in_addr *)params[n].jp_value)[ai], ipbuf, sizeof(ipbuf)) == NULL) err(1, "inet_ntop"); else printf("%6s %-15.15s\n", "", ipbuf); n++; } #endif #ifdef INET6 if (ip6_ok && !strcmp(params[n].jp_name, "ip6.addr")) { count = params[n].jp_valuelen / sizeof(struct in6_addr); for (ai = 0; ai < count; ai++) if (inet_ntop(AF_INET6, &((struct in6_addr *) params[n].jp_value)[ai], ipbuf, sizeof(ipbuf)) == NULL) err(1, "inet_ntop"); else printf("%6s %s\n", "", ipbuf); n++; } #endif } else if (pflags & PRINT_DEFAULT) printf("%6d %-15.15s %-29.29s %.74s\n", *(int *)params[0].jp_value, #ifdef INET (!ip4_ok || params[1].jp_valuelen == 0) ? "-" : inet_ntoa(*(struct in_addr *)params[1].jp_value), (char *)params[2-!ip4_ok].jp_value, (char *)params[3-!ip4_ok].jp_value); #else "-", (char *)params[1].jp_value, (char *)params[2].jp_value); #endif else {
static int print_jail(int pflags, int jflags) { char *nname; char **param_values; int i, ai, jid, count, n, spc; char ipbuf[INET6_ADDRSTRLEN]; jid = jailparam_get(params, nparams, jflags); if (jid < 0) return jid; if (pflags & PRINT_VERBOSE) { printf("%6d %-29.29s %.74s\n" "%6s %-29.29s %.74s\n" "%6s %-6d\n", *(int *)params[0].jp_value, (char *)params[1].jp_value, (char *)params[2].jp_value, "", (char *)params[3].jp_value, *(int *)params[4].jp_value ? "DYING" : "ACTIVE", "", *(int *)params[5].jp_value); n = 6; #ifdef INET if (ip4_ok && !strcmp(params[n].jp_name, "ip4.addr")) { count = params[n].jp_valuelen / sizeof(struct in_addr); for (ai = 0; ai < count; ai++) if (inet_ntop(AF_INET, &((struct in_addr *)params[n].jp_value)[ai], ipbuf, sizeof(ipbuf)) == NULL) err(1, "inet_ntop"); else printf("%6s %-15.15s\n", "", ipbuf); n++; } #endif #ifdef INET6 if (ip6_ok && !strcmp(params[n].jp_name, "ip6.addr")) { count = params[n].jp_valuelen / sizeof(struct in6_addr); for (ai = 0; ai < count; ai++) if (inet_ntop(AF_INET6, &((struct in6_addr *) params[n].jp_value)[ai], ipbuf, sizeof(ipbuf)) == NULL) err(1, "inet_ntop"); else printf("%6s %s\n", "", ipbuf); n++; } #endif } else if (pflags & PRINT_DEFAULT) printf("%6d %-15.15s %-29.29s %.74s\n", *(int *)params[0].jp_value, #ifdef INET (!ip4_ok || params[1].jp_valuelen == 0) ? "-" : inet_ntoa(*(struct in_addr *)params[1].jp_value), #else "-", #endif (char *)params[2-!ip4_ok].jp_value, (char *)params[3-!ip4_ok].jp_value); else { param_values = alloca(nparams * sizeof(*param_values)); for (i = 0; i < nparams; i++) { if (!(params[i].jp_flags & JP_USER)) continue; param_values[i] = jailparam_export(params + i); if (param_values[i] == NULL) errx(1, "%s", jail_errmsg); } for (i = spc = 0; i < nparams; i++) { if (!(params[i].jp_flags & JP_USER)) continue; if ((pflags & PRINT_SKIP) && ((!(params[i].jp_ctltype & (CTLFLAG_WR | CTLFLAG_TUN))) || (param_parent[i] >= 0 && *(int *)params[param_parent[i]].jp_value != JAIL_SYS_NEW))) continue; if (spc) putchar(' '); else spc = 1; if (pflags & PRINT_NAMEVAL) { /* * Generally "name=value", but for booleans * either "name" or "noname". */ if (params[i].jp_flags & (JP_BOOL | JP_NOBOOL)) { if (*(int *)params[i].jp_value) printf("%s", params[i].jp_name); else { nname = (params[i].jp_flags & JP_NOBOOL) ? nononame(params[i].jp_name) : noname(params[i].jp_name); printf("%s", nname); free(nname); } continue; } printf("%s=", params[i].jp_name); } if (params[i].jp_valuelen == 0) { if (pflags & PRINT_QUOTED) printf("\"\""); else if (!(pflags & PRINT_NAMEVAL)) putchar('-'); } else quoted_print(param_values[i]); } putchar('\n'); for (i = 0; i < nparams; i++) if (params[i].jp_flags & JP_USER) free(param_values[i]); } return (jid); }