From 61deed493e3c004962b0e07414d8c1e6babd93cb Mon Sep 17 00:00:00 2001 From: Victor Balada Diaz Date: Mon, 1 Jan 2007 19:45:54 +0000 Subject: [PATCH] jail(2) now returns the jail id if successful or -1 on error. Add -i to jail(8). This option makes jail(8) print the jail ID of the newly created jail. Imported-from: FreeBSD --- sys/kern/kern_jail.c | 11 ++++++++--- usr.sbin/jail/jail.8 | 5 ++++- usr.sbin/jail/jail.c | 19 ++++++++++++++----- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c index 18fe64a60a..d76d983cda 100644 --- a/sys/kern/kern_jail.c +++ b/sys/kern/kern_jail.c @@ -36,7 +36,7 @@ /* * $FreeBSD: src/sys/kern/kern_jail.c,v 1.6.2.3 2001/08/17 01:00:26 rwatson Exp $ - * $DragonFly: src/sys/kern/kern_jail.c,v 1.15 2006/12/31 19:36:54 dillon Exp $ + * $DragonFly: src/sys/kern/kern_jail.c,v 1.16 2007/01/01 19:45:54 victor Exp $ */ @@ -136,11 +136,15 @@ sys_jail(struct jail_args *uap) /* Multiip */ error = suser(td); - if (error) + if (error) { + uap->sysmsg_result = -1; return(error); + } error = copyin(uap->jail, &jversion, sizeof jversion); - if (error) + if (error) { + uap->sysmsg_result = -1; return(error); + } pr = kmalloc(sizeof *pr , M_PRISON, M_WAITOK | M_ZERO); SLIST_INIT(&pr->pr_ips); @@ -215,6 +219,7 @@ next: goto jail_attach_clean; nlookup_done(&nd); + uap->sysmsg_result = pr->pr_id; return (0); jail_attach_clean: diff --git a/usr.sbin/jail/jail.8 b/usr.sbin/jail/jail.8 index 570b36acdb..91897a7ca1 100644 --- a/usr.sbin/jail/jail.8 +++ b/usr.sbin/jail/jail.8 @@ -32,7 +32,7 @@ .\" ---------------------------------------------------------------------------- .\" .\" $FreeBSD: src/usr.sbin/jail/jail.8,v 1.13.2.15 2003/05/08 13:04:24 maxim Exp $ -.\" $DragonFly: src/usr.sbin/jail/jail.8,v 1.6 2006/12/29 18:02:56 victor Exp $ +.\" $DragonFly: src/usr.sbin/jail/jail.8,v 1.7 2007/01/01 19:45:54 victor Exp $ .\" .Dd December 12, 2001 .Dt JAIL 8 @@ -42,6 +42,7 @@ .Nd "imprison process and its descendants" .Sh SYNOPSIS .Nm +.Op Fl i .Op Fl u Ar username .Ar path hostname ip-list command ... .Sh DESCRIPTION @@ -51,6 +52,8 @@ command imprisons a process and all future descendants. .Pp The options are as follows: .Bl -tag -width ".Fl u Ar username" +.It Fl i +Output the jail identifier of the newly crated jail. .It Fl u Ar username The user name as whom the .Ar command diff --git a/usr.sbin/jail/jail.c b/usr.sbin/jail/jail.c index f99fc5f37d..1cd09c53f0 100644 --- a/usr.sbin/jail/jail.c +++ b/usr.sbin/jail/jail.c @@ -7,7 +7,7 @@ * ---------------------------------------------------------------------------- * * $FreeBSD: src/usr.sbin/jail/jail.c,v 1.5.2.2 2003/05/08 13:04:24 maxim Exp $ - * $DragonFly: src/usr.sbin/jail/jail.c,v 1.5 2006/12/29 18:02:57 victor Exp $ + * $DragonFly: src/usr.sbin/jail/jail.c,v 1.6 2007/01/01 19:45:54 victor Exp $ * */ @@ -37,15 +37,19 @@ main(int argc, char **argv) struct sockaddr_in6 *sin6; struct passwd *pwd = NULL; gid_t groups[NGROUPS]; - int ch, ngroups, i; + int ch, ngroups, i, iflag; char *username, *curpos; + iflag = 0; username = NULL; j.ips = malloc(sizeof(struct sockaddr_storage)*20); bzero(j.ips, sizeof(struct sockaddr_storage)*20); - while ((ch = getopt(argc, argv, "u:")) != -1) + while ((ch = getopt(argc, argv, "iu:")) != -1) switch (ch) { + case 'i': + iflag = 1; + break; case 'u': username = optarg; break; @@ -100,8 +104,13 @@ main(int argc, char **argv) } j.n_ips = i; - if (jail(&j) != 0) + i = jail(&j); + if (i == -1) err(1, "jail"); + if (iflag) { + printf("%d\n", i); + fflush(stdout); + } if (username != NULL) { if (setgroups(ngroups, groups) != 0) err(1, "setgroups"); @@ -122,6 +131,6 @@ usage(void) { fprintf(stderr, "%s\n", - "Usage: jail [-u username] path hostname ip-number command ..."); + "Usage: jail [-i] [-u username] path hostname ip-number command ..."); exit(1); } -- 2.11.4.GIT