xref: /dflybsd-src/usr.sbin/jls/jls.c (revision 3f50b137276c579ddf2afbc4ca0eb14be25b9f0c)
1b40e316cSJoerg Sonnenberger /*-
2b40e316cSJoerg Sonnenberger  * Copyright (c) 2003 Mike Barcroft <mike@FreeBSD.org>
3b40e316cSJoerg Sonnenberger  * All rights reserved.
4b40e316cSJoerg Sonnenberger  *
5b40e316cSJoerg Sonnenberger  * Redistribution and use in source and binary forms, with or without
6b40e316cSJoerg Sonnenberger  * modification, are permitted provided that the following conditions
7b40e316cSJoerg Sonnenberger  * are met:
8b40e316cSJoerg Sonnenberger  * 1. Redistributions of source code must retain the above copyright
9b40e316cSJoerg Sonnenberger  *    notice, this list of conditions and the following disclaimer.
10b40e316cSJoerg Sonnenberger  * 2. Redistributions in binary form must reproduce the above copyright
11b40e316cSJoerg Sonnenberger  *    notice, this list of conditions and the following disclaimer in the
12b40e316cSJoerg Sonnenberger  *    documentation and/or other materials provided with the distribution.
13b40e316cSJoerg Sonnenberger  *
14b40e316cSJoerg Sonnenberger  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15b40e316cSJoerg Sonnenberger  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16b40e316cSJoerg Sonnenberger  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17b40e316cSJoerg Sonnenberger  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18b40e316cSJoerg Sonnenberger  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19b40e316cSJoerg Sonnenberger  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20b40e316cSJoerg Sonnenberger  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21b40e316cSJoerg Sonnenberger  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22b40e316cSJoerg Sonnenberger  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23b40e316cSJoerg Sonnenberger  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24b40e316cSJoerg Sonnenberger  * SUCH DAMAGE.
25b40e316cSJoerg Sonnenberger  *
26b40e316cSJoerg Sonnenberger  * $FreeBSD: src/usr.sbin/jls/jls.c,v 1.3 2003/04/22 13:24:56 mike Exp $
273e4150efSVictor Balada Diaz  * $DragonFly: src/usr.sbin/jls/jls.c,v 1.2 2006/12/29 18:02:57 victor Exp $
28b40e316cSJoerg Sonnenberger  */
29b40e316cSJoerg Sonnenberger 
30b40e316cSJoerg Sonnenberger #include <sys/param.h>
31b40e316cSJoerg Sonnenberger #include <sys/sysctl.h>
32b40e316cSJoerg Sonnenberger 
33b40e316cSJoerg Sonnenberger #include <err.h>
34b40e316cSJoerg Sonnenberger #include <errno.h>
35b40e316cSJoerg Sonnenberger #include <limits.h>
36b40e316cSJoerg Sonnenberger #include <stdio.h>
37b40e316cSJoerg Sonnenberger #include <stdlib.h>
383e4150efSVictor Balada Diaz #include <string.h>
39b40e316cSJoerg Sonnenberger 
40b40e316cSJoerg Sonnenberger #include <netinet/in.h>
41b40e316cSJoerg Sonnenberger #include <arpa/inet.h>
42b40e316cSJoerg Sonnenberger 
43b40e316cSJoerg Sonnenberger int
main(void)44b40e316cSJoerg Sonnenberger main(void)
45b40e316cSJoerg Sonnenberger {
46*3f50b137SMatthew Dillon 	size_t len;
473e4150efSVictor Balada Diaz 	char *jls; /* Jail list */
483e4150efSVictor Balada Diaz 	char *curpos;
49*3f50b137SMatthew Dillon 	char *nextpos;
50b40e316cSJoerg Sonnenberger 
51b40e316cSJoerg Sonnenberger 	if (sysctlbyname("jail.list", NULL, &len, NULL, 0) == -1)
52b40e316cSJoerg Sonnenberger 		err(1, "sysctlbyname(): jail.list");
53b40e316cSJoerg Sonnenberger retry:
54b40e316cSJoerg Sonnenberger 	if (len == 0)
55b40e316cSJoerg Sonnenberger 		exit(0);
56b40e316cSJoerg Sonnenberger 
573e4150efSVictor Balada Diaz 	jls = malloc(len);
583e4150efSVictor Balada Diaz 	if (jls == NULL)
59b40e316cSJoerg Sonnenberger 		err(1, "malloc failed");
60b40e316cSJoerg Sonnenberger 
613e4150efSVictor Balada Diaz 	if (sysctlbyname("jail.list", jls, &len, NULL, 0) == -1) {
62b40e316cSJoerg Sonnenberger 		if (errno == ENOMEM) {
633e4150efSVictor Balada Diaz 			free(jls);
64b40e316cSJoerg Sonnenberger 			goto retry;
65b40e316cSJoerg Sonnenberger 		}
66b40e316cSJoerg Sonnenberger 		err(1, "sysctlbyname(): jail.list");
67b40e316cSJoerg Sonnenberger 	}
68*3f50b137SMatthew Dillon 	printf("JID\tHostname\tPath\t\tIPs\n");
693e4150efSVictor Balada Diaz 	curpos = jls;
70*3f50b137SMatthew Dillon 	while (curpos) {
71*3f50b137SMatthew Dillon 		char *str_jid;
72*3f50b137SMatthew Dillon 		char *str_host;
73*3f50b137SMatthew Dillon 		char *str_path;
74*3f50b137SMatthew Dillon 		char *str_ips;
75*3f50b137SMatthew Dillon 
76*3f50b137SMatthew Dillon 		nextpos = strchr(curpos, '\n');
77*3f50b137SMatthew Dillon 		if (nextpos)
78*3f50b137SMatthew Dillon 			*nextpos++ = 0;
79*3f50b137SMatthew Dillon 		str_jid = strtok(curpos, " ");
80*3f50b137SMatthew Dillon 		str_host = strtok(NULL, " ");
81*3f50b137SMatthew Dillon 		str_path = strtok(NULL, " ");
82*3f50b137SMatthew Dillon 		str_ips = strtok(NULL, "\n");
83*3f50b137SMatthew Dillon 
84*3f50b137SMatthew Dillon 		printf("%-8s%-15s %-15s %s\n",
85*3f50b137SMatthew Dillon 			str_jid,
86*3f50b137SMatthew Dillon 			str_host,
87*3f50b137SMatthew Dillon 			str_path,
88*3f50b137SMatthew Dillon 			(str_ips ? str_ips : "(none)"));
89*3f50b137SMatthew Dillon 		curpos = nextpos;
90b40e316cSJoerg Sonnenberger 	}
913e4150efSVictor Balada Diaz 	free(jls);
92b40e316cSJoerg Sonnenberger 	exit(0);
93b40e316cSJoerg Sonnenberger }
94