diff options
author | hrs <hrs@FreeBSD.org> | 2013-10-12 17:46:13 +0000 |
---|---|---|
committer | hrs <hrs@FreeBSD.org> | 2013-10-12 17:46:13 +0000 |
commit | 2a6361507410ac1bd935b61f13d48c2512bb6cc3 (patch) | |
tree | 0048bc06e3c532564c02909ee0434f7e88e55d3a /usr.sbin/jail/command.c | |
parent | 70d85b1cf39bf4f4d66a66b27b197046221e67f9 (diff) | |
download | FreeBSD-src-2a6361507410ac1bd935b61f13d48c2512bb6cc3.zip FreeBSD-src-2a6361507410ac1bd935b61f13d48c2512bb6cc3.tar.gz |
MFC 256385:
- Add mount.fdescfs parameter to jail(8). This is similar to
mount.devfs but mounts fdescfs. The mount happens just after
mount.devfs.
- rc.d/jail now displays whole error message from jail(8) when a jail
fails to start.
Approved by: re (gjb)
Diffstat (limited to 'usr.sbin/jail/command.c')
-rw-r--r-- | usr.sbin/jail/command.c | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/usr.sbin/jail/command.c b/usr.sbin/jail/command.c index 452a079..04a4514 100644 --- a/usr.sbin/jail/command.c +++ b/usr.sbin/jail/command.c @@ -106,7 +106,12 @@ next_command(struct cfjail *j) case IP_MOUNT_DEVFS: if (!bool_param(j->intparams[IP_MOUNT_DEVFS])) continue; - /* FALLTHROUGH */ + j->comstring = &dummystring; + break; + case IP_MOUNT_FDESCFS: + if (!bool_param(j->intparams[IP_MOUNT_FDESCFS])) + continue; + j->comstring = &dummystring; case IP__OP: case IP_STOP_TIMEOUT: j->comstring = &dummystring; @@ -452,6 +457,32 @@ run_command(struct cfjail *j) } break; + case IP_MOUNT_FDESCFS: + argv = alloca(7 * sizeof(char *)); + path = string_param(j->intparams[KP_PATH]); + if (path == NULL) { + jail_warnx(j, "mount.fdescfs: no path"); + return -1; + } + devpath = alloca(strlen(path) + 8); + sprintf(devpath, "%s/dev/fd", path); + if (check_path(j, "mount.fdescfs", devpath, 0, + down ? "fdescfs" : NULL) < 0) + return -1; + if (down) { + *(const char **)&argv[0] = "/sbin/umount"; + argv[1] = devpath; + argv[2] = NULL; + } else { + *(const char **)&argv[0] = _PATH_MOUNT; + *(const char **)&argv[1] = "-t"; + *(const char **)&argv[2] = "fdescfs"; + *(const char **)&argv[3] = "."; + argv[4] = devpath; + argv[5] = NULL; + } + break; + case IP_COMMAND: if (j->name != NULL) goto default_command; |