Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F102913998
D47651.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D47651.diff
View Options
diff --git a/usr.sbin/jail/jail.8 b/usr.sbin/jail/jail.8
--- a/usr.sbin/jail/jail.8
+++ b/usr.sbin/jail/jail.8
@@ -285,11 +285,17 @@
and
.Dq false .
Other parameters may have more than one value, specified as a
-comma-separated list or with
+comma-separated list, or with
.Dq +=
in the configuration file (see
.Xr jail.conf 5
for details).
+List-based parameters may also be specified multiple times on the command
+line, i.e.,
+.Dq name=value1,value2
+and
+.Dq name=value1 name=value2
+are equivalent for such parameters.
.Pp
The
.Nm
@@ -944,8 +950,8 @@
may also be specified, in the form
.Dq Ar interface Ns | Ns Ar ip-address Ns / Ns Ar prefix param ... .
.It Va vnet.interface
-A network interface to give to a vnet-enabled jail after is it created.
-The interface will automatically be released when the jail is removed.
+A list of network interfaces to give to a vnet-enabled jail after is it created.
+The interfaces will automatically be released when the jail is removed.
.It Va zfs.dataset
A list of ZFS datasets to be attached to the jail.
This requires
diff --git a/usr.sbin/jail/jail.c b/usr.sbin/jail/jail.c
--- a/usr.sbin/jail/jail.c
+++ b/usr.sbin/jail/jail.c
@@ -146,6 +146,20 @@
IP__NULL
};
+static const struct {
+ const char *name;
+ enum intparam param;
+} listparams[] = {
+#ifdef INET
+ { "ip4.addr", KP_IP4_ADDR },
+#endif
+#ifdef INET6
+ { "ip6.addr", KP_IP6_ADDR },
+#endif
+ { "vnet.interface", IP_VNET_INTERFACE },
+ { "zfs.dataset", IP_ZFS_DATASET },
+};
+
int
main(int argc, char **argv)
{
@@ -330,6 +344,8 @@
usage();
docf = 0;
for (i = 0; i < argc; i++) {
+ size_t l;
+
if (!strncmp(argv[i], "command", 7) &&
(argv[i][7] == '\0' || argv[i][7] == '=')) {
if (argv[i][7] == '=')
@@ -338,32 +354,32 @@
for (i++; i < argc; i++)
add_param(NULL, NULL, IP_COMMAND,
argv[i]);
+ continue;
}
-#ifdef INET
- else if (!strncmp(argv[i], "ip4.addr=", 9)) {
- for (cs = argv[i] + 9;; cs = ncs + 1) {
- ncs = strchr(cs, ',');
- if (ncs)
- *ncs = '\0';
- add_param(NULL, NULL, KP_IP4_ADDR, cs);
- if (!ncs)
- break;
- }
- }
-#endif
-#ifdef INET6
- else if (!strncmp(argv[i], "ip6.addr=", 9)) {
- for (cs = argv[i] + 9;; cs = ncs + 1) {
+
+ /*
+ * Is this parameter a list?
+ */
+ for (l = 0; l < nitems(listparams); l++) {
+ size_t len;
+
+ len = strlen(listparams[l].name);
+ if (strncmp(argv[i], listparams[l].name, len) ||
+ argv[i][len] != '=')
+ continue;
+
+ for (cs = argv[i] + len + 1;; cs = ncs + 1) {
ncs = strchr(cs, ',');
if (ncs)
*ncs = '\0';
- add_param(NULL, NULL, KP_IP6_ADDR, cs);
+ add_param(NULL, NULL,
+ listparams[l].param, cs);
if (!ncs)
break;
}
+ break;
}
-#endif
- else
+ if (l == nitems(listparams))
add_param(NULL, NULL, 0, argv[i]);
}
} else {
diff --git a/usr.sbin/jail/tests/jail_basic_test.sh b/usr.sbin/jail/tests/jail_basic_test.sh
--- a/usr.sbin/jail/tests/jail_basic_test.sh
+++ b/usr.sbin/jail/tests/jail_basic_test.sh
@@ -25,9 +25,6 @@
# SUCH DAMAGE.
atf_test_case "basic" "cleanup"
-atf_test_case "nested" "cleanup"
-atf_test_case "commands" "cleanup"
-
basic_head()
{
atf_set descr 'Basic jail test'
@@ -58,6 +55,36 @@
jail -r basejail
}
+atf_test_case "list" "cleanup"
+list_head()
+{
+ atf_set descr 'Specify some jail parameters as lists'
+ atf_set require.user root
+}
+
+list_body()
+{
+ if [ "$(sysctl -qn kern.features.vimage)" -ne 1 ]; then
+ atf_skip "cannot create VNET jails"
+ fi
+ atf_check -o save:epair ifconfig epair create
+
+ epair=$(cat epair)
+ atf_check jail -c name=basejail vnet persist vnet.interface=${epair},${epair%a}b
+
+ atf_check -o ignore jexec basejail ifconfig ${epair}
+ atf_check -o ignore jexec basejail ifconfig ${epair%a}b
+}
+
+list_cleanup()
+{
+ jail -r basejail
+ if [ -f epair ]; then
+ ifconfig $(cat epair) destroy
+ fi
+}
+
+atf_test_case "nested" "cleanup"
nested_head()
{
atf_set descr 'Hierarchical jails test'
@@ -97,6 +124,7 @@
jail -r basejail_nochild
}
+atf_test_case "commands" "cleanup"
commands_head()
{
atf_set descr 'Commands jail test'
@@ -129,6 +157,7 @@
atf_init_test_cases()
{
atf_add_test_case "basic"
+ atf_add_test_case "list"
atf_add_test_case "nested"
atf_add_test_case "commands"
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Nov 19, 4:44 PM (11 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14719909
Default Alt Text
D47651.diff (4 KB)
Attached To
Mode
D47651: jail: Let a couple of parameter types be specified as lists
Attached
Detach File
Event Timeline
Log In to Comment