Lines 77-83
static int sort_param(const void *a, const void *b);
Link Here
|
77 |
static char *noname(const char *name); |
77 |
static char *noname(const char *name); |
78 |
static char *nononame(const char *name); |
78 |
static char *nononame(const char *name); |
79 |
static int print_jail(int pflags, int jflags); |
79 |
static int print_jail(int pflags, int jflags); |
|
|
80 |
static int special_print(int pflags, struct jailparam *param); |
80 |
static void quoted_print(int pflags, char *name, char *value); |
81 |
static void quoted_print(int pflags, char *name, char *value); |
|
|
82 |
static void emit_ip_addr(int af_family, struct jailparam *param); |
81 |
|
83 |
|
82 |
int |
84 |
int |
83 |
main(int argc, char **argv) |
85 |
main(int argc, char **argv) |
Lines 379-386
print_jail(int pflags, int jflags)
Link Here
|
379 |
{ |
381 |
{ |
380 |
char *nname, *xo_nname; |
382 |
char *nname, *xo_nname; |
381 |
char **param_values; |
383 |
char **param_values; |
382 |
int i, ai, jid, count, n, spc; |
384 |
int i, jid, n, spc; |
383 |
char ipbuf[INET6_ADDRSTRLEN]; |
|
|
384 |
|
385 |
|
385 |
jid = jailparam_get(params, nparams, jflags); |
386 |
jid = jailparam_get(params, nparams, jflags); |
386 |
if (jid < 0) |
387 |
if (jid < 0) |
Lines 402-435
print_jail(int pflags, int jflags)
Link Here
|
402 |
#ifdef INET |
403 |
#ifdef INET |
403 |
if (ip4_ok && !strcmp(params[n].jp_name, "ip4.addr")) { |
404 |
if (ip4_ok && !strcmp(params[n].jp_name, "ip4.addr")) { |
404 |
xo_open_list("ipv4_addrs"); |
405 |
xo_open_list("ipv4_addrs"); |
405 |
count = params[n].jp_valuelen / sizeof(struct in_addr); |
406 |
emit_ip_addr(AF_INET, params + n); |
406 |
for (ai = 0; ai < count; ai++) { |
|
|
407 |
if (inet_ntop(AF_INET, |
408 |
&((struct in_addr *)params[n].jp_value)[ai], |
409 |
ipbuf, sizeof(ipbuf)) == NULL) { |
410 |
xo_err(1, "inet_ntop"); |
411 |
} else { |
412 |
xo_emit("{P: }{ql:ipv4_addr}{P:\n}", ipbuf); |
413 |
} |
414 |
} |
415 |
xo_close_list("ipv4_addrs"); |
407 |
xo_close_list("ipv4_addrs"); |
416 |
n++; |
408 |
n++; |
417 |
} |
409 |
} |
418 |
#endif |
410 |
#endif |
419 |
#ifdef INET6 |
411 |
#ifdef INET6 |
420 |
if (ip6_ok && !strcmp(params[n].jp_name, "ip6.addr")) { |
412 |
if (ip6_ok && !strcmp(params[n].jp_name, "ip6.addr")) { |
421 |
count = params[n].jp_valuelen / sizeof(struct in6_addr); |
|
|
422 |
xo_open_list("ipv6_addrs"); |
413 |
xo_open_list("ipv6_addrs"); |
423 |
for (ai = 0; ai < count; ai++) { |
414 |
emit_ip_addr(AF_INET6, params + n); |
424 |
if (inet_ntop(AF_INET6, |
|
|
425 |
&((struct in6_addr *) |
426 |
params[n].jp_value)[ai], |
427 |
ipbuf, sizeof(ipbuf)) == NULL) { |
428 |
xo_err(1, "inet_ntop"); |
429 |
} else { |
430 |
xo_emit("{P: }{ql:ipv6_addr}{P:\n}", ipbuf); |
431 |
} |
432 |
} |
433 |
xo_close_list("ipv6_addrs"); |
415 |
xo_close_list("ipv6_addrs"); |
434 |
n++; |
416 |
n++; |
435 |
} |
417 |
} |
Lines 457-462
print_jail(int pflags, int jflags)
Link Here
|
457 |
if (!(params[i].jp_flags & JP_USER)) |
439 |
if (!(params[i].jp_flags & JP_USER)) |
458 |
continue; |
440 |
continue; |
459 |
param_values[i] = jailparam_export(params + i); |
441 |
param_values[i] = jailparam_export(params + i); |
|
|
442 |
param_values[i] = jailparam_export(params + i); |
460 |
if (param_values[i] == NULL) |
443 |
if (param_values[i] == NULL) |
461 |
xo_errx(1, "%s", jail_errmsg); |
444 |
xo_errx(1, "%s", jail_errmsg); |
462 |
} |
445 |
} |
Lines 506-519
print_jail(int pflags, int jflags)
Link Here
|
506 |
} |
489 |
} |
507 |
xo_emit("{d:%s}=", params[i].jp_name); |
490 |
xo_emit("{d:%s}=", params[i].jp_name); |
508 |
} |
491 |
} |
509 |
if (params[i].jp_valuelen == 0) { |
492 |
|
510 |
if (pflags & PRINT_QUOTED) |
493 |
if (!special_print(pflags, params + i)) |
511 |
xo_emit("{P:\"\"}"); |
|
|
512 |
else if (!(pflags & PRINT_NAMEVAL)) |
513 |
xo_emit("{P:-}"); |
514 |
} else { |
515 |
quoted_print(pflags, params[i].jp_name, param_values[i]); |
494 |
quoted_print(pflags, params[i].jp_name, param_values[i]); |
516 |
} |
495 |
|
517 |
} |
496 |
} |
518 |
xo_emit("{P:\n}"); |
497 |
xo_emit("{P:\n}"); |
519 |
for (i = 0; i < nparams; i++) |
498 |
for (i = 0; i < nparams; i++) |
Lines 560-562
quoted_print(int pflags, char *name, char *value)
Link Here
|
560 |
if (qc && pflags & PRINT_QUOTED) |
539 |
if (qc && pflags & PRINT_QUOTED) |
561 |
xo_emit("{P:/%c}", qc); |
540 |
xo_emit("{P:/%c}", qc); |
562 |
} |
541 |
} |
|
|
542 |
|
543 |
static int |
544 |
special_print(int pflags, struct jailparam *param) { |
545 |
|
546 |
int ip_as_list; |
547 |
|
548 |
switch (xo_get_style(NULL)) { |
549 |
case XO_STYLE_JSON: |
550 |
case XO_STYLE_XML: |
551 |
ip_as_list = 1; |
552 |
break; |
553 |
default: |
554 |
ip_as_list = 0; |
555 |
} |
556 |
|
557 |
if (!ip_as_list && param->jp_valuelen == 0) { |
558 |
if (pflags & PRINT_QUOTED) |
559 |
xo_emit("{P:\"\"}"); |
560 |
else if (!(pflags & PRINT_NAMEVAL)) |
561 |
xo_emit("{P:-}"); |
562 |
} else if (ip_as_list && !strcmp(param->jp_name, "ip4.addr")) { |
563 |
xo_open_list("ip4.addr"); |
564 |
emit_ip_addr(AF_INET, param); |
565 |
xo_close_list("ip4.addr"); |
566 |
} else if (ip_as_list && !strcmp(param->jp_name, "ip6.addr")) { |
567 |
xo_open_list("ip6.addr"); |
568 |
emit_ip_addr(AF_INET6, param); |
569 |
xo_close_list("ip6.addr"); |
570 |
} else { |
571 |
return 0; |
572 |
} |
573 |
|
574 |
return 1; |
575 |
} |
576 |
|
577 |
static void |
578 |
emit_ip_addr(int af_family, struct jailparam *param) { |
579 |
char ipbuf[INET6_ADDRSTRLEN]; |
580 |
size_t addr_len; |
581 |
const char *emit_str; |
582 |
int count, ai; |
583 |
|
584 |
switch (af_family) { |
585 |
case AF_INET: |
586 |
addr_len = sizeof(struct in_addr); |
587 |
emit_str = "{P: }{ql:ipv4_addr}{P:\n}"; |
588 |
break; |
589 |
case AF_INET6: |
590 |
addr_len = sizeof(struct in6_addr); |
591 |
emit_str = "{P: }{ql:ipv6_addr}{P:\n}"; |
592 |
break; |
593 |
default: |
594 |
xo_err(1, "unsupported af_family"); |
595 |
return; |
596 |
} |
597 |
|
598 |
count = param->jp_valuelen / addr_len; |
599 |
|
600 |
for (ai = 0; ai < count; ai++) { |
601 |
if (inet_ntop(af_family, |
602 |
((uint8_t*)param->jp_value) + addr_len*ai, |
603 |
ipbuf, sizeof(ipbuf)) == NULL) { |
604 |
xo_err(1, "inet_ntop"); |
605 |
} else { |
606 |
xo_emit(emit_str, ipbuf); |
607 |
} |
608 |
} |
609 |
|
610 |
} |