svn commit: r335921 - in head: lib/libugidfw sbin/ipfw usr.bin/cpuset usr.bin/sockstat
Jamie Gritton
jamie at FreeBSD.org
Tue Jul 3 23:47:24 UTC 2018
Author: jamie
Date: Tue Jul 3 23:47:20 2018
New Revision: 335921
URL: https://svnweb.freebsd.org/changeset/base/335921
Log:
Allow jail names (not just IDs) to be specified for: cpuset(1), ipfw(8),
sockstat(1), ugidfw(8)
These are the last of the jail-aware userland utilities that didn't work
with names.
PR: 229266
MFC after: 3 days
Differential Revision: D16047
Modified:
head/lib/libugidfw/ugidfw.c
head/sbin/ipfw/Makefile
head/sbin/ipfw/ipfw.8
head/sbin/ipfw/ipfw2.c
head/usr.bin/cpuset/Makefile
head/usr.bin/cpuset/cpuset.1
head/usr.bin/cpuset/cpuset.c
head/usr.bin/sockstat/Makefile
head/usr.bin/sockstat/sockstat.1
head/usr.bin/sockstat/sockstat.c
Modified: head/lib/libugidfw/ugidfw.c
==============================================================================
--- head/lib/libugidfw/ugidfw.c Tue Jul 3 23:45:02 2018 (r335920)
+++ head/lib/libugidfw/ugidfw.c Tue Jul 3 23:47:20 2018 (r335921)
@@ -34,9 +34,11 @@
*/
#include <sys/param.h>
#include <sys/errno.h>
+#include <sys/jail.h>
#include <sys/time.h>
#include <sys/sysctl.h>
#include <sys/ucred.h>
+#include <sys/uio.h>
#include <sys/mount.h>
#include <security/mac_bsdextended/mac_bsdextended.h>
@@ -600,16 +602,45 @@ bsde_parse_gidrange(char *spec, gid_t *min, gid_t *max
}
static int
+bsde_get_jailid(const char *name, size_t buflen, char *errstr)
+{
+ char *ep;
+ int jid;
+ struct iovec jiov[4];
+
+ /* Copy jail_getid(3) instead of messing with library dependancies */
+ jid = strtoul(name, &ep, 10);
+ if (*name && !*ep)
+ return jid;
+ jiov[0].iov_base = __DECONST(char *, "name");
+ jiov[0].iov_len = sizeof("name");
+ jiov[1].iov_len = strlen(name) + 1;
+ jiov[1].iov_base = alloca(jiov[1].iov_len);
+ strcpy(jiov[1].iov_base, name);
+ if (errstr && buflen) {
+ jiov[2].iov_base = __DECONST(char *, "errmsg");
+ jiov[2].iov_len = sizeof("errmsg");
+ jiov[3].iov_base = errstr;
+ jiov[3].iov_len = buflen;
+ errstr[0] = 0;
+ jid = jail_get(jiov, 4, 0);
+ if (jid < 0 && !errstr[0])
+ snprintf(errstr, buflen, "jail_get: %s",
+ strerror(errno));
+ } else
+ jid = jail_get(jiov, 2, 0);
+ return jid;
+}
+
+static int
bsde_parse_subject(int argc, char *argv[],
struct mac_bsdextended_subject *subject, size_t buflen, char *errstr)
{
int not_seen, flags;
int current, neg, nextnot;
- char *endp;
uid_t uid_min, uid_max;
gid_t gid_min, gid_max;
int jid = 0;
- long value;
current = 0;
flags = 0;
@@ -668,13 +699,9 @@ bsde_parse_subject(int argc, char *argv[],
snprintf(errstr, buflen, "one jail only");
return (-1);
}
- value = strtol(argv[current+1], &endp, 10);
- if (*endp != '\0') {
- snprintf(errstr, buflen, "invalid jid: '%s'",
- argv[current+1]);
+ jid = bsde_get_jailid(argv[current+1], buflen, errstr);
+ if (jid < 0)
return (-1);
- }
- jid = value;
flags |= MBS_PRISON_DEFINED;
if (nextnot) {
neg ^= MBS_PRISON_DEFINED;
Modified: head/sbin/ipfw/Makefile
==============================================================================
--- head/sbin/ipfw/Makefile Tue Jul 3 23:45:02 2018 (r335920)
+++ head/sbin/ipfw/Makefile Tue Jul 3 23:47:20 2018 (r335921)
@@ -13,7 +13,7 @@ SRCS+= altq.c
CFLAGS+=-DPF
.endif
-LIBADD= util
+LIBADD= jail util
MAN= ipfw.8
.include <bsd.prog.mk>
Modified: head/sbin/ipfw/ipfw.8
==============================================================================
--- head/sbin/ipfw/ipfw.8 Tue Jul 3 23:45:02 2018 (r335920)
+++ head/sbin/ipfw/ipfw.8 Tue Jul 3 23:47:20 2018 (r335921)
@@ -1,7 +1,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd June 28, 2018
+.Dd July 3, 2018
.Dt IPFW 8
.Os
.Sh NAME
@@ -1535,10 +1535,10 @@ Matches all TCP or UDP packets sent by or received for
A
.Ar group
may be specified by name or number.
-.It Cm jail Ar prisonID
+.It Cm jail Ar jail
Matches all TCP or UDP packets sent by or received for the
-jail whos prison ID is
-.Ar prisonID .
+jail whose ID or name is
+.Ar jail .
.It Cm icmptypes Ar types
Matches ICMP packets whose ICMP type is in the list
.Ar types .
Modified: head/sbin/ipfw/ipfw2.c
==============================================================================
--- head/sbin/ipfw/ipfw2.c Tue Jul 3 23:45:02 2018 (r335920)
+++ head/sbin/ipfw/ipfw2.c Tue Jul 3 23:47:20 2018 (r335921)
@@ -32,6 +32,7 @@
#include <err.h>
#include <errno.h>
#include <grp.h>
+#include <jail.h>
#include <netdb.h>
#include <pwd.h>
#include <stdio.h>
@@ -4581,13 +4582,12 @@ read_options:
case TOK_JAIL:
NEED1("jail requires argument");
{
- char *end;
int jid;
cmd->opcode = O_JAIL;
- jid = (int)strtol(*av, &end, 0);
- if (jid < 0 || *end != '\0')
- errx(EX_DATAERR, "jail requires prison ID");
+ jid = jail_getid(*av);
+ if (jid < 0)
+ errx(EX_DATAERR, "%s", jail_errmsg);
cmd32->d[0] = (uint32_t)jid;
cmd->len |= F_INSN_SIZE(ipfw_insn_u32);
av++;
Modified: head/usr.bin/cpuset/Makefile
==============================================================================
--- head/usr.bin/cpuset/Makefile Tue Jul 3 23:45:02 2018 (r335920)
+++ head/usr.bin/cpuset/Makefile Tue Jul 3 23:47:20 2018 (r335921)
@@ -2,4 +2,6 @@
PROG= cpuset
+LIBADD= jail
+
.include <bsd.prog.mk>
Modified: head/usr.bin/cpuset/cpuset.1
==============================================================================
--- head/usr.bin/cpuset/cpuset.1 Tue Jul 3 23:45:02 2018 (r335920)
+++ head/usr.bin/cpuset/cpuset.1 Tue Jul 3 23:47:20 2018 (r335921)
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd February 26, 2018
+.Dd July 3, 2018
.Dt CPUSET 1
.Os
.Sh NAME
@@ -56,7 +56,7 @@
.Nm
.Fl g
.Op Fl cir
-.Op Fl d Ar domain | Fl j Ar jailid | Fl p Ar pid | Fl t Ar tid | Fl s Ar setid | Fl x Ar irq
+.Op Fl d Ar domain | Fl j Ar jail | Fl p Ar pid | Fl t Ar tid | Fl s Ar setid | Fl x Ar irq
.Sh DESCRIPTION
The
.Nm
@@ -68,7 +68,7 @@ available processors and memory domains in the system.
.Nm
requires a target to modify or query.
The target may be specified as a command, process id, thread id, a
-cpuset id, an irq, a jail id, or a NUMA domain.
+cpuset id, an irq, a jail, or a NUMA domain.
Using
.Fl g
the target's set id or mask may be queried.
@@ -136,8 +136,8 @@ the id of the target.
When used with the
.Fl g
option print the id rather than the valid mask of the target.
-.It Fl j Ar jailid
-Specifies a jail id as the target of the operation.
+.It Fl j Ar jail
+Specifies a jail id or name as the target of the operation.
.It Fl l Ar cpu-list
Specifies a list of CPUs to apply to a target.
Specification may include
Modified: head/usr.bin/cpuset/cpuset.c
==============================================================================
--- head/usr.bin/cpuset/cpuset.c Tue Jul 3 23:45:02 2018 (r335920)
+++ head/usr.bin/cpuset/cpuset.c Tue Jul 3 23:47:20 2018 (r335921)
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include <ctype.h>
#include <err.h>
#include <errno.h>
+#include <jail.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
@@ -320,7 +321,9 @@ main(int argc, char *argv[])
case 'j':
jflag = 1;
which = CPU_WHICH_JAIL;
- id = atoi(optarg);
+ id = jail_getid(optarg);
+ if (id < 0)
+ errx(EXIT_FAILURE, "%s", jail_errmsg);
break;
case 'l':
lflag = 1;
Modified: head/usr.bin/sockstat/Makefile
==============================================================================
--- head/usr.bin/sockstat/Makefile Tue Jul 3 23:45:02 2018 (r335920)
+++ head/usr.bin/sockstat/Makefile Tue Jul 3 23:47:20 2018 (r335921)
@@ -2,4 +2,6 @@
PROG= sockstat
+LIBADD= jail
+
.include <bsd.prog.mk>
Modified: head/usr.bin/sockstat/sockstat.1
==============================================================================
--- head/usr.bin/sockstat/sockstat.1 Tue Jul 3 23:45:02 2018 (r335920)
+++ head/usr.bin/sockstat/sockstat.1 Tue Jul 3 23:47:20 2018 (r335921)
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd January 23, 2018
+.Dd July 3, 2018
.Dt SOCKSTAT 1
.Os
.Sh NAME
@@ -58,8 +58,8 @@ Show
(IPv6) sockets.
.It Fl c
Show connected sockets.
-.It Fl j Ar jid
-Show only sockets belonging to the specified jail ID.
+.It Fl j Ar jail
+Show only sockets belonging to the specified jail ID or name.
.It Fl L
Only show Internet sockets if the local and foreign addresses are not
in the loopback network prefix
Modified: head/usr.bin/sockstat/sockstat.c
==============================================================================
--- head/usr.bin/sockstat/sockstat.c Tue Jul 3 23:45:02 2018 (r335920)
+++ head/usr.bin/sockstat/sockstat.c Tue Jul 3 23:47:20 2018 (r335921)
@@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$");
#include <ctype.h>
#include <err.h>
#include <errno.h>
+#include <jail.h>
#include <netdb.h>
#include <pwd.h>
#include <stdarg.h>
@@ -1263,7 +1264,9 @@ main(int argc, char *argv[])
opt_c = 1;
break;
case 'j':
- opt_j = atoi(optarg);
+ opt_j = jail_getid(optarg);
+ if (opt_j < 0)
+ errx(1, "%s", jail_errmsg);
break;
case 'L':
opt_L = 1;
More information about the svn-src-all
mailing list